J'ai besoin d'obtenir le chemin complet du fichier que j'édite avec emacs.
- Y a-t-il une fonction pour ça?
- Sinon, quelle serait la fonction elisp pour obtenir cela?
- Comment puis-je copier le résultat (nom du chemin) dans un presse-papiers afin de pouvoir le réutiliser?
J'utilise Mac OS X et Aqumacs.
(setq filepath (get-fullpath-current-file)) ???
(copy-to-clipboard 'filepath) ???
AJOUTÉE
(defun show-file-name () "Afficher le nom du fichier de chemin complet dans le mini-tampon." (interactif) (message (nom-fichier-tampon)) (kill-new (nom-de-fichier-vrai-tampon-nom-de-fichier)) ) (global-set-key "\ C-cz" 'show-file-name)
En combinant les deux réponses que j'ai obtenues, je pourrais obtenir ce que je veux. Merci pour les réponses. Et encore quelques questions.
- À quoi sert (file-vrai nom)?
- Puis-je copier le nom du chemin dans le presse-papiers du système (OS), et non dans le kill ring afin de pouvoir utiliser les informations avec les autres applications?
buffer-file-name
est une variableM-x
?funcall
pour appeler une fonction qui est stockée comme valeur d'une variablefoo
, car si vous(foo)
l'utilisiez, vous utiliseriez l'emplacement de fonction defoo
plutôt que l'emplacement de valeur.Pour emprunter à la réponse de Jérôme Radix, si vous voulez juste voir rapidement le chemin du fichier du tampon courant, vous pouvez le faire
M-: buffer-file-name
.Sinon, tapez
(buffer-file-name)
quelque part dans le tampon et exécutezC-x C-e
sur la parenthèse fermante (cela fonctionnera dans n'importe quel mode, pas seulement en mode lisp).la source
buffer-file-name
comme une fonction, mais il ne semble pasM-x
, mais apparaît enM-:
tant queemacs eval
, là , je peux exécuter la commande, grâce à votre réponse :)M-x
que des fonctions interactives, alors queM-:
n'importe quelle fonction elisp.Mon truc est de faire un
C-x C-f
like pour ouvrir un fichier, il préremplira le minibuff avec le chemin du fichier actuel,C-g
pour quitter. Plus rapide queM-: buffer-file-name
mais bien plus laid que toutes les autres méthodes.la source
La mise en œuvre directe de ce que vous voulez est:
Cela dit, je trouve incroyablement utile de pouvoir obtenir le chemin complet de ce qui se trouve dans le minibuffer, et c'est ce que j'utilise:
Et puis si je le veux dans le presse-papiers, je tue juste la ligne ( C-a C-k). Mais nous pourrions facilement copier le vrai nom dans le presse-papiers dans la commande ci-dessus, changez simplement la dernière ligne en:
La nouvelle partie est l'appel
'kill-new
auquel met la chaîne dans l'anneau de destruction.la source
Pas besoin de fonction supplémentaire, juste
la source
C-x C-f
, en exécutantM-! pwd
, puis enM-x cd
sélectionnant un autre répertoire, puis en leM-! pwd
relançant.J'ai le code suivant déjà utilisé depuis longtemps. Il copie le chemin complet du fichier vers l'anneau de destruction lorsque j'appuie sur le bouton central de la souris sur le nom du tampon dans la ligne de mode. Il copie juste le nom du tampon dans le kill-ring lorsque j'appuie sur shift-mouse-2 sur le nom du tampon dans la ligne de mode.
la source
C-x C-d
, également appelable viaM-x list-directory
, vous montrera le répertoire de votre fichier actuel, et il vous suffit d'appuyer sur la touche "Entrée" pour effacer le mini-tampon. Des détails supplémentaires sont disponibles ici .la source
C-x C-b
affiche une liste de tampons et le chemin du fichier pour chaque tampon, le cas échéant.la source
C-u C-x C-b
répertorie les tampons qui visitent actuellement les fichiers.la source
Vous pouvez le faire si vous utilisez quelque chose comme xclip (Linux), pbcopy (Mac), putclip (Cygwin).
J'utilise personnellement des scripts wrapper
c
etp
pour copier et coller respectivement, la première lecture à partir de l'entrée standard, la dernière écriture vers la sortie standard. De cette façon, cela fonctionne sur toutes mes plateformes de développement:Je trouve cela plus fiable et configurable que l'utilisation du support du presse-papiers Emacs. Par exemple, ma
c
commande copie l'entrée dans les 3 presse-papiers sous Linux (primaire, secondaire, presse-papiers), donc je peux coller avec Ctrl-V ou clic central.la source
date | xclip
et lesxclip file
deux fonctionnent comme annoncé (stockage de la date ou du contenu du fichier dans le fichier primaire) s'ils sont tapés dans le shell. Mais si je tape l'une de ces commandes après M-! dans emacs (et appuyez sur return) rien ne se passe; le curseur reste dans le mini-tampon comme s'il attendait plus d'entrée; et si j'interromps pour reprendre le contrôle, rien n'a été stocké en primaire.(shell-command (format "echo '%s' | xsel -i" buffer-file-name))
- et lorsqu'elle est transformée en commande interactive (comme suggéré dans la réponse la plus positive de @JeromeRadix ci-dessus), c'est un GROS GAGNANT! Merci!Le moyen le plus simple et serait
Empruntant à Trey Jackson, j'ai trouvé ceci:
Vous pouvez trouver plus d'informations sur le site
la source
copy-buffer-file-name-as-kill
de [0] fait exactement ce dont vous avez besoin, je pense. Il a également la possibilité de copier uniquement le nom du répertoire ou simplement le nom du fichier.[0] http://www.emacswiki.org/emacs/download/buffer-extension.el
la source