Je souhaite parfois afficher des informations dans un style de tampon d'aide, j'ai donc utilisé du code comme celui-ci:
(with-help-window (help-buffer)
(princ "Type q to exit this help buffer.\n\n")
(princ result))
Cela fonctionne bien, mais la fenêtre d'aide n'utilise que la moitié de mon cadre. Je divise normalement mon cadre horizontalement, pour donner deux grandes fenêtres. Le tampon d'aide affiché utilise l'une des deux fenêtres.
Je préfère utiliser le cadre entier dans certains cas, pour afficher plus d'informations et pour réduire le nombre de fois que je dois parcourir les informations affichées. Le problème à résoudre est de savoir comment utiliser temporairement tout le cadre pour l' with-help-window
appel et restaurer automatiquement les tailles de tampons / fenêtres d'origine lorsque je tape "q" dans la fenêtre d'aide.
Comment puis-je atteindre au mieux cet objectif? Je pense que je cherche quelque chose comme ça:
(with-FULL-FRAME-help-window (help-buffer)
...)
J'ai regardé le mode gagnant, les signets, la sauvegarde des dispositions dans les registres, les différentes (display-buffer ...)
méthodes (et puissantes, mais complexes) . La plupart d'entre eux semblent légèrement hors cible par rapport à mon intention, car ils ont tendance à corriger / restaurer une mise en page après une opération d'affichage plein cadre. Et il me semble que beaucoup d'entre eux me demandent de restaurer manuellement la disposition de ma fenêtre (ce que je préférerais ne pas faire).
Je me demande si quelqu'un a entendu parler d'un moyen de résoudre ce problème simplement. J'espère quelque chose de simple comme ces approches possibles, où je peux remplacer quelque chose avec un cadre let ...
(let ((help-window-width-display-option fullwidth))
(with-help-window (help-buffer)
...))
Ou ce genre d'approche, que je ne sais pas encore faire, et qui semble quelque peu difficile / délicate pour mon niveau de compétence actuel.
(let ((save original configuration somehow)
(delete-other-windows)
(with-help-window (help-buffer)
...)
;; somehow, when I type "q" in the help buffer
;; - catch that action in code after the buffer is killed
;; - and restore the original window configuration
)
Il me semble que le problème clé à résoudre est de savoir comment restaurer automatiquement la configuration de la fenêtre d'origine lorsque je tape "q" dans le tampon du mode d'aide temporaire. Merci
display-buffer-pop-up-frame
: gnu.org/software/emacs/manual/html_node/elisp/… Une autre idée serait de lancer unmake-frame
tout en utilisantdisplay-buffer
une fonction personnalisée pour cibler ce nouveau cadre. Si vous souhaitez localiser et cibler un cadre existant, jetez un œil à cet exemple: stackoverflow.com/questions/18346785/…display-buffer-pop-up-frame
, car c'est assez proche de ce que je recherche. Mais ... le cadre apparaît à un autre endroit (pas mon cadre actuel), et je dois le distribuer avec cmd-w, pas "q" dans le style d'aide. L'enregistrement / la restauration des configurations de fenêtre n'est pas le problème sous-jacent. Actuellement, je penche vers le clonage et la modification de la source de with-help-window pour lui donner une option que je peux laisser-lier ou boucler avec un defmacro ou quelque chose. Je souris à quel point nous émacions les gens à vouloir exactement ce que nous voulons d'Emacs.help-return-method
,quit-window
lequit-restore
paramètre de fenêtre, et probablement du code personnalisé pour définir / utiliser toutes ces choses pour créer l'effet souhaité.Réponses:
Exemple # 1 : Le raccourci clavier
q
dans lehelp-mode
tampon provient de celuispecial-mode-map
qui est incorporé dans lehelp-mode-map
. La valeur par défaut estquit-window
, qui n'offre que quatre (4) actions possibles: " Selon les informations stockées dans lequit-restore
paramètre de fenêtre de WINDOW, soit (1) supprimer WINDOW et son cadre, (2) supprimer WINDOW, (3) restaurer le tampon précédemment affiché dans WINDOW , ou (4) faire en sorte que WINDOW affiche un autre tampon que le tampon actuel. Si non nul, remettre lequit-restore
paramètre à zéro. "[Voir doc-string:M-x describe-function RET quit-window RET
]Voici un aperçu de ce que fait cet exemple:
Liez la variable
help-window-select
àt
pour que la*Help*
fenêtre soit sélectionnée.Liez la configuration actuelle de la fenêtre à une variable temporaire appelée
config
.Générez la
*Help*
fenêtre.Stockez la configuration de la fenêtre précédente -
config
- dans une variable locale appeléemy-stored-win-config
.Créez une affectation de clé locale pour la lettre
q
, qui est liée àmy-restore-win-config
. [Cette affectation locale l'emporte / assombrit l'affectation précédente dequit-window
.]Supprimez les autres fenêtres.
Appuyez sur la lettre
q
pour restaurer la configuration de fenêtre précédente et tuer le*Help*
tampon.L'extrait de code suivant est un exemple d'utilisation, mais n'est pas une fonction interactive complète. Il peut être évalué dans le
*scratch*
tampon pour le voir en action.Exemple # 2 :
Voici une macro autonome qui fait tout comme l'exemple ci-dessus, qui traite de trois situations possibles liées aux valeurs de hook existantes - par exemple
nil
, symbole ou liste de symboles.Et voici l'exemple d'extrait à évaluer dans le
*scratch*
tampon.la source
my-help-quit
fonction, tout en essayant de relier la clé d'aide-carte à l'intérieur dewith-help-window
. Mais cela ne fonctionnait pas. Je vois maintenant que vous liez la clé à l'intérieur du tampon d' aide (pas la fenêtre d'aide comme je le faisais) après la configuration du tampon. Je suppose que ma liaison a été perturbée par la configuration du tampon. Une leçon apprise. Tout fonctionne maintenant. Merci beaucoup.*Help*
tampon avant qu'il ne se termine - letemp-buffer-window-setup-hook
qui s'exécutehelp-mode-setup
et ensuite tout autre élément déjà / précédemment affecté au crochet; puis, letemp-buffer-window-show-hook
qui s'exécutehelp-mode-finish
et tout ce qui est déjà / précédemment affecté au crochet.help-mode-setup
devrait rester le premier dans le temps, mais vous pouvez ajouter quelque chose derrière en liant l'un de ces crochets susmentionnés avec des trucs personnalisés. Dans ce scénario, vous n'en auriez pas besoinwith-current-buffer
.help-mode-setup
ethelp-mode-finish
, mais ils ont tous les deux fonctionné avant que le tampon ne soit affiché. Le problème clé était de rediriger la liaison de touches "q", et vous m'avez montré comment faire cela dans le tampon (pas dans la fenêtre, ce que j'essayais de faire). PS. J'ai essayé d'écrire une solution en tant que(defmacro with-full-frame-help-window
, mais la macro nécessite toujours une fonction distincte pour gérer l'action "q" et la restauration de la fenêtre. Je posterai mes fonctions terminées ci-dessous.... (kill-buffer (current-buffer))))))
. La macro a pris un tampon-nom comme argument et a tué " Aide ", donc il pourrait y avoir un problème si l'appelant utilisait un tampon dont le nom était différent. J'ai modifié ma macro pour supprimer lebuffer-name
paramètre et généré / tué le même tampon à l'intérieur du defmacro.Sur la base de l'excellente réponse de @lawlist, voici mes fonctions terminées pour le prochain gars ...
La longue chaîne de commentaires ci-dessus, avec l'aide continue de @lawlist, a abouti à cette version d'une macro qui ne nécessite pas de nom de tampon, traite correctement la configuration d'origine / affiche les listes de hooks, et cela ne pose pas de problème avec le "q "entrez d'autres tampons du mode Aide .
Utilisez la macro de cette manière:
la source