Добрый день.Вчера решил программировать в Lisp.
У меня очень простой вопрос: как создать файл C:/.emacs в windows?
PS. Пожалуйста не рекомендуйте мне бросить это занятие.
Запускаешь емакс, потом нажимая и удерживая Control нажимаешь х. Потом тоже самое c Control+f. Эта комбинация обозначается как: C-x C-f.
Вводишь имя файла и жмешь Enter.
А лучше начать с встроенного в емакс туторила. Запускать как: C-h t
На виндовсе емакс вряд ли будет читать пользовательскую конфигурацию из C:/.emacs.
Если только не экспортировать HOME=c:/
Лучше при открытии файла конфигурации набрать: ~/.emacs
Вот годная статья по настройке slime в виндовсе: http://habrahabr.ru/blogs/lisp/131418/
В папке emacs/site-lisp/
создаешь файл site-start.el, куда
пишешь строчку
(setenv "HOME" "c:/home/").
В этом случае папка home станет домашней и в ней можно заводить файл .emacs с конфигурацией.
Если будешь использовать http://habrahabr.ru/blogs/lisp/131418/,
то не советую ставить cua-mode.
можно сделать также локальную копию HypesSpec
If you already use the
hyperspec.el
utility (included with
SLIME and
ILISP distributions, but
usable on its own), the Emacs
browse-hyperdoc command will
automatically defer to the
Common Lisp
HyperSpec when given a
non-GBBopen entity. You can also download and install a local copy of the
Common Lisp HyperSpec for use without a network connection. In this case, set
the value of
common-lisp-hyperspec-root in your
.emacs
initialization file to point to your local copy of the HyperSpec. For
example:
(setf common-lisp-hyperspec-root "file:/usr/local/CLHS/")
взято отсюда http://gbbopen.org/hyperdoc/index.html
(setf common-lisp-hyperspec-root "file:/usr/local/CLHS/")
setf надо на setq заменить
Ого! Спасибо за ответы. Активное сообщество уже аргумент для продолжения изучения среды разработки. Оказывается я начинал не с той стороны. Прочитаю мануал и попробую всё настроить.
Здравствуйте ещё раз.Всё настроил по статье с хабра, только конфигурационный файл создал по инструкциям lithp, убрал cua-mode, так что все посты помогли, спасибо ещё раз.
Единственная проблема, quicklisp установился в нормально (ставлю его из Emacs сразу) но вот прописываться в конфигурации ((ql:add-to-init-file)) он отказывается. Никаких ошибок после ввода этой строки не возвращает, но и приглашения для след. команды не появляется.
В общем это не критично пока и не мешает изучать язык.
(ql:add-to-init-file) дописывает в файл ~/.sbclrc строки:
;;; The following lines added by ql:add-to-init-file:
#-quicklisp
(let ((quicklisp-init (merge-pathnames "quicklisp/setup.lisp"
(user-homedir-pathname))))
(when (probe-file quicklisp-init)
(load quicklisp-init)))
можешь это вручную сделать. Но вообще странно что он у тебя не выполнился :/
Как ты запускаешь эту фунцию?
Пробовал так:
(load "quicklisp.lisp")
пишет что всё ок
(quicklisp-quickstart:install)
пишет что установлен
(ql:add-to-init_file)
на этой операции просто зависает
Странно, нашёл у себя ~/.sbсlrc но не в той директории, там уже были прописаны эти строки (возможно когда я из REPL его ставил прописалось) Проблема в том что даже если вручную каждый раз подгружать библиотеки, скрипт:
(load "quicklisp.lisp")
(load "messagebox.lisp") - это он ниже:
(ql:quickload :cffi)
(cffi:load-foreign-library "user32.dll")
(defun main ()
(cffi:foreign-funcall "MessageBoxW"
:pointer (cffi:null-pointer)
(:string :encoding :utf-16le) "SBCL на Windows это просто!"
(:string :encoding :utf-16le) "Сообщение"
:int #x40
:boolean))
(sb-ext:save-lisp-and-die "my-program.exe" :executable t :toplevel #'main)
Возвращает:
READ failure in COMPILE-FILE:
package "QL" not found
Line: 1, Column: 11, File-Position: 11
Stream: #<SB-SYS:FD-STREAM for "file c:\\messagebox.lisp"
{2408BC69}>
[Condition of type SB-C::INPUT-ERROR-IN-COMPILE-FILE]
Да что ж такое. Создал вручную ~/.sbclrc теперь при попытке запуска messagebox.lisp получаю:Cannot save core with multiple threads running.
[Condition of type SIMPLE-ERROR]
У тебя quicklisp не установился, либо по какой-то причине не загружается.
(load "quicklisp.lisp") - так ты его не загрузишь. Сама библиотека должна лежать в ~/quicklisp.
В файле quicklisp.lisp просто функции для скачивания и установки пакета. Отсюда и ошибка package "QL" not found.
Запускай из командной строки sbcl --load messagebox.lisp, либо закомментируй последнюю строчку с sb-ext:save-lisp-and-die. Ее в slime нет смысла запускать :)
В общем, если следовать инструкциям в статье love5an по порядку, все должно работать.
А какая сборка sbcl? И ставь sbcl в какую-нибудь папку типа c:/sbcl/
Из командной строки всё запускается.Заново попробую, думаю всё получится, энивей на ноут ставить.
Сорри за тупые вопросы, после других IDE привык что всё разворачивается за тебя и думать не надо.
Сборка 1.0.53.31.Ставил именно туда.
я ставлю многопоточную исключительно отсюда http://www.siftsoft.com/inprogress/sbcl-notes.html
В общем-то только сначала будет сложно, а потом повторно все устанавливаешь без каких-либо проблем, когда знаешь.
Если остались какие-то проблемы с ненайденными .sbclrc или init.el - см. вот этот коммент к той статье на хабре:
http://habrahabr.ru/blogs/lisp/131418/#comment_4446659Дело в том, что я забыл указать одну важную вещь - для правильной работы Emacs и SLIME нужно установить переменную среды HOME в значение пути к своей домашней директории пользователя.
Добавлю свои 5 коп.:Для того чтобы не было неразберихи с домашними папками в windows, и дефолтная директория для поиска файлов совпадала с Emacs home не только при указании "~". Нужно сделать одно из 3 изменений:
- если вы выбрали установить emacs через addpm, укажите в св-вах ярлыка Рабочую папку совпадающую с Emacs home.
- (cd "C:/EmacsHome/") в .emacs или init.el
- (setq default-directory "C:/EmacsHome/" ) в .emacs или init.el
т.е. например c:/users/username/emacshome в environment variable HOME и то же самое, но в виндоус формате (c:\users\username\
emacshome) в поле "Рабочая папка" ярлыка emacs в меню пуск после установки.
Только при установке quicklisp (quicklisp-quickstart:install) не забудьте указать тот же путь в качестве аргумента :path. У меня по умолчанию всегда устанавливался в С:/users/username и файл .sbclrc.
...приходилось в ручную переносить.