Как я могу перезагрузить интерактивную оболочку и запустить некоторые команды при запуске emacs?

Я понимаю, что мне нужно добавить что-то вроде:

оболочка

: в мой файл .emacs. Но тогда как я могу заставить его выполнять такие команды оболочки, как:

компакт-диск / мой каталог

: и другие действия оболочки


person yazz.com    schedule 11.04.2010    source источник


Ответы (3)


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

(defun shell-and-stuff ()
  "run a shell, then do some extra stuff"
  (interactive)
  (let ((shell-buf (get-buffer-create "*shell*")))
    (shell shell-buf)
    (comint-send-string
     (get-buffer-process shell-buf)
     "cd some-directory
ls
touch frog
")))
(shell-and-stuff)
person Trey Jackson    schedule 11.04.2010

Часть cd проста, просто let привяжите переменную default-directory. См. этот вопрос для некоторых возможных решений.

person Ivan Andrus    schedule 11.04.2010

Идея Трея Джексона выглядит неплохо. Также обратите внимание, что в руководстве (info "(emacs) Interactive Shell") говорится

Emacs посылает новой оболочке содержимое файла ~/.emacs_SHELLNAME в качестве входных данных, если он существует, где SHELLNAME — это имя файла, из которого была загружена оболочка. Например, если вы используете bash, файл, отправленный на него, будет ~/.emacs_bash. Если этот файл не найден, Emacs пытается вернуться к ~/.emacs.d/init_SHELLNAME.sh.

Таким образом, вы можете поместить свои команды в этот файл.

person offby1    schedule 11.04.2010