Utilisez une zone d'écho vide pour afficher les informations

10

La zone d'écho est vide la plupart du temps, ce qui me fait penser que je pourrais l'utiliser pour afficher des informations. Par exemple, org-clockaffiche la tâche en cours, le temps restant et le temps total écoulé sur la modélisation. Cette information n'est pas vraiment lisible là-bas (la modeline peut être plutôt courte), est répétée sur chaque modeline (car elle s'applique à toute la session emacs), et n'est pas si utile que je suis prêt à sacrifier un précieux espace de modeline pour cela . En revanche, il pourrait apparaître dans la zone d'écho lorsqu'il n'y a rien d'autre à afficher ici.

Existe-t-il un moyen canonique d'y parvenir? J'ai pensé à pirater une fonction d'insertion dans minibuffer-inactive-mode-hook(mais cela ne fonctionne pas de manière fiable, par exemple, le message disparaît dès que la zone d'écho est utilisée à nouveau), ou à spammer des messages non enregistrés (mais ce sera un gâchis avec d'autres utilisations de la zone d'écho et le mini-tampon).

Une version pauvre de cela utiliserait des minuteries inactives, mais la zone d'écho peut être vide sans qu'emacs ne soit inactif (par exemple lors de la saisie de texte).

T. Verron
la source
1
La zone d'écho affichée est le contenu de "* Zone d'écho 0 *" ou "* Zone d'écho 1 *" et ce sont des tampons "normaux". Il devrait être possible de patcher Emacs de manière à fournir peut-être une exécution de hook chaque fois que ces tampons sont "vidés" (ou affichés et vides), afin que cette fonctionnalité puisse être implémentée de manière efficace et fiable.
Stefan
Ce n'est pas exactement ce que vous avez en tête mais Bastien Guerry a fait des trucs intéressants pour sauver la succession d'écran, en particulier en affichant la ligne de mode dans le titre du cadre: bzg.fr/emacs-strip-tease.html
Dieter.Wilhelm

Réponses:

4

Un commentaire sur cette question mentionne qu'un package nommé symon utilise une telle fonctionnalité.

Il est obtenu en spammant des messages non enregistrés lorsque le mini-tampon est inactif et en arrêtant le réaffichage chaque fois qu'une commande est émise. Le passe-partout est assez court, et après quelques minutes d'utilisation, je n'ai pas remarqué de problème avec cela: l'utilisation des messages et du mini-tampon a toujours la priorité sur les messages.

Les composants clés sont:

  • une fonction d'affichage, exécutée sur une minuterie inactive (appelle le message avec message-log-maxset to nil, de sorte que la chaîne affichée ne pénètre pas dans le *Messages*tampon)
  • une fonction de réaffichage, exécutée sur une minuterie
  • une fonction pour arrêter l'affichage, exécuter pre-command-hook

Le seul problème est que l'affichage est arrêté à chaque exécution d'une commande, y compris lors de la frappe.

Pour ceux qui sont intéressés, j'ai extrait le code correspondant dans un package passe-partout disponible sur github .

T. Verron
la source
1

La réponse, OMI, est non . La zone d'écho est réservée aux messages éphémères . Et beaucoup de choses effacent explicitement tout ce qui pourrait y avoir fait écho. Donc, réaliser ce que vous demandez de manière raisonnable est problématique, OMI.

En somme, utilisez une alternative. Voilà quelque:

  1. Utilisez un autre tampon (par exemple un petit cadre ou une fenêtre que vous gardez ouvert à cet effet). Simple à faire, vous pouvez le déplacer, le modifier, l'effacer ou faire tout ce que vous voulez avec.

  2. Utilisez une partie ou la totalité de la ligne de mode (que vous avez déjà envisagée, apparemment).

  3. Utilisez une ligne d'en-tête.

  4. Utilisez un titre de cadre.

Si c'était moi, j'opterais probablement pour le n ° 1. (Mais je ne veux pas / n'ai pas vraiment besoin d'un tel affichage à plein temps des informations d'état. Je définirais plus probablement une commande qui me montre les informations (même un historique / journal) à la demande.)


Mis à jour après vos commentaires:

Vous avez déjà dit, dans votre question, " le message disparaît dès que la zone d'écho est à nouveau utilisée ". Cela ressemblait donc à l'utilisation d'un espace éphémère tel que la zone d'écho ne répondrait pas à vos besoins. Vos réponses aux commentaires semblent contredire cela.

Si vous voulez vraiment utiliser la zone d'écho, utilisez minibuffer-inactive-mode-hook, comme vous l'avez mentionné, ou utilisez une minuterie pour appeler messageou insérer le message horaire dans la zone d'écho d'une autre manière. Cependant, vous avez déjà noté les problèmes avec cela. Ces problèmes (écrasement, effacement) découlent de la nature éphémère ( prévue ) de la zone d'écho .

En somme, vous souhaitez utiliser une zone destinée aux messages éphémères, mais vous ne voulez pas que vos messages disparaissent dès que cette zone est réutilisée.

(BTW - écrivez votre mention que les informations de la ligne de mode sont répétées dans chaque ligne de mode: Cela ne doit pas être le cas. Vous pouvez faire en sorte que la ligne de mode soit spécifique à un tampon particulier, etc. IOW, vous pouvez choisir une ligne de mode pour toujours (ou périodiquement) montrez votre horloge ou autre chose.)

A dessiné
la source
Merci pour vos suggestions! Mais d'abord, je ne comprends pas très bien, pourquoi est-ce problématique? J'aimerais que les éléments qui iraient à la zone d'écho pour remplacer toute autre utilisation de la zone d'écho, donc l'effacer est OK. Et les informations supplémentaires ne doivent être affichées que lorsque la zone d'écho est vide, il n'y a donc rien à effacer. Cela ne ressemble-t-il pas à une spécification raisonnable? À propos de # 1, le problème est que je ne veux pas perdre d'espace sur l'écran. La zone d'écho est toujours là, même lorsqu'elle est vide. J'ai énuméré quelques problèmes avec # 2, et # 3 et # 4 partagent beaucoup de ces problèmes.
T. Verron
À propos de la raison pour laquelle je souhaite afficher les informations à plein temps, prenez par exemple l' org-clockexemple de la question: je veux que la minuterie coche pour me rappeler ce que je dois faire, et que je suis censé le faire maintenant , comme aussi souvent que possible.
T. Verron
"le message disparaît dès que la zone d'écho est utilisée à nouveau" Ok, ce n'était pas clair. Ce que je voulais dire, c'est que si j'utilise minibuffer-inactive-mode-hooket quitte le mini-tampon, le message s'affiche. Ensuite, si une autre commande imprime quelque chose dans la zone d'écho, ce nouveau message est ajouté et le message éphémère ne revient pas (car le mini-tampon ne s'est pas impliqué cette fois).
T. Verron
Concernant la modeline, le principal problème est le petit espace disponible là-bas (j'ai souvent beaucoup de fenêtres, réparties horizontalement, donc des modelines très courtes).
T. Verron
Encore une fois - " En somme, vous voulez utiliser une zone destinée aux messages éphémères, mais vous ne voulez pas que vos messages disparaissent dès que cette zone est utilisée à nouveau. " Utilisez une minuterie avec messageou post-command-hook, si vous le souhaitez. Mais le problème essentiel de la disparition / de l'écrasement fait parfois surface, car vous essayez d'utiliser une zone d'affichage temporaire pour quelque chose que vous ne voulez pas être temporaire.
Drew