Définition de la fenêtre pointée par «autre fenêtre»

10

Dans emacs, plus souvent que je n'aime, je me retrouve avec 4 fenêtres ou plus.

Je vais utiliser cet exemple:

+--------|-----------+
|        |           |
|   1    |   2       |
|        |           |
+--------+-----------+
|    3   |     4     |
|        +-----------+
|        |     5     |
+--------+-----------+

Beaucoup de fonctions peuvent effectuer des actions other-window(généralement la même fenêtre pointée par C-x o). Sont particulièrement utiles scroll-other-window. Cependant, lorsque 4 fenêtres ou plus sont ouvertes, il other windowest peu probable que ce soit celle que je souhaite.

Existe-t-il un moyen simple de gérer la configuration other-windowsans modifier la disposition des fenêtres / tampons? Bien sûr, c'est faisable en utilisant un tas de C-x 4 bet C-bmais je ne veux pas changer la mise en page. Par exemple:

  • en cas d'édition dans la fenêtre 4 de l'image ci-dessus, existe-t-il un moyen facile de régler C-M-vpour faire défiler la fenêtre 1 ?
  • Ou tout simplement, supposons que le focus se trouve sur la fenêtre 3 , comment définir other-windowpour pointer vers la fenêtre 2 ?
Lompik
la source

Réponses:

7

Si j'ai bien lu votre question, vous êtes principalement intéressé à travailler rapidement sur les tampons affichés dans d'autres fenêtres (tout en conservant la disposition actuelle des fenêtres).

Changer la fenêtre qui other-windowpointe vers est un moyen d'y parvenir, mais je voudrais suggérer un flux de travail alternatif:

Contrairement à other-window, ace-windowvous permet de passer rapidement à une fenêtre spécifique : lorsque vous appelez ace-window, il affiche un numéro unique dans chaque fenêtre. Pour accéder à une fenêtre spécifique, il vous suffit de taper le numéro correspondant. Si vous n'avez que deux fenêtres, il place le point dans l'autre fenêtre sans vous demander de taper un nombre. Ce screencast illustre le passage à une autre fenêtre, son défilement et le retour à la fenêtre d'origine:

Démonstration d'as-window

Si vous vous connectez ace-windowà C-x o, vous n'avez pas à mémoriser une liaison de clé supplémentaire, et vous aurez l'impression d'utiliser une version suralimentée de other-window.

De plus, si vous touchez et / ou préférez ne pas trop éloigner vos doigts de la ligne d'accueil, vous pouvez demander ace-windowde "numéroter" les fenêtres en utilisant des lettres au lieu de chiffres (voir ci-dessous).

ace-windowest disponible dans MELPA . Après l'avoir installé via M-x package-install RET ace-window RET, vous pouvez mettre ce qui suit dans votre fichier init pour le configurer comme décrit ci-dessus:

(global-set-key (kbd "C-x o") 'ace-window)
(setq aw-keys '(?a ?b ?c ?d ?e ?f ?g ?h ?i))
itsjeyd
la source
Merci pour la démonstration, j'ai vu ce package sur d'autres sites et je me demandais comment cela fonctionne.Je peux changer de fenêtre facilement car je dois M-1 M-2 ..sélectionner la fenêtre numéro 1, 2 en utilisant le window-numberpackage
Lompik
1

D'un examen rapide de la source, other-windowil semble qu'il dépend en fait de la fenêtre renvoyée par next-window, qui est définie en c. Malheureusement scroll-other-windowest également défini en c, et appelle vraisemblablement la prochaine fenêtre à partir de là. Je ne pense pas qu'il soit facile de passer outre.

Cependant, switch-to-buffer-other-windowsemble utiliser pop-to-buffer, vous pouvez donc avoir de la chance là-bas.

dgtized
la source
1

Il n'y a pas de moyen facile de manipuler la liste des fenêtres, donc le résultat renvoyé par other-windowest plus ou moins fixe. Ce n'est pas une mauvaise chose en soi, car cela permet une cohérence lors de la navigation dans les fenêtres. En ce qui concerne les deux scénarios que vous avez décrits, avec certains elisp ou macros, vous pouvez adapter votre flux de travail.

en cas d'édition dans la fenêtre 4 de l'image ci-dessus, existe-t-il un moyen simple de configurer CMv pour faire défiler la fenêtre 1?

Vous pouvez utiliser un simple extrait comme celui ci-dessous pour utiliser other-windowle nombre approprié de fois, faire défiler vers le bas et revenir à la fenêtre d'origine.

 (defun my-scroll-down-other-window (&optional arg)
 "Like `scroll-other-window' but takes a prefix argument 
 that indicates which window to scroll."
  (interactive "p")
  (save-selected-window
    (other-window arg)
    (scroll-down)))

Vous pouvez passer un argument préfixe pour spécifier la fenêtre à faire défiler. Comme vous pouvez le déduire, il utilise le mécanisme intégré other-windowpour ignorer le argnombre de fenêtres avant de faire défiler. Le save-selected-windowassure que le focus reviendra à la fenêtre d'origine. La documentation de other-windowpeut fournir plus d'informations sur la modification de cet extrait de code en fonction de votre comportement.

Ou tout simplement, supposons que le focus soit sur la fenêtre 3, comment définir other-windowpour pointer vers la fenêtre 2?

Utilisez à nouveau un prefix-argcomme dans C-3 C-x olors de l'appel other-window. Le nombre réel à fournir variera en fonction de l'ordre dans lequel vous les divisez et ne changera pas tant que vous ne créerez pas de nouvelles fenêtres. Alternativement, vous pouvez utiliser des packages de commodité tels que window-numberou ace-windowde MELPA pour changer rapidement les fenêtres sélectionnées.

Vamsi
la source
à droite, pas de moyen facile de manipuler la liste des fenêtres. J'ai du mal à utiliser les préfixes. On dirait qu'il ajoute une autre clé inaccessible et ralentit la chose
Lompik
C'est à cela que servent les macros / raccourcis clavier. S'il s'agit d'une partie régulière de votre flux de travail, vous pouvez facilement définir un raccourci clavier basé sur une carte de préfixe, par exemple <f7> npour faire défiler la nième fenêtre. Créez des liaisons temporaires à une touche avec des macros de clavier.
Vamsi