Emacs Lisp: Как сделать интерактивный буфер с REPL? - PullRequest
8 голосов
/ 16 января 2011

Представьте себе игру dunnet.el, eliza doctor или режим IELM ...;Это оценка ответов и предложение новых вопросов в главном буфере, а затем выполнение некоторых действий в соответствии с их правилами elisp.

Я хотел бы создать что-то вроде интерактивного помощника, НО НЕ запрашивать из минибуфера, как (интерактивный) делает (не выполняет Mx) ... Мне нужен своего рода цикл REPL.Итак, вопрос в том, как получить взаимодействие в рабочем буфере (главном экране), как в любом текстовом разговоре / приключении, но для вызова функций, которые не выполняются, таким образом.

Так что мне нужен базовый скелет elisp, чтобы сделать пользовательские REPL.Цель состоит в том, чтобы сделать помощника на естественном языке, затем проанализировать ответы и выполнить некоторые действия в соответствии с правилами.

Спасибо за ваше время,

Стив,

Ответы [ 3 ]

5 голосов
/ 16 января 2011

Проверьте ielm, который является реплик elisp, включенным в emacs.

2 голосов
/ 16 января 2011

В зависимости от того, что может происходить в вашем буфере, вы можете просто задать ему основной режим с соответствующей повторной привязкой return? (Этот ответ смутно вдохновлен C-j в Lisp-Interaction-Mode)

0 голосов
/ 24 января 2011

Вы должны связать все клавиши, которые используют для перемещения в буфере, например C-p C-n, стрелки вверх / вниз / страницу, просто связать их с (lambda ()). измените функцию для C-b и C-f (Стрелки влево и вправо), если позиция курсора находится в начале или конце строки. Привязать клавишу Return к функции, которая читает текущую строку из конца в необязательное приглашение (вы можете использовать Regex, чтобы удалить приглашение), делать с этой строкой все, что угодно, а затем перейти к следующей строке в буфере и распечатать ваш результат.

...