Как определить функцию для запуска нескольких оболочек в Emacs? - PullRequest
1 голос
/ 01 марта 2012

Как я знаю, "Cu Mx shell" может использоваться для запуска нескольких оболочек.Но как определить функцию, которая делает то же самое, что и "Cu Mx shell"?

1 Ответ

2 голосов
/ 01 марта 2012
(defun my-named-shell ()
  "Equivalent to C-u M-x shell RET"
  (interactive)
  (shell (get-buffer
          (read-buffer
           "Shell buffer: "
           (generate-new-buffer-name "*shell*")))))

Я использовал describe-function и find-function для проверки поведения shell, и в частности его объявления interactive, а затем я просто скопировал необходимый код, чтобы превратить его в аргумент для неинтерактивного вызова в функцию shell (но обернуть ее в get-buffer, чтобы обеспечить аргумент буфера).

Я фактически пропустил некоторый код, который имел дело с удаленными файлами, потому что комментарии в этом коде казались немного запутанными. Если вы не привыкли использовать C-u M-x shell в буферах для доступа к удаленным файлам через Tramp, это упущение не повлияет на вас.

Все это говорит о том, что еще более простой (и более полный) подход просто:

(defun my-named-shell ()
  "Equivalent to C-u M-x shell RET"
  (interactive)
  (let ((current-prefix-arg '(4)))
    (call-interactively 'shell)))

Для получения дополнительной информации см. https://stackoverflow.com/a/9388058/324105

В этом случае current-prefix-arg может быть любым ненулевым значением, но я думаю, что это хорошая привычка использовать значение, которое на самом деле генерирует C-u.

...