Lorsque vous travaillez sur un cadre Emacs maximisé, il peut être difficile de voir le contenu de la zone du mini-tampon / écho en bas de l'écran, mais aussi de perdre le focus sur le texte en cours de modification lors de la frappe d'une commande - ce qui est assez problème en termes de convivialité.
Existe-t-il un moyen de déplacer la zone du mini-tampon / écho au centre du tampon emacs actuel, sur le texte en cours de modification lorsque le mini-tampon est actif, ou, mieux, de capturer le contenu du mini-tampon et de l'afficher également au centre du tampon en cours en tapant la commande?
minibuffer
Sébastien Le Callonnec
la source
la source
Réponses:
Minibuffer Popup au Centre
Voici une façon de faire exactement ce que vous avez demandé: afficher le mini-tampon au centre de l'écran .
C'est relativement facile à réaliser et c'est ce que vous obtiendrez avec le
oneonone.el
package (comme le souligne @Drew). Le problème avec cette approche, c'est que le mini-tampon est également utilisé pour les messages, donc le garder caché n'est pas quelque chose de très pratique. Ne pas s'inquiéter! J'ai trouvé une autre solution.la mise en oeuvre
Pour l'implémenter, nous devons créer le cadre du mini-tampon au démarrage d'emacs.
Ensuite, nous corrigeons
read-from-minibuffer
pour utiliser ce deuxième mini-tampon, au lieu du mini-tampon du cadre d'origine.Cela pourrait ne pas fonctionner avec absolument tout, mais il a travaillé sur tout ce que j'ai essayé jusqu'à présent ---
find-file
,ido-switch-buffer
,eval-expression
. Si vous ne trouvez aucune exception, vous pouvez patcher ces fonctions sur une base au cas par cas en appelantuse-popup-minibuffer
sur eux.Position près du point
Pour positionner ce cadre de mini-tampon près de la hauteur du point, définissez simplement quelque chose comme la fonction suivante. Ce n'est pas parfait (en fait, c'est horrible dans beaucoup de cas), mais il fait un travail décent d'estimation de la hauteur du point.
la source
(setf (symbol-function function) ...)
vous, vous feriez mieux d'utiliseradvice-add
(ou l'anciennead-add-advice
).Minibuffer en haut
L'affichage du mini-tampon au milieu de l'écran est compliqué. Une alternative raisonnable (que vous trouverez ou non plus lisible) consiste à la déplacer vers le haut.
Vous pouvez configurer l'emplacement (ou l'existence) du mini-tampon d'un cadre avec le
minibuffer
paramètre de cadre dans lainitial-frame-alist
variable.Cadre séparé
La définition du paramètre sur
nil
configurera le cadre pour qu'il n'y ait pas de mini-tampon, et Emacs créera automatiquement un cadre de mini-tampon séparé pour vous. Vous pouvez positionner ces deux cadres à l'aide du gestionnaire de fenêtres de votre système d'exploitation, ou vous pouvez le faire à partir d'Emacs.L'extrait suivant explique comment placer le cadre du mini-tampon en haut, avec le cadre normal juste en dessous, mais vous devrez certainement modifier les nombres pour tenir compte de la taille de votre moniteur.
Le moyen le plus rapide de régler cela est de redimensionner les cadres dans votre gestionnaire de fenêtres, puis d'évaluer
(frame-parameters)
pour voir les valeurs des paramètres que vous avez.Même cadre
Une autre possibilité consiste à définir le
minibuffer
paramètre sur une fenêtre. Malheureusement, je n'ai pas pu faire fonctionner cela pour une fenêtre dans le même cadre.la source
La bibliothèque
oneonone.el
vous donne ceci hors de la boîte.Personnalisez simplement l'option
1on1-minibuffer-frame-top/bottom
à la position souhaitée pour le cadre du mini-tampon autonome. La valeur est le nombre de pixels du haut (si non négatif) ou du bas (si négatif) de votre affichage. Par exemple, définissez la valeur sur votre hauteur d'affichage divisée par 2, pour la centrer verticalement.Si vous souhaitez plutôt qu'il soit positionné dynamiquement, par exemple au centre vertical du cadre actuel, vous pouvez le faire en (a) laissant
1on1-minibuffer-frame-top/bottom
=nil
et (b) en conseillant à la fonction1on1-set-minibuffer-frame-top/bottom
de lier dynamiquement cette variable à la position appropriée. Par exemple:(Définissez la fonction
my-dynamic-position
pour calculer la position que vous voulez, en fonction de tous les critères que vous souhaitez (taille et position actuelle de la fenêtre / du cadre, phase de la lune, ...).la source