После ссылки на 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 и заполнитель для другого имени файла в следующей строке.