После ссылки на git -repo без длинного диалога
В каталоге у меня есть символические ссылки в каталог git -administered (все под Linux). Каждый раз, когда я хочу e -dit такую ссылку, я получаю диалоговый вопрос:
Symbolic link to Git-controlled source file; follow link? (yes or no)
И я должен ввести y e s ⏎, чтобы перейти к файлу. Есть несколько более простой способ?
В идеале, что-то вроде объявления о том, что директория не нуждается в диалоговом окне.
Ответы
Ответ 1
Установите vc-follow-symlinks
. Вероятно, вы хотите, чтобы это было nil
(открытая ссылка), но обязательно прочитайте документы, потому что t
(открытая цель) также разумно.
(setq vc-follow-symlinks nil)
Вы можете сделать это локальной переменной dir, если вы не хотите, чтобы она была установлена глобально.
Ответ 2
Интересный вопрос. Я храню все мои файлы в хранилище и
есть куча символических ссылок, разбросанных по всей файловой системе, так что это
известная проблема для меня.
Во-первых, полурешение:
(defalias 'yes-or-no-p 'y-or-n-p)
Теперь вместо ввода полного yes
+ Enter вы можете просто
введите одну букву y или n во всех ситуациях
где yes-or-no
задается в Emacs
.
Теперь реальное решение:
(defun vc-mode-hook ()
(message buffer-file-name)
(when
(and
(file-exists-p (buffer-file-name))
(stringp buffer-file-name)
(or (string-equal "/home/ja/.fluxbox/keys" buffer-file-name)
(string-equal "<PATH_TO_ANOTHER_FILE>" buffer-file-name))
(setq-local vc-follow-symlinks t)
)))
(add-hook 'find-file-hook 'vc-mode-hook)
Здесь мы создаем новый крючок, который вызывается каждый раз, когда find-file
является
называется, например, с C - x
C - f или e в Dired
. Он сначала проверяет
если посещаемый файл действительно существует в файловой системе, используя
file-exists-p
, потому что нет смысла запускать его в файлах, которые
еще не созданы. Затем он проверяет, известно ли имя файла, используя
stringp
- он вернет t
, когда будет открыт обычный файл, но nil
в буфере Dired
, например. И, наконец, он проверяет, является ли файл
имя равно одной из строк, предоставляемой с помощью string-equal
. Если оно
является, оно локально устанавливает vc-follow-symlinks
в t
. Вы можете добавить столько
string-equal
, как вы пожелаете. В приведенном выше примере я добавил
/home/ja/.fluxbox/keys
и заполнитель для другого имени файла
в следующей строке.