Как реализовать функцию emacs / elisp 'shell-command-on-region-to-string'? - PullRequest
4 голосов
/ 26 августа 2010

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

Я узнал, что команда-команда-оболочка может обрабатывать регион.

Я узнал, что команда-команда-строка-100 *сохранить результат программы в строку.

Тогда, как я могу реализовать 'команду-команду-на-области-к-строке'?

(defun shell-command-on-region-to-string (process &optional b e) 
  (interactive)
  (let ((b (if mark-active (min (point) (mark)) (point-min)))
        (e (if mark-active (max (point) (mark)) (point-max))))

  ?? (shell-command-on-region b e process (current-buffer) t)
  ?? how to store the return of a process to a string
  ?? how to insert the result at the end of current buffer
))

1 Ответ

6 голосов
/ 26 августа 2010
(defun shell-command-on-region-to-string (start end command)
  (with-output-to-string
    (shell-command-on-region start end command standard-output)))

(defun shell-command-on-region-with-output-to-end-of-buffer (start end command)
  (interactive
   (let ((command (read-shell-command "Shell command on region: ")))
     (if (use-region-p)
         (list (region-beginning) (region-end) command)
       (list (point-min) (point-max) command))))
  (save-excursion
    (goto-char (point-max))
    (insert (shell-command-on-region-to-string start end command))))
...