(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
.