[Я прошу прощения за плохой титул, но не смог придумать лучший.]
Бен Чен спросил в Google +:
Как ввести относительный путь (имя-файла-буфера) в минибуфере после M-!
в #emacs?
Я подумал, что если buffer-file-name
сохранен в регистре, он должен быть доступен, вызвав insert-register
( C-x r i ), пока в приглашении shell-command
.
(defun save-buffer-file-name-in-register ()
(set-register ?F (buffer-file-name))
(set-register ?D (file-name-directory buffer-file-name)))
(defadvice shell-command (before save-buffer-file-name)
"Save buffer-file-name to register F before running shell-command"
(save-buffer-file-name-in-register))
(ad-activate 'shell-command)
Когда я вызываю shell-command
( M -! ), за которым следует insert-register
( C-x r i ), я получаю сообщение об ошибке: Register does not contain any text
.
Но когда я запускаю list-registers
, я вижу, что регистры F
и D
установлены с соответствующими значениями. Если я снова запускаю shell-command
, я могу получить доступ к значениям из ранее сохраненных регистров.
Возможно ли, что в первый раз регистры устанавливаются слишком поздно? Как я могу исправить код, чтобы сделать то, что я хочу?
Редактировать : изменено around
на before
(спасибо @phils)