Я часто пользуюсь командой shell (по умолчанию она связана с M-!), Но часто я делаю что-то с буфером, который я сейчас редактирую. Вместо того, чтобы вводить имя буфера (и завершение имени файла в команде shell недоступно, увы!), Было бы хорошо иметь горячую клавишу, скажем, f3, чтобы вставить это имя для меня всякий раз, когда я нажимаю клавишу. *
Проблема в том, что я не хочу связывать ключ глобально (я использую f3 для других вещей в другом контексте), только в минибуфере, когда команда оболочки запрашивает. Легко написать функцию lisp, чтобы вставить текущее имя буфера, но какой режим клавиатуры мне следует изменить, чтобы привязать ключ к этой функции?
В качестве альтернативы, есть ли какой-нибудь код / пакет lisp, который обеспечивает завершение имени файла в команде shell, подобно тому, как это делает bash? Я знаю, что обычная оболочка M-x выполняет завершение, но от удобства ввода команды в минибуфере трудно отказаться;)
Edit:
вот что я хотел, взято из ответа huaiyuan с некоторыми исправлениями, вдохновленными / украденными у http://osdir.com/ml/emacs.sources/2002-04/msg00022.html
(define-key minibuffer-local-map
[f3] (lambda () (interactive)
(insert (buffer-name (current-buffer-not-mini)))))
(defun current-buffer-not-mini ()
"Return current-buffer if current buffer is not the *mini-buffer*
else return buffer before minibuf is activated."
(if (not (window-minibuffer-p)) (current-buffer)
(if (eq (get-lru-window) (next-window))
(window-buffer (previous-window)) (window-buffer (next-window)))))