Je voudrais afficher 3 listes de mots sur des lignes distinctes horizontalement en bas (bien que le haut fonctionnerait aussi) de chaque cadre emacs que j'ai ouvert. J'ai pensé à 6 façons de le faire, et ils ont tous des problèmes:
Ma première pensée a été d'ajouter une ligne à ma ligne de mode, mais AFAICT vous ne pouvez pas utiliser le caractère de nouvelle ligne dans une ligne de mode, il est simplement converti en "^ J".
Ma deuxième pensée était d'avoir la ligne en haut de l'écran et d'utiliser la ligne d'en-tête, mais elle ne prend pas en charge le caractère de nouvelle ligne non plus.
Je pourrais afficher une superposition sur les 3 dernières lignes de la fenêtre, mais rendre ce robuste semble difficile - le défilement devrait être déclenché lorsque le point atteint la superposition plutôt que la fin réelle de la fenêtre, et je devrais constamment repositionner la superposition, car les superpositions se trouvent dans l'espace de texte et non dans l'espace de la fenêtre.
Je pourrais essayer de faire des fenêtres dédiées au bas du cadre. J'ai essayé de coder cela, mais ce n'est pas très robuste non plus, cela ne semble pas fonctionner correctement lorsqu'un cadre contient déjà des fenêtres fractionnées et j'ai dû relier Cx, 1 à une version personnalisée de delete-other-windows qui ignore mes fenêtres spéciales et je suis sûr qu'il y a d'autres cas d'angle. De plus, lorsqu'une fenêtre d'aide s'ouvre maintenant, elle s'ouvre verticalement car elle pense qu'il y a déjà une division horizontale (ce qui existe techniquement, mais c'est uniquement pour afficher une fenêtre d'une ligne).
Je pourrais avoir un cadre dédié pour cela, mais ma configuration ne fonctionnera pas en mode terminal, et je devrais script mon gestionnaire de fenêtres pour gérer le garder en bas de l'écran, le rendant non sélectionnable, n'affectant pas la mise en page, etc.
Je pourrais insérer le texte des 3 lignes directement dans le mini-tampon. Je l'ai fait fonctionner partiellement, je peux agrandir le mini-tampon pour accueillir les 3 lignes, et je peux les afficher. Cependant, à chaque fois qu'un message est répété, les lignes disparaissent jusqu'à ce que j'émette une autre commande à quel point elles réapparaissent. Idéalement, les 3 lignes et la zone d'écho ne se chevaucheraient pas afin que je puisse voir les deux. Ce serait moins ennuyeux si je pouvais filtrer de manière fiable les messages qui vont dans la zone d'écho - j'ai trouvé une solution sur EmacsWiki mais cela ne semble pas fonctionner pour les messages qui proviennent de la source emacs C (en particulier, j'aimerais obtenir débarrasser des fichiers de sauvegarde des messages car je sauvegarde automatiquement souvent sur une minuterie).
Pour le contexte, mon objectif est d'avoir constamment un affichage des mots les plus fréquemment utilisés dans le tampon actuel, le point le plus proche des mots dans le tampon actuel et les mots les plus récemment utilisés dans le tampon actuel. J'ai l'intention de pouvoir les insérer dans le tampon via des commandes vocales. Je pourrais donc dire "2 les plus proches" et lui faire choisir le deuxième élément de la liste des mots le plus proche et l'insérer. Je me soucie seulement que les listes de mots soient visibles pour le tampon que j'édite actuellement. Je ne veux pas utiliser les fenêtres contextuelles utilisées par les différents modes de complétion de code car j'ai besoin que les listes soient toujours visibles.
Réponses:
Avec beaucoup d'expérimentation hacky, j'ai réussi à mettre le n ° 6 (en utilisant le texte du mini-tampon) à un état de fonctionnement `` assez bon ''. Voici une capture d'écran:
Il existe plusieurs éléments clés pour que cela fonctionne:
Voici un lien vers mon implémentation avec un exemple de ceinture affichant le kill ring. Finalement, cela fera partie d'un projet approprié: https://gist.github.com/jgarvin/ce37d08654978fd7e4c9
C'est la première fois que j'écris une quantité importante d'elisp, donc la qualité est probablement inférieure, mais cela fonctionne.
la source
Malheureusement, ni la ligne de mode ni la ligne d'en-tête ne peuvent être de plusieurs lignes. J'ai déjà posé des questions à ce sujet et il n'y a (du moins pas) d'option cachée pour que cela fonctionne. Donc 1 et 2 sont sortis. J'ai aussi l'impression que 3 et 6 sont des hacks qui ne vous rendront pas heureux à long terme. 3 et 4 semblent être de bonnes approches, mais les faire fonctionner de manière fiable sera tout un investissement.
Je vous recommande donc d'abord de mettre cela sur emacs-devel . D'après mon expérience, les choses finissent par être mises en œuvre si vous prenez la peine d'expliquer soigneusement ce que vous voulez et pourquoi c'est une bonne chose. Cela peut prendre un certain temps, au moins jusqu'à la prochaine version, mais si vous êtes bien en attente un peu ou en utilisant la version de développement, vous pouvez éventuellement obtenir exactement ce que vous voulez, avec beaucoup moins d'efforts.
la source