Регистрация | Войти
Lisp — программируемый язык программирования
RSS
Русская кодировка в SLIME
Pirr - 07.12.2009 14:42, Сообщений - 41
Подскажите как сделать чтобы SLIME понимал русские буквы под Windows?
[#]
Необходимо в конфигурационный файл Emacs добавить следующую строчку
(setq slime-net-coding-system 'utf-8-unix)
Этот файл находится в домашней директории. Насколько я помню, его точное местоположение зависит от версии винды и emacs, проще всего сделать это из самого Emacs, открыв либо ~/.emacs, либо ~/.emacs.d/init.el - зависит от используемой конфигурации Emacs.
archimag - 07.12.2009 15:02
[#]
Нет такого файла - init.el, есть похожие файлы, пробовал вставлять туда предложенную строку, ничего не меняется.
В принципе, русские буквы печатаются, но не все и они не соответствуют раскладке клавиатуры. 
Pirr - 07.12.2009 16:11
[#]
> В принципе, русские буквы печатаются, но не все и они не соответствуют раскладке клавиатуры. 

Опс... Да у тебя совсем не та проблема, что я подумал. Это собственно проблема чисто Emacs, к Common Lisp она отношения не имеет. Можно чуть больше инфы?
archimag - 07.12.2009 16:25
[#]
У меня стоит Lisp in Box (Emacs+Clisp) под Windows.
При наборе на русской раскладке букв, часть букв русских, часть непонятные знаки, некоторые буквы не соответствуют раскладке (например вместо Й пишет Щ, вместо З пишет Ч).
Pirr - 07.12.2009 16:38
[#]
Я кажется с таким сталкивался, но это было очень давно. Вообще, надо искать инфу про настройку раскладки клавиатуру в Emacs для Windows, на странице http://www.emacswiki.org/emacs/GnuEmacsRussification есть такой вот совет:
(quail-define-package
  "cyrillic-jcuken" "Cyrillic" "RU" nil
  "ЙЦУКЕH keyboard layout widely used in Russia (ISO 8859-5 encoding)"
  nil t t t t nil nil nil nil nil t
)


 (quail-define-rules
  ("1" ?1) ("2" ?2) ("3" ?3) ("4" ?4) ("5" ?5) ("6" ?6) ("7" ?7) ("8" ?8)
  ("9" ?9) ("0" ?0) ("-" ?-) ("=" ?=) ("`") ("q") ("w") ("e")
  ("r") ("t") ("y") ("u") ("i") ("o") ("p") ("[")
  ("]") ("a") ("s") ("d") ("f") ("g" ?п) ("h") ("j")
  ("k") ("l") (";") ("'") ("\\" ?\\) ("z") ("x") ("c")
  ("v") ("b") ("n") ("m") (",") (".") ("/" ?.) ("!" ?!)
  ("@" ?\") ("#" ?#) ("$" ?\;) ("%" ?%) ("^" ?:) ("&" ??) ("*" ?*) ("(" ?()
  (")" ?)
)
("_" ?_) ("+" ?+) ("~")
  ("Q") ("W") ("E") ("R") ("T") ("Y") ("U") ("I")
  ("O") ("P") ("{") ("}") ("A") ("S") ("D") ("F")
  ("G") ("H") ("J") ("K") ("L") (":") ("\"") ("|" ?/)
  ("Z") ("X") ("C") ("V") ("B") ("N") ("M") ("<")
  (">") ("?" ?,)
)
Но я не знаю, насколько он работоспособен. 

P.S. Вообще странно, что такая проблема вообще возникла. Толи в Lisp in Box Emacs старинный, то ли я не знаю...
archimag - 07.12.2009 19:23
[#]

> Толи в Lisp in Box Emacs старинный, 

Угу, "21ый" там emacs. А сейчас уже "23ий" официальный стабильный. :)


Под windows:

1. Скачиваем emacs от сюда: http://ftp.gnu.org/pub/gnu/emacs/windows/emacs-23.1-bin-i386.zip

2. SLIME от сюда http://common-lisp.net/project/slime/snapshots/slime-current.tgz

3. Директорию /slime из пункта два помещаем в директорию /site-lisp emacs'а (который скачали и разпаковали в пункте 1)

Далее на примере CLISP (так как именно его я "прикручивал" к emacs).

4. Берем CLISP тут https://sourceforge.net/project/platformdownload.php?group_id=1355&sel_platform=8418

5. Создаем файл C:/.emacs ("точка" перед словом emacs) и в него помещаем такое 

(setq inferior-lisp-program "d:/lang/clisp/full/lisp.exe -B d:/lang/clisp/full -M d:/lang/clisp/full/lispinit.mem -ansi -q")
(require 'slime)
(slime-setup '(slime-repl))

Пути к clisp прописать свои.


Все. Запускаем emacs, делаем "M+x slime" и должно работать =)



artem - 08.12.2009 19:53
[#]
Вот спасибо!
Только собрался спросить как самому собрать Emacs+SLIME+Clisp а тут на тебе - ответ :)
Pirr - 08.12.2009 21:07
[#]
Сделал все по пунктам, при запуске "M+x slime" выдает следующее сообщение:
----------------------------------------------------------------------------------
(progn (load "c:/EMACS/site-lisp/slime/swank-loader.lisp" :verbose t) (funcall (read-from-string "swank-loader:init")) (funcall (read-from-string "swank:start-server") "e:/DOCUME~1/Admin/LOCALS~1/Temp/slime.3176" :coding-system "iso-latin-1-unix"))


Process inferior-lisp exited abnormally with code 53
----------------------------------------------------------------------------------
Pirr - 08.12.2009 23:00
[#]

Скорее всего (другого не знаю) в .emacs в этой строке

(setq inferior-lisp-program "d:/lang/clisp/full/lisp.exe -B d:/lang/clisp/full -M d:/lang/clisp/full/lispinit.mem -ansi -q")

пути к clisp не так прописаны, как нужно. Что там сейчас значится? И куда поставился clisp в системе?

artem - 09.12.2009 00:01
[#]
Скажу даже так, внимание не сколько на пути, сколько на параметры так же (те же -ansi, -q и подобное -- там много). 
artem - 09.12.2009 00:03
[#]
1. Emacs поставил в c:\emacs
2. SLIME (всю папку) поставил в c:\emacs\site-lisp\
3. Clisp проинсталлировал в c:\emacs\clisp-2.48\
4. Создал файл c:\.emacs и внес в него следующие строки:
(setq inferior-lisp-program "c:/emacs/clisp-2.48/full/lisp.exe -B c:/emacs/clisp-2.48/full -M c:/emacs/clisp-2.48/full/lispinit.mem -ansi -q")
(require 'slime)
(slime-setup '(slime-repl))

Винда у меня стоит на диске Е: - может это имеет значение?
Pirr - 09.12.2009 10:26
[#]

Идеи закончились. Я попробывал все поставить на диске C: как вы описали, у меня все работает...

Где я проблему вижу -- прописать правильно параметры вызова к clisp. У меня тоже были ошибки "Process inferior-lisp exited abnormally". Исправил как раз тем, что прописал переменную inferior-lisp-program так как я выше описал...

artem - 09.12.2009 14:32
[#]

Как вариант, запустить из командной строки (с терминала) в Windows CLISP через

"c:/emacs/clisp-2.48/full/lisp.exe -B c:/emacs/clisp-2.48/full -M c:/emacs/clisp-2.48/full/lispinit.mem -ansi -q"

и посмортеть что будет 

artem - 09.12.2009 14:37
[#]

У меня всё работает: emacs-23.1-bin-i386, slime-current, clisp-2.48.

Картинка вот: 

(add-to-list 'load-path "~/lisp/clisp/")
(load "clisp-coding.el");; Добавляет utf8
(require 'clisp-indent)

(setq inferior-lisp-program "C://Program Files//clisp-2.48//clisp.exe") ; Lisp system

(setf slime-lisp-implementations '((clisp ("C://Program Files//clisp-2.48//clisp.exe" "-L russian") :coding-system utf-8-unix )));

(add-to-list 'load-path "~/lisp/slime-2009-11-18/") ; SLIME directory
(require 'slime-autoloads)
(slime-setup '(slime-fancy))

(setq initial-frame-alist '((top . 0) (left . 20) (width . 120) (height . 47) (font . "-*-DejaVu LGC Sans mono-normal-r-*-*-16-*-*-*-c-*-iso10646-1")))
(setq default-frame-alist '((top . 10) (left . 20) (width . 120) (height . 47) (font . "-*-DejaVu LGC Sans mono-normal-r-*-*-16-*-*-*-c-*-iso10646-1")))
(setq frame-title-format 'buffer-file-name) ; set file name as frame title

(set-language-environment 'UTF-8)
(setq default-input-method 'russian-computer)
(set-selection-coding-system 'utf-16le-dos)
(set-default-coding-systems 'windows-1251)
(prefer-coding-system 'windows-1251)
(setq default-process-coding-system '(cp866 . cp866))
(set-terminal-coding-system 'cp866)


GeoVit - 09.12.2009 15:35
[#]
GeoVit - 09.12.2009 15:37
[#]
Вот ссылка на картинку: http://picasaweb.google.com/lh/photo/QmzEJE0dwTYZTCKWZeVsNA?feat=directlink
GeoVit - 09.12.2009 15:37
[#]

И что особенно важно для начинающих, сообщения об ошибке тоже печатаются по русски(пока не все, конечно):

Скриншот.

EVAL: функция ЕУЕ не определена
[Condition of type SYSTEM::SIMPLE-UNDEFINED-FUNCTION]

Restarts:
0: [USE-VALUE] Input a value to be used instead of (FDEFINITION 'ЕУЕ).
1: [RETRY] Еще раз
2: [STORE-VALUE] Input a new value for (FDEFINITION 'ЕУЕ).
3: [RETRY] Retry SLIME REPL evaluation request.
4: [ABORT] Return to SLIME's top level.
5: [ABORT] Abort
--more--

Backtrace:
0: [467] переменные связанные во фрейме (~ = динамически):
| ~ SWANK::*SWANK-STATE-STACK* <--> NIL
1: [464] переменные связанные во фрейме (~ = динамически):
| ~ SWANK::*SLDB-STEPPING-P* <--> NIL
2: [461] переменные связанные во фрейме (~ = динамически):
| ~ SWANK::*SLDB-LEVEL* <--> 0
3: [458] переменные связанные во фрейме (~ = динамически):
| ~ *PACKAGE* <--> #<PACKAGE COMMON-LISP-USER>
4: <1/451> #<COMPILED-FUNCTION SWANK::DEBUG-IN-EMACS>
[450] переменные связанные во фрейме (~ = динамически):
| ~ SWANK::*SLIME-INTERRUPTS-ENABLED* <--> T
5: <1/444> #<COMPILED-FUNCTION SWANK:INVOKE-SLIME-DEBUGGER>
- #<COMPILED-FUNCTION SWANK::SWANK-DEBUGGER-HOOK-2-1>
6: <1/442> #<COMPILED-FUNCTION SWANK::SWANK-DEBUGGER-HOOK-2-1>
- #<COMPILED-FUNCTION SWANK::SWANK-DEBUGGER-HOOK-2-1>
7: [441] переменные связанные во фрейме (~ = динамически):
| ~ *DEBUGGER-HOOK* <--> NIL

GeoVit - 09.12.2009 15:52
[#]
artem, спасибо! Все заработало. Когда я вбил в командной строке:
c:/emacs/clisp-2.48/full/lisp.exe -B c:/emacs/clisp-2.48/full -M c:/emacs/clisp-2.48/full/lispinit.mem -ansi -q
Система пожаловалась что не может найти svm.dll, она находится в c:\EMACS\clisp-2.48\libsvm\
Я скопировал эту библиотеку в папку Винды и все заработало.
С русскими буквами проблем нет.

GeoVit, а как сделать цветные строки и русские подсказки?

И можно ли настроить Emacs чтобы он сразу входил в SLIME без M-x slime?
Pirr - 09.12.2009 20:26
[#]

Цветные строки, я думаю, можно сделать если в .emacs вместо

(slime-setup '(slime-repl))

указать

(slime-setup '(slime-fancy))


:-)

artem - 09.12.2009 21:06
[#]

Pirr я же привёл свой конфиг.

Вот так включается русский в clisp:

(setf slime-lisp-implementations '((clisp ("C://Program Files//clisp-2.48//clisp.exe" "-L russian") :coding-system utf-8-unix ))).

То, что написал Artem, я не делал, пока не понял, зачем это надо, раз у меня и так работает:

(setq inferior-lisp-program "C://Program Files//clisp-2.48//clisp.exe").

И ещё, все параметры для запуска можно писать как раз в slime-lisp-implementations, там где у меня только "-L russian" прописано.


GeoVit - 10.12.2009 09:22
[#]
Спасибо, на основе Ваших конфигов, сделал свой.
Вроде все работает.
Только не получилось сделать автозагрузку Slime.
Если вставляю: (require 'slime-autoloads) вместо (require 'slime) выдается ошибка :(
Pirr - 10.12.2009 15:09
[#]

> Только не получилось сделать автозагрузку Slime.

В конце файла .emacs добавить строку

(slime)

Только это "автозапуск" скорее :)

artem - 10.12.2009 16:33
[#]

Pirr, а путь к slime прописали? (add-to-list 'load-path "~/lisp/slime-2009-11-18/") ; SLIME directory

должен стоять до вызова (require 'slime-autoloads).

GeoVit - 11.12.2009 08:18
[#]
Если в конце конфига записать (slime) то SLIME запускается, но окно Emasc делится пополам и SLIME грузится в нижнем окне, что не совсем удобно.

GeoVit, путь прописывал, все равно ошибка. Но у меня и без путей Emacs находит SLIME.
Pirr - 11.12.2009 21:51
[#]

> Если в конце конфига записать (slime) то SLIME запускается, но окно Emasc делится пополам и SLIME грузится в нижнем окне, что не совсем удобно.

Я ведь не знаю ваш изначальный .emacs конфиг и ваши познания в emacs. Чтобы не "делилось" пополам, в самом начале .emacs файла добавьте такую строку

(setq inhibit-splash-screen t)

:-)

artem - 11.12.2009 21:56
[#]
Артем, еще раз спасибо.
Я допилил свой конфиг с Вашей помощью.
Мои познания в Emacs - нулевые. Много слышал о нём, но никогда не пробовал.
Pirr - 11.12.2009 22:29
[#]
Подскажите а как прикрутить Clozure и SBCL к EMACS+SLIME?
Достаточно ли будет поменять путь вместо 
(setq inferior-lisp-program "C://Program Files//clisp-2.48//clisp.exe")
на
(setq inferior-lisp-program "C://ccl//wx86cl.exe")
или
(setq inferior-lisp-program "c://Steel Bank Common Lisp//1.0.29//sbcl.exe")

Pirr - 23.12.2009 23:15
[#]
> Достаточно ли будет поменять путь вместо 
Вообще говоря - да, но это не удобно, по крайней мере, если регулярно приходиться работать с разными реализациями. Мне очень нравится, как сделал я: http://archimag-dev.blogspot.com/2008/12/sbcl-slime-clisp-slime-and-etc.html :)
archimag - 24.12.2009 01:25
[#]
Вот спасибо, о такой мультизагрузке я и не мечтал.
Pirr - 24.12.2009 17:52
[#]
Пытаюсь настроить Могучий в слайме под убунтою. Когда запускаю просто емакс, всё в порядке, но когда clbuild slime - квадратики. Тщетно добавил в ~/.emacs разные лекарства из этого треда: пишет, что не может найти файл "clisp-coding.el", а у меня его и нет нигде, судя по locate. Где можно взять?
condemetrius - 06.01.2010 03:02
[#]
clisp-coding.el - находится в составе clisp в папке .\clisp-2.48\Emacs
А какую реализацию Лиспа вы прикручиваете к Emacs?
Pirr - 07.01.2010 22:19
[#]
Здравствуйте! Столкнулся с той же проблемой в Lisp Box (нет поддержки русского), собираю по отдельности EMACS+SLIM+CLISP на windows7. Сделал все по инструкции, предложенной  artem, файл  svm.dll скопировал в каталог винды. Запускаю emacs, задаю "M+x slime", он что-то натужно делает (бегут строки), потом останавливается, сообщая: "Lisp connection closed unexpectedly: connection broken by remote peer". Посоветуйте пожалуйста что-нибудь. (в emacs работать пока не умею). Может быть глупый поступок, но виндовый брэндмауэр отрубать пробовал, проблемы не решило.
optimistic - 01.02.2010 09:59
[#]
Извините, пожалуйста, чайника, лисп все-таки запустился и работает (во всяком случае "(+ 2 2)", единственное что я пока знаю, выполняется))). Но все-таки, что значило то сообщение, интересно.
optimistic - 01.02.2010 10:19
[#]
> Но все-таки, что значило то сообщение, интересно.

Вероятно, не смог соедениться с swank-сервером. Причины? Х.з., мало инфы, может быть помогло таки отключение брэндмауэра ;)
archimag - 01.02.2010 11:34
[#]
Нет, оказалось что ни брэндмауэр ни антивирус не влияют на этот swank. Лисп работает и при них и без них, просто я этого не понял сразу, так как приглашение после ошибки появляется не "CL-USER>" а "[2]>", но работает, наверное, неправильно. Вот что выводится в буфер "*messages*":

Polling "c:/Users/A4F7~1/AppData/Local/Temp/slime.3940".. (Abort with `M-x slime-abort-connection'.) [5 times]
Connecting to Swank on port 49160.. [2 times]
Lisp connection closed unexpectedly: connection broken by remote peer

В буфер "*inferior-lisp*" среди всего прочего выводятся несколько WARNING:..., все завершается примерно так:

WARNING: These Swank interfaces are unimplemented: ..тут всякое.....
;; Swank started at port: 54776.
CL-USER>
;; swank:close-connection:
WRITE-STRING: Character #\u0410 cannot be represented in the character set CHARSET:ISO-8859-1

потом начинается блок

;; Event history start: ....тут всякое....  ;; Event history end:

потом идет блок ::backtrace, который завершается этим:

;; Connection to Emacs lost. [
;;  condition: WRITE-STRING: Character #\u0410 cannot be represented in the character set CHARSET:ISO-8859-1
;;  type: SIMPLE-CHARSET-TYPE-ERROR
;;  encoding: #<ENCODING ISO-8859-1 UNIX> style: NIL dedicated: NIL]
;; swank:close-connection: NIL
54776

после чего приглашение, в которое можно вводить лисп:

[2]>

файл .emacs такой:

(setq inferior-lisp-program "d:/clisp/full/lisp.exe -B d:/clisp/full -M d:/clisp/full/lispinit.mem -ansi -q")
(require 'slime)
(slime-setup '(slime-fancy))
(tool-bar-mode 0)

вот содержимое буфера:  http://narod.ru/disk/17499998000/inferior-lisp.txt.html
optimistic - 02.02.2010 07:07
[#]

2optimistic:

С кодировками проблема при конвертации из unicode в iso-8859-1. Я в emacs'е русским языком не пользуюсь вообще (никогда не было необходимости еще), поэтому подсказать ничего не могу. У меня тоже "вылетает" так же как и у вас, если я попробую русские буквы ввести в приглашение REPL'а. 

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

artem - 02.02.2010 12:39
[#]
проблема вроде решилась добавлением в .emacs
(setq slime-net-coding-system 'utf-8-unix)

Вычитал в мануале к slime.
 
Можно ли будет задавать вопросы по emacs в этот форум?
optimistic - 04.02.2010 02:31
[#]
> Можно ли будет задавать вопросы по emacs в этот форум?

Ну, предмодерации здесь нет :) Можно. Только в отдельном топике :)
archimag - 04.02.2010 02:34
[#]

Странно, вроде и конфиг выложил в этом треде, и скриншот в подтверждение, и всё равно народ не читает и снова спрашивает про кодировки.

Кстати, конфиг artem'а вреден для новичков под виндой, тк запутывает только. Новичку нафиг не нужно указывать образ(достаточно запустить clisp.exe, он сам всё знает), увеличивать ansi cl compliance и подавлять сообщения компиляции.

GeoVit - 18.02.2010 11:49
[#] Ответ на комментарий от GeoVit 09.12.2009 15:35
Стоит lisp in a box, это готовая собранная среда, не работает русская кодировка, в редакторе пытался сменить окружение 0 эффекта, у него по умолчанию нет файла .emacs, создавал, пробовал добавлять в него локализацию, ничего не помогает
Попробовал собрать по инструкции из пакетов, установил, создал .emacs, добавил с изменением путей на свои
(add-to-list 'load-path "C:/Program Files (x86)/clisp-2.49/emacs/")
(load "clisp-coding.el");; Добавляет utf8
(require 'clisp-indent)

(setq inferior-lisp-program "C://Program Files (x86)//clisp-2.49//clisp.exe") ; Lisp system

(setf slime-lisp-implementations '((clisp ("C://Program Files (x86)//clisp-2.49//clisp.exe" "-L russian") :coding-system utf-8-unix )));

(add-to-list 'load-path "C:/Program Files (x86)/emacs-23.2/site-lisp/slime-2011-02-04/") ; SLIME directory
(require 'slime-autoloads)
(slime-setup '(slime-fancy))

(setq initial-frame-alist '((top . 0) (left . 20) (width . 120) (height . 47) (font . "-*-DejaVu LGC Sans mono-normal-r-*-*-16-*-*-*-c-*-iso10646-1")))
(setq default-frame-alist '((top . 10) (left . 20) (width . 120) (height . 47) (font . "-*-DejaVu LGC Sans mono-normal-r-*-*-16-*-*-*-c-*-iso10646-1")))
(setq frame-title-format 'buffer-file-name) ; set file name as frame title

(set-language-environment 'UTF-8)
(setq default-input-method 'russian-computer)
(set-selection-coding-system 'utf-16le-dos)
(set-default-coding-systems 'windows-1251)
(prefer-coding-system 'windows-1251)
(setq default-process-coding-system '(cp866 . cp866))
(set-terminal-coding-system 'cp866)
пути все идут от корня, дабы не совсем представляю откуда в win7 тильда путь строит. Выдал он мне такую ошибку
Warning (initialization): An error occurred while loading `c:/.emacs':

Symbol's function definition is void: setf

To ensure normal operation, you should investigate and remove the
cause of the error in your initialization file.  Start Emacs with
the `--debug-init' option to view a complete error backtrace.
Что делать, чтобы включить русский?
без русского алфавита проблемно строить программы по работе с русскими словами

Piligrim - 04.02.2011 14:31
[#] Ответ на комментарий от Piligrim 04.02.2011 14:31

За setf прошу прощения, это макро из пакета cl. Надо (require 'cl) вставить в начале файла .emacs

Мой конфиг - под Emacs 23, в lispbox'е работать не будет. Рекомендую скачать Emacs 23.2, почитать блог Emacs на Хабрахабре, там для новичков всё понятно разжёвано. В Windows лучше задать переменную среды HOME, например, в командной строке так: set HOME=%USERPROFILE%\Emacs, предварительно создав каталог Emacs: mkdir %USERPROFILE%\Emacs .

Тогда в профиле пользователя, в папке Emacs надо создать(или скопировать туда) файл .emacs и там же будут располагаться все служебные файлы Emacs'а. 

GeoVit - 26.02.2011 19:36
@2009-2013 lisper.ru