Как у вас есть процесс в Emacs возвращаемое значение как функция? - PullRequest
2 голосов
/ 10 июня 2011

Я пытаюсь написать инструменты emacs, которые требуют отправки данных во внешний процесс, мой пример - REPL как часть подчиненного списка.

Как вы получаете вывод процесса, который будетвозвращается, как если бы это была функция emacs?

Я хотел бы что-то вроде:

(defun get-data () 
  (process-send-string (get-process) "foo command")
  (get-data-output-from-process (get-process)))

Я пытался использовать process-send-string и accept-process-output-proc, новыходные данные всегда отправляются на нижний лисп.Я хотел бы, чтобы что-то возвращало данные в вызванную функцию, чтобы я мог манипулировать данными.Также, если возможно, я бы не хотел копировать вывод в буфер inferior-lisp.

Ответы [ 2 ]

2 голосов
/ 10 июня 2011

Как правило, вы хотите прочитать о запущенных подпроцессах EMACS. Есть несколько полезных функций для получения информации из подпроцесса .

Вот пример с call-process:

;; results go into current buffer
(call-process "pwd" nil t)
/nishome/crmartin  ; there's the results
0                  ; return value is value from exit
(call-process "false" nil t)
1                  ; false(1) always returns non-0
;; results go into a buffer named "bletch", creating it if needed.
(call-process "pwd" nil "bletch" t)
0

Чтобы попробовать это, введите код elisp в scratch и запустите с помощью Cj.

0 голосов
/ 16 июля 2011

Единственный способ заставить это работать - сохранить результаты в глобальном, а затем передать их обратно в функцию.

 (defvar ac-dj-toolkit-current-doc nil "Holds dj-toolkit docstring for current symbol")

 (defun dj-toolkit-parse (proc text)
   (setq ac-dj-toolkit-current-doc text)
   text)

 (defun dj-toolkit-doc (s)
   (let ((proc (inferior-lisp-proc)))
     (process-send-string (inferior-lisp-proc)
             (format "(clojure.repl/doc %s)\n"
                 s))
     (set-process-filter proc 'dj-toolkit-parse)
     (accept-process-output proc 1)
     (set-process-filter proc nil)
     ac-dj-toolkit-current-doc))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...