← Архив: SLIME

slime vs. русская локализация системы

Author: · 26.05.2010 08:17
· original author: treep
У меня в системе утилиты пишут по-русски - при их вызове это рушит Slime. То есть, если написать:
(sb-ext:process-exit-code
  (sb-ext:run-program "/bin/sh" '("-c" "wget http://google.ru") :input nil :output *standard-output*)
)

в консоли, то всё хорошо, а если в Slime - он отваливается. Причём если вызвать что-нибудь, что не будет писать по-русски, например:
(sb-ext:run-program "/bin/sh" '("-c" "ls") :input nil :output *standard-output*)
то всё хорошо и там и там.
Что с этим можно сделать? Может нужно как-то привести в соответствие кодировку SLIME и системную?
· original author: marsijanin
(setq slime-net-coding-system 'utf-8-unix) стоит в ~/.emacsrc?
Во вторых, может дело в том, что там wget со своим прогресбаром и repl'овские настройки терминала не дружат?
· original author: treep
>> (setq slime-net-coding-system 'utf-8-unix) стоит в ~/.emacsrc?
Сейчас посмотрю.

>> Во вторых, может дело в том, что там wget со своим прогресбаром и repl'овские настройки терминала не дружат?

Если запускать из баша - то всё ок, wget использует *standard-output* интерактивно, потом отдаёт управление REPL-у. А вот в емакс не получается.
· original author: treep
>> (setq slime-net-coding-system 'utf-8-unix)
Я его зачем-то закомментировал. Теперь всё здорово, спасибо!
· original author: condemetrius
У меня на тему локализации стоит такое:
(set-language-environment "utf-8")
(setq slime-net-coding-system 'utf-8-unix)
В итоге Емакс кириллицу отображает, а в Слайме - квадратики. Куда копать?
· original author: h1t
какая версия emacs?
должна быть 23, тогда
можно не писать
(set-language-environment "utf-8")
так тоже лучше не писать:
(setq slime-net-coding-system 'utf-8-unix)
это работает не для всех лиспов
лучше примерно так:
(setq slime-lisp-implementations
      '((cmucl ("lisp" "-quiet"))
        (lw    ("~/LispWorksPersonal/lispworks-personal-5-1-1-x86-linux"))
        (sbcl ("sbcl") :coding-system utf-8-unix)))
т.е указывается путь к образу и параметры запуска
для дефолта нужно написать:
(setq slime-default-lisp 'sbcl)
а для запуска с возможностью выбора:
C-u - M-x slime
· original author: archimag
Мне так кажется очень не удобным, у себя сделал так:
(defmacro define-slime-lisp (lisp path &optional coding)
 (let ((funname (intern (format "%s-slime" lisp))))
   `(defun ,funname ()
      (interactive)
      (let ((inferior-lisp-program ,path)
            (slime-net-coding-system (or ,coding 'utf-8-unix))
)

        (slime)
)
)
)
)

(define-slime-lisp sbcl "/usr/bin/sbcl")
(define-slime-lisp clisp "/usr/bin/clisp -K full")
(define-slime-lisp clozure  "/usr/bin/ccl")
(define-slime-lisp ecl "/usr/bin/ecl" 'iso-latin-1-unix)
Теперь в Emacs доступны команды: sbcl-slime, clisp-slime, clozure-slime и т.п.
· original author: archimag
А ты что почему возможность вставки кода в нормальном виде не пользуешься?
· original author: h1t
за ней далеко ходить нужно
и такая расцветка кода мне
не нравиться.
поэтому использую дефолтную :-)
· original author: archimag
> за ней далеко ходить нужно
Куда это далеко? Крайняя правая кнопка на панели инструментов. Так можно не указывать язык и тогда будет просто блок pre, с границами и фоном, но без какого-либо подсвечивания.
· original author: h1t
тест:
(setq slime-lisp-implementations
      '((cmucl ("lisp" "-quiet"))
        (lw    ("/LispWorksPersonal/lispworksh-personal-5-1-1-x86-linux"))
        (sbcl ("sbcl") :coding-system utf-8-unix)
)
)

функционал тот же что и у тебя.
твой подход мне пригодился бы
только в случае использования этих
функций в коде.