Прямая реализация того, что вы хотите:
(defun copy-full-path-to-kill-ring ()
"copy buffer's full path to kill ring"
(interactive)
(when buffer-file-name
(kill-new (file-truename buffer-file-name))))
Тем не менее я считаю невероятно полезным иметь возможность получить полный путь к тому, что находится в минибуфере, и вот что я использую:
(define-key minibuffer-local-completion-map "\C-r" 'resolve-sym-link)
(defun resolve-sym-link ()
"Try to resolve symbolic links into true paths."
(interactive)
(beginning-of-line)
(let* ((file (buffer-substring (point)
(save-excursion (end-of-line) (point))))
(file-dir (file-name-directory file))
(file-true-dir (file-truename file-dir))
(file-name (file-name-nondirectory file)))
(delete-region (point) (save-excursion (end-of-line) (point)))
(insert (concat file-true-dir file-name))))
А потом, если я хочу это в буфере обмена, я просто убиваю строку ( C-a C-k ). Но мы могли бы легко скопировать имя в буфер обмена в приведенной выше команде, просто изменив последнюю строку на:
(insert (kill-new (concat file-true-dir file-name)))))
Новая часть - это вызов 'kill-new
, который помещает строку в список уничтожений.