emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [O] [OT] Encoding error when calling a ruby script from Emacs using


From: Marcelo de Moraes Serpa
Subject: Re: [O] [OT] Encoding error when calling a ruby script from Emacs using shell-command
Date: Fri, 31 Aug 2012 17:18:02 -0500

Alright, I solved it.

The problem is that emacs' shell-command doesn't use the same environment, so it wasn't picking up the value of those three vars:

✗ export | grep UTF
    LANG=en_US.UTF-8 
    LC_ALL=en_US.UTF-8
    LC_CTYPE=en_US.UTF-8

So, I did this:

(defun test ()
  (setenv "LANG" "en_US.UTF-8")
  (setenv "LC_ALL" "en_US.UTF-8")
  (setenv "LC_CTYPE" "en_US.UTF-8")
        (shell-command  "/Users/myself/.rvm/bin/rvm ruby-1.9.3-p194 do /usr/bin/rubyscript")
        )

And now it works fine.

Cheers,

- Marcelo.




On Fri, Aug 31, 2012 at 2:51 PM, Nick Dokos <address@hidden> wrote:
Marcelo de Moraes Serpa <address@hidden> wrote:

> Hey list,
>
> I've tried posting on help-gnu-emacs mailing list first, but not luck so far, so I thought I'd try here, as I know there are many savvy emacs users around.
>
> I have a small Ruby CLI program that I want to call from emacs. This script simply opens an emacs orgmode file from a specific location in my hard drive, and does some text processing. When I call it from the terminal directly, it works fine. When I call it from emacs, the
> script fails with an encoding error.
>
> I'm using this elisp to call it from emacs after a buffer is saved:
>
>     (defun test ()
>       (let ((universal-coding-system-argument 'utf-8-unix))
>             (shell-command  "/Users/myself/.rvm/bin/rvm ruby-1.9.3-p194 do /usr/bin/myrubyscript")
>         ))
>     (add-hook 'after-save-hook 'test)
>
> NOTE: The (let ((universal-coding-system-argument 'utf-8-unix)) was an attempt to fix it, but it made no difference whatsoever.
>

Probably wrong, but who knows? it may work by some miracle:

(let ((coding-system-for-read 'utf-8-unix)
      (coding-system-for-write 'utf-8-unix))
  (shell-command "/Users/myself/.rvm/bin/rvm ruby-1.9.3-p194 do /usr/bin/myrubyscript")


> After I save a buffer, the shell-command function is fired, but I get the following output in the "*Shell Command Output*" buffer:
>
>     F, [2012-08-30T01:59:18.688827 #94004] FATAL -- : invalid byte sequence in US-ASCII (ArgumentError)
>     /Users/myself/.rvm/gems/ruby-1.9.3-p194/gems/org-ruby-0.6.3/lib/org-ruby/parser.rb:89:in `split'
>     /Users/myself/.rvm/gems/ruby-1.9.3-p194/gems/org-ruby-0.6.3/lib/org-ruby/parser.rb:89:in `initia
>

But this looks like ruby is expecting ASCII and is getting something else (probably UTF-8).
What does the output of the command, when executed from a terminal, look like? Redirect it into
a file and then use od to look at bytes.

Also, you can try adding an output buffer as argument to the shell-command and then eyeballing the
output in that buffer to see if it matches the terminal output.

Nick

> The strange thing is that the file that this script opens *is* accessible, and is the same file it would open if it were fired up from the terminal. For some reason, Emacs is getting in the way, but I have no idea what that could be. Am I missing something? If someone could
> enlighten me here, I'd be really grateful!
>
> Thanks in advance,
>
> - Marcelo.
>
>
> ----------------------------------------------------
> Alternatives:
>
> ----------------------------------------------------


reply via email to

[Prev in Thread] Current Thread [Next in Thread]