Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

SLIME в Emacs

204 views
Skip to first unread message

Michael N. Kuleshov

unread,
Jul 15, 2008, 4:43:02 AM7/15/08
to
Здравствуйте!


Подскажите (намекните) как в Emacs установить (настроить?) SLIME mode.

Спасибо!

Михаил

Ruslan Kosolapov

unread,
Jul 15, 2008, 10:54:03 PM7/15/08
to

MNK> Подскажите (намекните) как в Emacs установить (настроить?) SLIME mode.

У меня так:

;; lisp
(require 'slime)
(setq inferior-lisp-program "/usr/local/bin/sbcl --noinform")
(setq common-lisp-hyperspec-root
"file:///Users/rk/Documents/books/tech/HyperSpec/")
(slime-setup)
(setq slime-startup-animation nil)

--
rk

Alex Mizrahi

unread,
Jul 16, 2008, 4:32:41 PM7/16/08
to
MNK> Подскажите (намекните) как в Emacs установить (настроить?) SLIME mode.

в файл инициализации (C-x-f .emacs, если у тебя конкретно Emacs) пишешь
что-то такое:

(add-to-list 'load-path "/путь/куда/распаковал/slime/")
(add-to-list 'load-path "/путь/куда/распаковал/slime/contrib")
(require 'slime)
(slime-setup)

вариации:

* если ставил SLIME из пакета (к примеру, в Debian), пути писать не нужно

* в slime-setup можно указать какие дополнительные возможность загружать,
например:
(slime-setup '(slime-fancy))
загрузит основные модули вроде автодополнения и т.д.

* указать какой лисп запускать можно так:
(setq inferior-lisp-program "sbcl")

* полезные настройки:
(paren-set-mode 'blink-paren) ; подсвечивание скобок
;; правильная индентация
(setq lisp-indent-function 'common-lisp-indent-function)

* локальная документация:

(setq common-lisp-hyperspec-root "file:///C:/TEXTS/hyperspec/HyperSpec/")
(setq common-lisp-hyperspec-symbol-table
"C:/TEXTS/hyperspec/HyperSpec/Data/Map_Sym.txt")
;; иначе будет ссылаться на интернет

* поддержка не-английских символов -- не знаю, может в Emacs работает из
коробки, в XEmacs нужно настраивать..

* автодополнение может быть по-умолчанию повешено на какие-то не совсем
адекватные
кнопки (к тому же ещё и разные в редакторе и REPL). можно перевесить на
более адекватные,
к примеру caps-lock или f12. как-то так:

(add-hook 'slime-mode-hook
'(lambda ()
(define-key slime-repl-mode-map [f12] 'slime-complete-symbol)))

(add-hook 'slime-repl-mode-hook
'(lambda ()
(define-key slime-repl-mode-map [f12] 'slime-complete-symbol)))

кстати, ещё насчёт сочетаний кнопок -- мне было трудно привыкнуть к
комбинациям для выделения/
копирования/удаления и т.д. в Emacs, т.к. я привык к редакторам Windows.
вместо того чтобы настроить
всё под себя, оказалось проще установить XEmacs -- там прямо из коробки
работает всё что надо.
(под виндой вообще всё, под линуксом пришлось пару сочетаний переназначить).
и вообще чуток
поприятнее некоторые вещи сделаны, по моему субъективному мнению. так что
если не получается с Emacs,
стоит попробовать XEmacs.


Michael N. Kuleshov

unread,
Jul 30, 2008, 11:32:37 AM7/30/08
to

Привет, Alex и Aleksandr, спасибо за ответ по Slime!

Долго не мог понять, в каком формате указывать path, в * Messages *
после старта прочитал ("D:\\Program Files\\emacs-22.2\\bin\\emacs.exe")

Потом в * scratch * (print load-path) C-x C-e - и исправил формат.
Долго искал, где init-file .emacs
Воспользовался советом на
http://www.gnu.org/software/emacs/windows/Installing-Emacs.html#Installing-Emacs
(insert (getenv "HOME")) - нашел в C:\Documents and
Settings\UserName\Application Data\.emacs.d\init.el

Пробовал разные варианты init.el, работает вот этот:

(add-to-list 'load-path "D:/Program Files/emacs-22.2/slime")
(add-to-list 'load-path "D:/Program Files/emacs-22.2/slime/contrib")
(add-to-list 'load-path "D:/Program Files/emacs-22.2/slime/doc")
(require 'slime)
(slime-setup)

Hо приходится вручную M-x slime-mode
Как бы автоматизировать запуск slime-mode?

Если набрать M-x slime, то
"apply: Searching for program: no such file or directory, lisp"
Что ей не нравится?

Repl запускаю так: M-x slime-repl-mode
Если набрать M-x slime-repl, то "slime-connection: Not connected"

Появляются меню SLIME и REPL, но REPL-приглашения нет.

Правильно ли я делаю?
Где подкрутить?

Михаил

Alex Mizrahi пишет:


> MNK> Подскажите (намекните) как в Emacs установить (настроить?) SLIME mode.
>
> в файл инициализации (C-x-f .emacs, если у тебя конкретно Emacs) пишешь
> что-то такое:
>
> (add-to-list 'load-path "/путь/куда/распаковал/slime/")

...

Михаил

Alex Mizrahi

unread,
Jul 30, 2008, 1:59:24 PM7/30/08
to
MNK> Пробовал разные варианты init.el, работает вот этот:

а вот был бы у тебя линукс, всё работало бы из коробки :)


MNK> Hо приходится вручную M-x slime-mode
MNK> Как бы автоматизировать запуск slime-mode?

вообще-то slime-setup и так автоматизирует включение slime-mode для всех
файлов .lisp и т.д.:
(add-hook 'lisp-mode-hook 'slime-lisp-mode-hook)

у тебя файл изначально определяется в lisp-mode?
в общем, покажи какой режим оно пишет изначально и какой после slime-mode


MNK> Если набрать M-x slime, то
MNK> "apply: Searching for program: no such file or directory, lisp"
MNK> Что ей не нравится?

* указать какой лисп запускать можно так:
(setq inferior-lisp-program "sbcl")

там должен быть путь к реализации лиспа которую ты собираешься использовать
(CLISP?), такой чтобы оно его нашло -- т.е., возможно, полный путь.


Michael N. Kuleshov

unread,
Jul 31, 2008, 8:21:57 AM7/31/08
to

Alex Mizrahi пишет:

> а вот был бы у тебя линукс, всё работало бы из коробки :)

Да уж, у меня помимо много претензий к выне. 1с не идет, жаль, а то б, а
я б... :)

...


> у тебя файл изначально определяется в lisp-mode?

Какой? .el?
Когда открываю init.el, появляется пункт меню Emacs-Lisp
(При переходе в *scratch* пункта меню Emacs-Lisp нет.)

M-x slime - не находит Lisp:


apply: Searching for program: no such file or directory, lisp"

(print inferior-lisp-program) C-x C-e
"lisp"
"lisp"

Пробовал поставить SBCL - дома запускается, на работе, на более мощном
компе - нет:

> VirtualAlloc: 0x1e7.
> ensure_space: failed to validate 536870912 bytes at 0x09000000
> (hint: Try "ulimit -a"; maybe you should increase memory limits.)

Пробовал sbcl.exe ulimit -a - то же сообщение.


> в общем, покажи какой режим оно пишет изначально и какой после slime-mode
>
>
> MNK> Если набрать M-x slime, то
> MNK> "apply: Searching for program: no such file or directory, lisp"
> MNK> Что ей не нравится?
>
> * указать какой лисп запускать можно так:
> (setq inferior-lisp-program "sbcl")
>
> там должен быть путь к реализации лиспа которую ты собираешься использовать
> (CLISP?), такой чтобы оно его нашло -- т.е., возможно, полный путь.

См. выше, по умолчанию:
(print inferior-lisp-program) C-x C-e
"lisp"

Я никакого Lisp'а, наивный, не ставил больше, понадеялся на Emacs Lisp.
А что, нужно?
Куда, в какую папку?
Какую папку этого Lisp'а указать в (setq inferior-lisp-program "папка")?
(setq inferior-lisp-program "папка") прописать в init.el?


Какой помимо можно использовать для Win XP?


Михаил
ЗЫ. Удивительно наблюдать, как в Emacs можно менять функциональность на
лету, без перекомпиляции.

Как настроить копи-пасте через С-с, С-v (С-м в русском регистре)
намекните, плз!

МК

Alex Mizrahi

unread,
Jul 31, 2008, 10:15:24 AM7/31/08
to
??>> а вот был бы у тебя линукс, всё работало бы из коробки :)
MNK> Да уж, у меня помимо много претензий к выне.
MNK> 1с не идет, жаль, а то б, а я б... :)

дак никто не мешает использовать одновременно -- установи vmware server,
скачай готовую вирт. машину с линуксом и пользуй, я так работаю, к примеру.
только на компе желательно памяти хотя бы 1 GB, на 512 уже будет не совсем
комфортно.

??>> у тебя файл изначально определяется в lisp-mode?
MNK> Какой? .el?
MNK> Когда открываю init.el, появляется пункт меню Emacs-Lisp

нет, .el как раз именно Emacs-Lisp и должно писать.
файлы Common Lisp обычно называют .lisp или .cl, slime-mode для
них должен автоматически устанавливаться.

MNK> Пробовал поставить SBCL - дома запускается, на работе, на более мощном
MNK> компе - нет:

SBCL под виндой работает не надёжно -- запустится он или нет зависит от
фрагментации адресного пространства, что в свою очередь зависит от того, что
установлено на компьютере (какие dll как загружаются). это не считая
множества мелких недоработок..

под виндой из бесплатных реализаций рекомендуется CLISP или ECL. CLISP
популярнее, в ECL есть поддержка многопоточности и возможность лёгкой
интеграции с C.

??>> VirtualAlloc: 0x1e7.
??>> ensure_space: failed to validate 536870912 bytes at 0x09000000
??>> (hint: Try "ulimit -a"; maybe you should increase memory limits.)
MNK> Пробовал sbcl.exe ulimit -a - то же сообщение.

он по-умолчанию пытается выделить себе непрерывный кусок памяти в 512 MB.
можно попробовать умерить аппетит опцией dynamic-space-size, например:

sbcl --dynamic-space-size 256

это будет 256 MB. можно уменьшить до 64.


MNK> См. выше, по умолчанию:
MNK> (print inferior-lisp-program) C-x C-e
MNK> "lisp"

MNK> Я никакого Lisp'а, наивный, не ставил больше, понадеялся на Emacs
MNK> Lisp. А что, нужно?

ну как бы да. Emacs Lisp радикально отличается от Common Lisp (например,
отсутствием лексических замыканий и ОО) и присутствует в Emacs без всякого
SLIME.

хотя если тебя интересует программирование расширений к текстовому
редактору, и не смущает остутсвие мегакульных фич, можно ограничиться Emacs
Lisp

MNK> Куда, в какую папку?

в любую, только желательно чтобы в названии не было
пробелов и русских букв :)

MNK> Какую папку этого Lisp'а указать в (setq inferior-lisp-program
MNK> "папка")? (setq inferior-lisp-program "папка") прописать в init.el?

угу, только не папку, а путь к исполняемому файлу.
если он у тебя прописан в PATH, то просто clisp, sbcl или что там.
если нет (а так скорее всего и будет), что-то такое:

(setq inferior-lisp-program "h:\\lisp\\ecl\\ecl.exe")

в общем, попробуй его в консоли по абсолютному пути запустить, как
получится -- то и в inferior-lisp-program пиши.

MNK> Какой помимо можно использовать для Win XP?

CLISP, ECL, SBCL (через жопу), GCL (не рекомендуется),
ABCL (на любителя -- работает через Java).

есть также урезанные версии комерческих реализаций:
Lispworks, Allegro CL, Corman Lisp. они идут со своим IDE,
но можно и через Emacs запустить.

MNK> Как настроить копи-пасте через С-с, С-v (С-м в русском регистре)
MNK> намекните, плз!

http://www.emacswiki.org/cgi-bin/wiki/CuaMode


Alex Ott

unread,
Aug 1, 2008, 5:34:09 AM8/1/08
to
>>>>> "AM" == Alex Mizrahi writes:
MNK> Как настроить копи-пасте через С-с, С-v (С-м в русском регистре)
MNK> намекните, плз!

AM> http://www.emacswiki.org/cgi-bin/wiki/CuaMode

это не поможет в случае с русскими буквами, надо либо ремаппить клавиши,
либо пользоваться встроенной емаксовой переключалкой

для ремаппинга был хак, посмотрите вот тут -
http://web.archive.org/web/20070220070449/xtalk.msk.su/~ott/ru/emacs/xemacs-russification.html
и прочие ссылки с
http://web.archive.org/web/20070220070449/xtalk.msk.su/~ott/ru/emacs/

--
With best wishes, Alex Ott, MBA
http://alexott.blogspot.com/ http://xtalk.msk.su/~ott/
http://alexott-ru.blogspot.com/

Michael N. Kuleshov

unread,
Aug 4, 2008, 11:02:54 AM8/4/08
to

Привет, Alex!

Alex Mizrahi пишет:
...


> в общем, попробуй его в консоли по абсолютному пути запустить, как
> получится -- то и в inferior-lisp-program пиши.
>

В консоли

*Messages* при старте:
=========================================================


("D:\\Program Files\\emacs-22.2\\bin\\emacs.exe")

Loading encoded-kb...done
Loading cl-macs...done
Loading cl-seq...done
Loading easy-mmode...done


An error has occurred while loading `c:/Documents and
Settings/1A/Application Data/.emacs.d/init.el':

error: Not connected.
=========================================================

"D:\\Program Files\\clisp-2.46\\clisp.exe" в консоли запускает CLISP.
Пробовал также (setq inferior-lisp-program "D:\\clisp\\clisp.exe")

.emacs.d/init.el':
=========================================================
(setq inferior-lisp-program "D:\\Program Files\\clisp-2.46\\clisp.exe")

(add-to-list 'load-path "D:/Program Files/emacs-22.2/slime")
(add-to-list 'load-path "D:/Program Files/emacs-22.2/slime/contrib")
(add-to-list 'load-path "D:/Program Files/emacs-22.2/slime/doc")
(require 'slime)
(slime-setup)

(slime-repl)

(print inferior-lisp-program)
=========================================================

=======Сообщение отладчика (запускал Emacs с параметром
--debug-init===========

Debugger entered--Lisp error: (error "Not connected.")
signal(error ("Not connected."))
error("Not connected.")
slime-connection()
slime-connection-output-buffer()
slime-output-buffer()
slime-switch-to-output-buffer()
slime-repl()
eval-buffer(#<buffer *load*> nil "c:/Documents and
Settings/1A/Application Data/.emacs.d/init.el" nil t) ; Reading at
buffer position 1850
load-with-code-conversion("c:/Documents and Settings/1A/Application
Data/.emacs.d/init.el" "c:/Documents and Settings/1A/Application
Data/.emacs.d/init.el" t t)
load("c:/Documents and Settings/1A/Application Data/.emacs.d/init" t t)

#[nil "(далее символы, которые не переносятся сюда через буфер ,
вроде "^Q^H \311 fv")
command-line()
normal-top-level()
===================конец цитаты================================

Из http://common-lisp.net/project/slime/doc/html/Platforms.html#Platforms
> SLIME supports a wide range of operating systems and Lisp implementations. SLIME runs on Unix systems, Mac OSX, and Microsoft Windows. GNU Emacs versions 20 and 21 and XEmacs version 21 are supported.

У меня GNU Emacs 22.2.1 (i386-mingw-nt5.1.2600) of 2008-03-26 on RELEASE
Может, несовместимость?

load-with-code-conversion(...) из D:\Program
Files\emacs-22.2\lisp\international\mule.el

Читал
http://www.pchristensen.com/blog/articles/installing-clisp-emacs-and-slime-on-windows-xp/,
никаких идей...

Установил еще (custom-set-variables
'(current-language-environment "Russian"))

Михаил

Michael N. Kuleshov

unread,
Aug 5, 2008, 6:32:39 AM8/5/08
to

Michael N. Kuleshov пишет:

>
> Привет, Alex!
>
> Alex Mizrahi пишет:
> ...
Получилось! Все было "где-то рядом".
Теперь "ищу" REPL.

Михаил

Michael N. Kuleshov

unread,
Aug 5, 2008, 11:32:50 AM8/5/08
to
Michael N. Kuleshov пишет:

>> ...
> Получилось! Все было "где-то рядом".
> Теперь "ищу" REPL.

Во-первых, ничего тогда не получилось, т.к.
SLIME должен запускаться по M-x slime,
а я получал сообщение об ошибке
apply: Spawning child process: invalid argument
Погуглил по этом сообщению.
В одном месте
(http://common-lisp.net/pipermail/slime-devel/2008-May/007331.html)
нашел ссылку
GNU Emacs 23.0.60.1 (i386-mingw-nt5.1.2600)
of 2008-05-12 on LENNART-69DE564 (patched)

Emacsw32 patched from available:
http://ourcomments.org/Emacs/DL/EmacsW32/EmacsCVS/ptch/Emacs-23-CvsP080512-EmacsW32-1.58.exe

Скачал, установил - то же самое.

Еще
http://groups.google.com/group/comp.lang.lisp/browse_thread/thread/bd134ae7a422404f
Try Progra~1 instaed of "Program Files"
"Tried" - получилось!

Hаконец увидел REPL в Emacs! :)

Alex был прав -


> в любую, только желательно чтобы в названии не было
> пробелов и русских букв

В консоли-то "D:/Program Files/clisp-2.46/clisp.exe" запускался, правда,
только в кавычках.
Странно, я, кажется, пробовал и (setq inferior-lisp-program
"D:/clisp/clisp.exe") - так slime запускается, впрочем, не помню точно.

Hиже на
http://groups.google.com/group/comp.lang.lisp/browse_thread/thread/bd134ae7a422404f

комментарий

> The emacs reader is seeing eveything after Program as the next command
> line argument.
> So it can't find file "C:\Program".
> On the Bash command line I could write C:/Program\ Files/... but this
> doesn't seem to work in Emacs.
> Thus I used the DOS 8.3 long name conversion instead. This is really a
> anacronism since no-one uses DOS anymore but it still works.
> Basically if the name is larger than 8 charactes use the first six
> charactes and add ~ and then numbers 1 - 9 to distiguish entries.
> I assumed you only had one directory entry starting with Program..
>
> --------------
> John Thingstad

...

> Note the:
> (let ((cmdlist (split-string cmd)))
> (set-buffer (apply (function make-comint)
> "inferior-lisp" (car cmdlist) nil (cdr cmdlist)))
>
> split-string here works on "[ \f\t\n\r\v]+"
>
> So the problem is not Emacs Windows file handeling.
> It is that (defcustom inferior-lisp-program has :type 'string rather than
> 'file and that string-split is used to seperate the arguments.
>
> --------------
> John Thingstad

Пойду дальше. Вы уж не оставляйте меня без помощи, хотя бы мысленной... :)


Михаил


P.S.
*Messages* после M-x slime RET:

> Polling "c:/DOCUME~1/1A/LOCALS~1/Temp/slime.2096".. (Abort with `M-x slime-abort-connection'.) [4 times]
> Connecting to Swank on port 1751.. [2 times]
> Loading cl-indent...done
> Connected. Let the hacking commence!

МК

Michael N. Kuleshov

unread,
Aug 7, 2008, 7:02:23 AM8/7/08
to

Привет, Alex!

Спасибо за советы.
Как оказалось, в GNU Emacs 22.2.1 (i386-mingw-nt5.1.2600) уже есть
CUA-опции. Внимательнее надо быть мне.
И он понимает команды С-ч, С-я и т.п. с русскими буквами.

Михаил


Alex Ott пишет:


>>>>>> "AM" == Alex Mizrahi writes:

...

Michael N. Kuleshov

unread,
Aug 25, 2008, 5:47:34 AM8/25/08
to

Привет, Alex!

Alex Mizrahi пишет:


> > ??>> а вот был бы у тебя линукс, всё работало бы из коробки :)
> > MNK> Да уж, у меня помимо много претензий к выне.
> > MNK> 1с не идет, жаль, а то б, а я б... :)
> >
> > дак никто не мешает использовать одновременно -- установи vmware
server,
> > скачай готовую вирт. машину с линуксом и пользуй, я так работаю, к
примеру.
> > только на компе желательно памяти хотя бы 1 GB, на 512 уже будет не
совсем
> > комфортно.

....
каким образом? Где взять, что (VMware Workstations или Server (бесплатный!?)

(Антиофтопик: для установки emacs, slime, sbcl в GNU/Linux и работы в
этой среде)
Основная ОС Win XP, на том же винчестере установлен дистрибутив ALT
Linux Desktop 4.0

Пробовал сегодня установить emacs, отметил все пакеты, названия которых
начинаются на 'emacs' - получил такую кашу, что emacs запускается с ошибкой.
Оставить только основные, добавляя по меренеобходимости?


Михаил

Alex Mizrahi

unread,
Aug 25, 2008, 12:54:59 PM8/25/08
to
MNK> каким образом? Где взять, что (VMware Workstations или Server
MNK> (бесплатный!?)

я пользуюсь vmware server -- бесплатный, и есть возможность чтобы
виртуальная машина была запущена "в фоне", мне так удобнее.
скачать готовую машину можно здесь: http://www.vmware.com/appliances/
можно, конечно, и самому установить из обычного дистрибутива.

пользоваться можно либо непосредствено наблюдая рабочий стол линукса
в консоли vmware, либо установить X window server в Windows и им
пользоваться
-- тогда можно приложения запускаемые на линуксе выводить в отдельных
окнах,
так что их "инородное" происхождение мало чем заметно. мне больше нравится
второй вариант -- работает быстро, удобно, не нужно переключаться, можно
пользоваться
буфером обмена венды. с другой стороны, графика в консоли Vmware IMHO
чуток тормозит, даже если установить драйверы vmware tools..

MNK> (Антиофтопик: для установки emacs, slime, sbcl в GNU/Linux и работы в
MNK> этой среде)

в дистрибутивах debian и ubuntu можно всё поставить через менеджер пакетов:

apt-get install emacs slime sbcl

потом настроить emacs (require 'slime, slime-setup, inferior-lisp) -- и
должно
работать..

MNK> Пробовал сегодня установить emacs, отметил все пакеты, названия
MNK> которых начинаются на 'emacs' - получил такую кашу, что emacs
MNK> запускается с ошибкой.
MNK> Оставить только основные, добавляя по меренеобходимости?

видимо да, в debian, в принципе, хватает установить один пакет "emacs"
-- там всё необходимое.


0 new messages