110 votes

La fonction pour afficher le chemin complet du fichier actuel dans un mini tampon

J'ai besoin d'obtenir le chemin d'accès complet du fichier que je suis en train de monter avec emacs.

  • Est-il une fonction pour ça?
  • Si non, quelles seraient les elisp fonction pour obtenir?
  • Comment puis-je copier le résultat (nom de chemin d'accès) à un presse-papiers afin que je puisse le réutiliser?

Je suis sur Mac OS X et Aqumacs.

(setq filepath (get-fullpath-current-file)) ???
(copy-to-clipboard 'filepath) ???

AJOUTÉ

(defun show-file-name ()
 "Montrer le chemin d'accès complet du fichier de nom dans le minibuffer."
(interactif)
 (message (tampon de nom de fichier))
 (kill-nouvelle (fichier-truename tampon de nom de fichier))
)
(global-set-key "\C-cz" " afficher les fichiers de nom)

En combinant les deux réponses que j'ai eu, j'ai pu obtenir ce que je veux. Merci pour les réponses. Et un peu plus de questions.

  • Qu'est-ce qu' (fichier-truename)?
  • Puis-je copier le nom de chemin d'accès Système(OS)'s presse-papiers, pas le kill ring afin que je puisse utiliser les informations avec les autres applications?

103voto

Jérôme Radix Points 4691

C'est la fonction intégrée buffer-file-name qui vous donne le chemin complet de votre fichier.

La meilleure chose à faire est d’avoir votre fenêtre emacs pour toujours montrer votre nom de système et le chemin complet du tampon en cours d’édition:

 (setq frame-title-format
      (list (format "%s %%S: %%j " (system-name))
        '(buffer-file-name "%f" (dired-directory dired-directory "%b"))))
 

Vous pouvez aussi faire quelque chose comme ça:

 (defun show-file-name ()
  "Show the full path file name in the minibuffer."
  (interactive)
  (message (buffer-file-name)))

(global-set-key [C-f1] 'show-file-name) ; Or any other key you want
 

78voto

asmeurer Points 13185

Pour reprendre la réponse de Jérôme Radix, si vous voulez juste voir rapidement le chemin du fichier du tampon actuel, vous pouvez faire M-: buffer-file-name .

45voto

Julien Palard Points 1157

Mon astuce consiste à faire en sorte que C-x C-f aime ouvrir un fichier, il pré-remplira le mini-bourrage avec le chemin du fichier actuel, C-g pour quitter. Plus rapide que M-: buffer-file-name mais beaucoup plus laide que n'importe quelle autre méthode.

16voto

Trey Jackson Points 49816

La mise en œuvre directe de ce que vous voulez, c'est:

(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))))

Cela dit, je trouve qu'il est extrêmement utile d'être en mesure d'obtenir le chemin d'accès complet de ce qui est dans le minibuffer, et c'est ce que j'utilise:

(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))))

Et puis, si je le veux dans le presse-papiers, je viens de tuer la ligne (C-a C-k). Mais on pourrait facilement copier le truename dans le presse-papiers dans la commande ci-dessus, il suffit de modifier la dernière ligne:

(insert (kill-new (concat file-true-dir file-name)))))

La nouvelle partie est l'appel à l' 'kill-new ce qui place la chaîne dans le kill ring.

1voto

Barry Kelly Points 30330

Puis-je copier le nom de chemin d'accès Système(OS)'s presse-papiers, pas le kill ring afin que je puisse utiliser les informations avec les autres applications?

Vous pouvez si vous le shell à quelque chose comme xclip (Linux), pbcopy (Mac), putclip (Cygwin).

Personnellement, j'utilise des scripts wrapper c et p du copier-coller, respectivement, la première lecture de l'entrée standard, le dernier écrit sur la sortie standard. De cette façon, cela fonctionne sur toutes mes plates-formes de développement:

(shell-command (format "echo '%s' | c" buffer-file-name))

Je trouve cela plus fiable et configurable que l'utilisation d'Emacs support du presse-papier. Par exemple, mon c commande copie l'entrée à tous les 3 blocs-notes sur Linux (primaire, secondaire, presse-papiers), afin que je puisse coller avec Ctrl-V ou clic-milieu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X