Оболочка emacs: введите один раз, запускайте везде - PullRequest
4 голосов
/ 24 февраля 2012

В emacs я хочу открыть несколько оболочек, набрать команду один раз и запустить ее в каждой оболочке - подобно тому, как это делает multixterm (http://freecode.com/projects/multixterm).

1 Ответ

7 голосов
/ 24 февраля 2012

При минимальном тестировании это будет делать:

(defun send-to-all-shells ()
  (interactive)
  (let ((command (read-from-minibuffer "Command: ")))
    (mapcar #'(lambda (x) (comint-send-string x (concat "\n" command "\n")))
            (remove-if-not
             #'(lambda (x) 
                 (string= "/bin/bash" 
                          (car (process-command x))))
             (process-list)))))

Для запуска просто M-x send-to-all-shells, введите нужную команду, и она будет отправлена ​​всем открытым оболочкам.Это предполагает, что ваша оболочка находится в /bin/bash.Если нет, измените этот бит соответствующим образом.

Если вы делаете это много, вы захотите связать это со своим любимым сочетанием клавиш.Можно было бы позаимствовать и изменить код в comint-send-input так, чтобы вы могли просто ввести нужную команду в командной строке одной оболочки, нажать клавишу и отправить эту команду всем оболочкам одновременно.У меня мало времени, поэтому я оставлю это в качестве упражнения для читателя.

...