Emacs / Slime Key Binding / Отправка команды на сервер Swank

Я знаком со схемой, но новичок в emacs (переключение с VIM) и elisp.

Я умею делать следующее:

  • make a simple key binding
    • C-c iwb = indent whole buffer
    • F2 = включает / выключает складывание
  • использовать слизь из emacs
  • некоторые основные клавиши, такие как C-x 2, клавиши paredit, некоторые основные клавиши перемещения

Мне нужна помощь в более сложном:

Я хочу, чтобы F3 было равно:

  • переведите emacs в режим C-x 2
  • в нижнем окне переключитесь на буфер "slime-repl"
  • в буфере "slime-repl" отправьте команду "(test / run)" ‹- обратите внимание, это предназначено для отправки на сервер swank, а НЕ на elisp

Я понимаю, что просить людей написать для меня сценарий - это ужасная форма; однако, если бы кто-то мог это сделать, я бы довольно быстро научился на этом. [И это позволило бы мне создавать более сложные типы сценариев, изучая ваш пример.]

Спасибо!


person Community    schedule 20.04.2012    source источник
comment
Следует отметить, что C-x 2 не является режимом; он просто вызывает функцию split-window-below. По общему признанию, это различие можно считать несколько произвольным - функции режима имеют те же возможности, что и любые другие функции, а глобальные второстепенные режимы, такие как menu-bar-mode, влияют на кадры, а не на буферы, - но режимы в основном обеспечивают поведение отдельных буферы, и по соглашению они всегда имеют имя функции, заканчивающееся на -mode. Поскольку режимы являются такой важной частью Emacs, вы избежите небольшой путаницы, если не будете ссылаться на другие функции, используя эту терминологию.   -  person phils    schedule 20.04.2012
comment
Да, и вам обязательно стоит поработать с прекрасным встроенным руководством: C-h t. После этого вы можете найти здесь полезный поиск в вопросах и ответах, содержащих этот термин: stackoverflow.com/search?q= [ emacs] + руководство   -  person phils    schedule 20.04.2012
comment
@phils: Возможно, это немного высокомерно с моей стороны. Знаете ли вы хорошее руководство по написанию сценариев для emacs, а не руководство по использованию для emacs? У меня есть поведение vim_script за ~ 10 лет, которое я хотел бы перенести на emacs, но пока в значительной степени не могу понять даже самые основы. Я думаю (но не уверен), что мне действительно нужно, так это высокоуровневый обзор модели выполнения emacs.   -  person    schedule 20.04.2012
comment
Я не уверен, что понимаю, что вы имеете в виду, но в Emacs также встроены исчерпывающие руководства, включая Emacs Lisp Intro и полный справочник по Elisp, а также руководство по использованию редактора и функций. Вы можете ввести C-h i, чтобы перейти к программе чтения информации; внимательно обратите внимание на привязки клавиш, перечисленные в верхней части страницы с основным содержанием, и помните, что d всегда возвращает вас туда.   -  person phils    schedule 20.04.2012
comment
Вам, вероятно, будет полезно emacswiki.org/emacs/LearningEmacs.   -  person phils    schedule 20.04.2012


Ответы (2)


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

(defun slime-run-test ()
  (interactive)
  (slime-interactive-eval "(test/run)")
  (slime-pop-to-buffer (slime-output-buffer) t))

(global-set-key (kbd "<f3>") 'slime-run-test)
person huaiyuan    schedule 20.04.2012
comment
Вот и мы; Я знал, что будет способ получше :) - person phils; 20.04.2012

Я не использую слизь, но, если предположить, что он использует режим comint, я думаю, что следующее может помочь:

(defun my-slime-test-run ()
  (interactive)
  (delete-other-windows)
  (split-window-below)
  (with-selected-window (next-window)
    (switch-to-buffer "slime-repl")
    (goto-char (point-max))
    (insert "(test-run)")
    (comint-send-input)))

(global-set-key (kbd "<f3>") 'my-slime-test-run)

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

Используйте C-h f name-of-the-function RET, чтобы получить документацию по любому из вызовов функции / макроса в этой функции.

Для привязки клавиш я использовал Ch k F3, чтобы проверить, как Emacs ссылается на этот ключ, а затем использовал эту строку в качестве аргумента для kbd ( и обратите внимание, как вы можете использовать эту последовательность, чтобы найти имя функции, связанной с любой заданной ключевой последовательностью, которую вы затем можете использовать в коде, если хотите).

Многие вещи гораздо менее очевидны, если вы их еще не знаете, но этого и следовало ожидать с такой большой базой кода (и датируемой до этого).

Замечательно то, что если вы не знаете, что ищете, вы всегда можете искать имена функций, соответствующие шаблонам, с помощью Cu Ch a (и аналогично для переменных, значений, библиотек и документации; подробнее об этой возможности см. M-: (info "(emacs) Apropos") RET). Плюс информационные руководства (вместе с указателями - нажмите I или i в любом конкретном руководстве или используйте команду info-apropos для одновременного поиска всех информационных руководств).

Поистине, одна из лучших вещей, которые вы можете сделать, - это научиться использовать самодокументирующуюся природу Emacs для поиска ответов на то, чего вы еще не знаете.

person phils    schedule 20.04.2012
comment
Это действительно полезно; поскольку это показывает интуицию, лежащую в основе дизайна. Спасибо! - person ; 21.04.2012