1

我试图安装 el4r,这是一种EmacsRuby

我基本上按照这里的描述安装了所有东西

我的设置

我使用带有 rbenv 的 Ubuntu 12.10 默认提供的 emacs 24,我的默认 ruby​​ 版本是 ruby​​ 1.9.3p286(2012-10-12 修订版 37165)[x86_64-linux]

当我测试所有内容时,我有一个简约的 .emacs 文件,其中包含以下文本

;; Source: http://marc-bowes.com/2012/03/10/rbenv-with-emacs.html
;; Setting rbenv path
(setenv "PATH" (concat (getenv "HOME") "/.rbenv/shims:"
               (getenv "HOME") "/.rbenv/bin:"
               (getenv "PATH")))
(setq exec-path (cons (concat (getenv "HOME") "/.rbenv/shims")
              (cons (concat (getenv "HOME") "/.rbenv/bin")
                exec-path)))

;; Beginning of the el4r block:
;; RCtool generated this block automatically. DO NOT MODIFY this block!
(add-to-list 'load-path "/home/mars/.rbenv/versions/1.9.3-p286/share/emacs/site-lisp")
(require 'el4r)
(el4r-boot)
;; End of the el4r block.
;; User-setting area is below this line.

当我使用 --debug-init 启动 emacs 时,出现以下错误:

Debugger entered--Lisp error: (el4r-ruby-error)
  signal(el4r-ruby-error nil)
  (condition-case err (eval (setq expr (read result))) (el4r-ruby-error (signal (quote el4r-ruby-error) nil)) (error (setq el4r-error-lisp-expression expr) (signal (car err) (cdr err))))
  (let ((result (el4r-recv)) expr) (while (eq (length result) 0) (el4r-wait-expr) (setq result (el4r-recv))) (condition-case err (eval (setq expr (read result))) (el4r-ruby-error (signal (quote el4r-ruby-error) nil)) (error (setq el4r-error-lisp-expression expr) (signal (car err) (cdr err)))))
  el4r-get()
  (let ((result (el4r-get))) (el4r-leave-call) result)
  el4r-ruby-eval("el4r_boot")
  el4r-boot()
  eval-buffer(#<buffer  *load*> nil "/home/mars/.emacs" nil t)  ; Reading at buffer position 567
  load-with-code-conversion("/home/mars/.emacs" "/home/mars/.emacs" t t)
  load("~/.emacs" t t)
  #[0 "\205\262

日志文件 /tmp/el4r-mars.13757.log 如下所示:

2012-11-09 18:00:58 +0100:Starting, waiting for expression.
2012-11-09 18:00:58 +0100:Error: cannot load such file -- test/unit/ui/console/testrunner (LoadError)
  from /home/mars/.rbenv/versions/1.9.3-p286/bin/el4r-instance:846:in `instance_eval'
  from /home/mars/.rbenv/versions/1.9.3-p286/bin/el4r-instance:491:in `require'
  from /home/mars/.rbenv/versions/1.9.3-p286/bin/el4r-instance:889:in `el4r_install_test_unit_testrunner'
  from /home/mars/.rbenv/versions/1.9.3-p286/bin/el4r-instance:882:in `el4r_install_unittest_stuff'
  from /home/mars/.rbenv/versions/1.9.3-p286/bin/el4r-instance:877:in `el4r_install_builtin_functions'
  from /home/mars/.rbenv/versions/1.9.3-p286/bin/el4r-instance:723:in `el4r_boot__noinit'
  from /home/mars/.rbenv/versions/1.9.3-p286/bin/el4r-instance:735:in `el4r_boot'
  from (eval):1:in `el4r_ruby_eval'
  from /home/mars/.rbenv/versions/1.9.3-p286/bin/el4r-instance:846:in `instance_eval'
  from /home/mars/.rbenv/versions/1.9.3-p286/bin/el4r-instance:846:in `el4r_ruby_eval'
  from /home/mars/.rbenv/versions/1.9.3-p286/bin/el4r-instance:791:in `el4r_get'
  from /home/mars/.rbenv/versions/1.9.3-p286/bin/el4r-instance:768:in `block in el4r_wait_expr'
  from /home/mars/.rbenv/versions/1.9.3-p286/bin/el4r-instance:835:in `el4r_with_call'
  from /home/mars/.rbenv/versions/1.9.3-p286/bin/el4r-instance:765:in `el4r_wait_expr'
  from /home/mars/.rbenv/versions/1.9.3-p286/bin/el4r-instance:760:in `el4r_wait_expr_loop'
  from /home/mars/.rbenv/versions/1.9.3-p286/bin/el4r-instance:1094:in `<main>'
2012-11-09 18:01:03 +0100:wrong number of arguments (1 for 0) (ArgumentError)
  from /home/mars/.rbenv/versions/1.9.3-p286/bin/el4r-instance:1084:in `block in <main>'
  from /home/mars/.rbenv/versions/1.9.3-p286/bin/el4r-instance:760:in `call'
  from /home/mars/.rbenv/versions/1.9.3-p286/bin/el4r-instance:760:in `eof?'
  from /home/mars/.rbenv/versions/1.9.3-p286/bin/el4r-instance:760:in `el4r_wait_expr_loop'
  from /home/mars/.rbenv/versions/1.9.3-p286/bin/el4r-instance:1094:in `<main>'
2012-11-09 18:01:03 +0100:Exiting.

我不明白这个问题以及如何解决它。这是类似的问题,但它是针对 xiki 的。我仍然尝试了没有成功的答案。

4

1 回答 1

1

我让它正常工作。

基本上@Tass 是对的。最初的 el4r 项目似乎已经死了,但似乎有一些新的分叉可以工作。这很令人困惑,因为文档真的很奇怪。新项目安装例程使用旧脚本,但您不能完全遵循它们。

安装

以下是您必须遵循的步骤才能使其正常工作。

# Install http://rubygems.org/gems/trogdoro-el4r, but do not follow instructions on page
# Do not download the original el4r sources and files.
gem install trogdoro-el4r
# Go to the gem directory. For me it is:
cd /home/mars/.rbenv/versions/1.9.3-p286/lib/ruby/gems/1.9.1/gems/trogdoro-el4r-1.0.7
# Run the "original" setup commands
ruby setup.rb
cd bin
ruby -S el4r-rctool -p
ruby -S el4r-rctool -i
# Add `el4r_load "el4r-mode.rb"` to ~/.el4r/init.rb or execute this command
echo 'el4r_load "el4r-mode.rb"' >> ~/.el4r/init.rb
# Fix your .emacs.el or .emacs.d by adding the code from the newly generated ~/.emacs file
# Use the ruby you have installed the gem with. In my case rbenv ruby 1.9.3-p286
# You need to re-install el4r if you change your ruby version

配置

对于 rbenv 你必须从问题中添加片段:

;; Source: http://marc-bowes.com/2012/03/10/rbenv-with-emacs.html
;; Setting rbenv path
(setenv "PATH" (concat (getenv "HOME") "/.rbenv/shims:"
               (getenv "HOME") "/.rbenv/bin:"
               (getenv "PATH")))
(setq exec-path (cons (concat (getenv "HOME") "/.rbenv/shims")
              (cons (concat (getenv "HOME") "/.rbenv/bin")
                exec-path)))

;; Beginning of the el4r block:
;; RCtool generated this block automatically. DO NOT MODIFY this block!
(add-to-list 'load-path "/home/mars/.rbenv/versions/1.9.3-p286/share/emacs/site-lisp")
(require 'el4r)
(el4r-boot)
;; End of the el4r block.
;; User-setting area is below this line.

测试是否一切正常

将以下行添加到您的 ~/el4r/init.rb 文件中

defun(:stackoverflow_ruby_func) { |a|
  insert_string("It works!: '#{a}'"); newline
}

启动 emacs 并到您的暂存缓冲区。

插入(stackoverflow-ruby-func 42)和评估。您的缓冲区应如下所示:

(stackoverflow-ruby-func 42)It works!: '42'

更多信息在 doc/ 和 test/ 下的 gem 目录中。

于 2012-11-09T17:59:15.097 回答