Comment obtenir le nom de fichier du tampon d'origine dans un tampon cloné indirect?

8

Je voulais regarder différentes parties d'un tampon dans deux images différentes, car j'ai deux moniteurs de formes différentes sur lesquelles je ne peux pas facilement couvrir une seule image. Une recherche sur Google m'a amené à utiliser clone-indirect-buffer, ce qui fonctionne bien.

Cependant, buffer-file-namepour le nouveau tampon est nil. Comment puis-je déterminer de manière fiable le nom de fichier du tampon d'origine (dont celui-ci est un clone)?

rneatherway
la source
2
Quelle est la différence / l'avantage de cloner le tampon et de simplement visiter le tampon dans les deux trames simultanément?
Nathanael Farley
5
Les clones répondent à des événements tels que le rétrécissement / élargissement, le pliage de code et le pliage de contour indépendamment les uns des autres. S'il s'agissait du même tampon dans deux fenêtres, ces types d'événements seraient reflétés dans chaque fenêtre. Les clones sont utiles pour, par exemple, avoir différentes vues de différentes parties du tampon en même temps.
Dan
Je ne sais pas vraiment si vous pouvez afficher le tampon en deux images simultanément. Bien sûr, vous pouvez dans deux fenêtres dans le même cadre, mais si j'essaie de passer au tampon dans un autre cadre, C-x balors le focus passe au cadre montrant déjà le tampon.
rneatherway
1
@NathanaelFarley J'utilise des tampons indirects lorsque je partage un terminal avec mes collèges inclinés vim qui peuvent utiliser le tampon indirect avec quelque chose comme le mode diabolique.
stsquad

Réponses:

12

Je garde le manuel Emacs et le manuel Elisp sur la numérotation rapide pour des questions comme celles-ci.

Du manuel Elisp sur les tampons indirects :

Fonction: tampon-base-tampon & tampon optionnel

Cette fonction renvoie le tampon de base du tampon, qui correspond par défaut au tampon actuel. Si le tampon n'est pas indirect, la valeur est nulle. Sinon, la valeur est un autre tampon, qui n'est jamais un tampon indirect.

Vous voulez probablement (buffer-file-name (buffer-base-buffer))quelque chose comme ça.

purple_arrows
la source
Ouais, c'est tout. defadviceMais j'aime toujours mon option. ;)
Dan
3

Il s'agit d'une réponse indirecte à votre question - je ne sais pas comment déterminer le nom de fichier du tampon d'origine sans effectuer les opérations suivantes. (EDIT: la réponse de @ purple_arrows remplit les détails: vous pouvez utiliser buffer-base-buffer. Veuillez accepter cette réponse comme la plus correcte.)

Le conseil suivant associera le nom de fichier du tampon d'origine à chacun de ses clones indirects:

(defadvice clone-indirect-buffer (around associate-filename activate)
  "Associate the original filename with the cloned buffer."
  (let ((filename buffer-file-name))
    ad-do-it
    (setq buffer-file-name filename)))

Maintenant, chacun des clones a le même nom de fichier que le tampon d'origine.

J'utilise beaucoup de tampons clonés indirectement et j'aime pouvoir, par exemple, enregistrer le fichier associé lorsque je travaille avec l' un des tampons, plutôt que l'original. Ce conseil était ma solution à ce flux de travail souhaité.

Dan
la source