2012-02-09 2 views
3

Есть ли простой способ автоматически сохранить каждую команду, которую я выполняю в буфере оболочки? Я запускаю такие вещи, как python и lua из оболочки оболочки Emacs, и хочу сохранить их в дополнение к обычным командам bash.Автоматическое сохранение истории оболочки в Emacs

Поведение по умолчанию сохраняет историю в .history или .bash_history, но не сохраняет входные данные для подпроцессов. В качестве примера, если я делаю следующее

 
ls /export/hda3/tmp 
python 
a=2+3 
import sys 
sys.exit() 
ls /export/hda3/tmp 

сохранялось

 
#1328903075 
ls /export/hda3/tmp 
#1328903081 
python 
#1328903087 
ls /export/hda3/tmp 

ответ

2

Команды автоматически сохраняются, только вы должны убедиться, что на самом деле выйти из оболочки следующее. Если вы просто убиваете буфер оболочки, то никакие команды не будут сохранены.

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

(defun my-check-if-no-shell-buffer-exists() 
    (if (not (get-buffer "*shell*")) 
     t 
    (message "you have a shell buffer, make sure you exit it manually") 
    nil)) 

(add-hook 'kill-emacs-query-functions 'my-check-if-no-shell-buffer-exists) 

Было бы даже лучше, если буфер оболочки будет делать это автоматически при убийстве буфера. Я думаю, что это ошибка в emacs, что она не может этого сделать.

Редактировать: Я заметил, что у меня есть параметр, который предотвращает запуск предупреждений о запуске, когда emacs выходит, и именно поэтому мне нужна была вышеперечисленная функция. Если вы получаете предупреждение о запущенной оболочке уже при выходе, то вам это не нужно, вам нужно только выйти из оболочки вручную, чтобы сохранить историю.

+0

Вы имеете в виду, что они автоматически сохраняются Emacs? (если да, где?) Сам Bash не сохраняет команды в моем случае, потому что я запускаю другой процесс сверху (т. е. интерпретатор Python) –

+0

Я проверил, и он написан в ~/.history и все там (bash, команды python и т. д.). Каждый, который вы вводите в оболочку, есть. – Tom

+0

Исправление: в предыдущем комментарии я сказал bash, хотя я нахожусь в окнах и не использую bash, поэтому вместо этого мне нужно было бы ввести командную строку. Это может быть или не быть одинаковым, если базовая оболочка - bash, хотя сама emacs выполняет сохранение типизированных команд оболочки, поэтому она не должна сильно отличаться. – Tom

Смежные вопросы