elisp: вызов команды для текущего файла - PullRequest
10 голосов
/ 15 января 2011

Я хочу установить ключ в emacs, чтобы выполнить команду оболочки для файла в буфере и вернуть буфер без запроса.Команда оболочки: p4 edit 'currentfilename.ext'

(global-set-key [\C-E] (funcall 'revert-buffer 1 1 1)) 
;; my attempt above to call revert-buffer with a non-nil 
;; argument (ignoring the shell command for now) -- get an init error:
;; Error in init file: error: "Buffer does not seem to be associated with any file"

Абсолютно новый для elisp.В руководстве emacs приведено определение буфера возврата:

Command: revert-buffer &optional ignore-auto noconfirm preserve-modes

Спасибо!

Ответы [ 2 ]

8 голосов
/ 15 января 2011

Фактическая ошибка, которую вы видите, заключается в том, что вы неправильно указали глобальный набор-ключ, а именно вызов функции.То, что вы хотите:

(global-set-key (kbd "C-S-e") '(lambda () (revert-buffer t t t)))

Вы действительно оценивали funcall, когда ваш .emacs загружался, что и стало причиной ошибки.

Затем, чтобы получить все,Вы можете создать команду, например:

(defun call-something-on-current-buffers-file ()
  "run a command on the current file and revert the buffer"
  (interactive)
  (shell-command 
   (format "/home/tjackson/bin/dummy.sh %s" 
       (shell-quote-argument (buffer-file-name))))
  (revert-buffer t t t))
(global-set-key (kbd "C-S-e") 'call-something-on-current-buffers-file)

Очевидно, настройте команду и добавьте проверку ошибок, если хотите.

0 голосов
/ 15 января 2011

Возможно использование второстепенного режима «auto-revert-mode» является опцией.Просто включите его в текущем буфере:

M-x "auto-revert-mode"

и всегда убедитесь, что буфер сохранен, перед выполнением внешней команды.

...