简体   繁体   中英

How can I install el4r in emacs 24?

I tried to instll el4r, which is kind of a EmacsRuby .

I basically installed everything as descibed here

My Setup

I use emacs 24 as provided by default from Ubuntu 12.10 with rbenv and my default ruby version is ruby 1.9.3p286 (2012-10-12 revision 37165) [x86_64-linux]

While I tested everything I had a minimalistic .emacs file containing the following text

;; 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.

When I start emacs with --debug-init I get the following errors:

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

The log file /tmp/el4r-mars.13757.log looks like this:

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.

I do not understand the problem and how I can fix it. Here is similar question but it is directed at xiki. Still I tried the answers with no success.

I got it to work properly.

Basically @Tass is right. The original el4r project seems to be dead, but there are newer forks that seem to work. It is very confusing because the documentation is really weird. The new projects install routines use the old scripts but you cannot follow them exactly.

Install

Here are the steps you have to follow to get it to work.

# 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

Configuration

For rbenv you have to add snippet from the question:

;; 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.

Test if everything works

Add the following lines to your ~/el4r/init.rb file

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

Start emacs and to to your scratch buffer.

Insert (stackoverflow-ruby-func 42) and evaluate. Your buffer should look something like this:

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

More information is in the gem directory under doc/ and test/.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM