Sujet : Re: Ouverture de fichier en mode Markdown
De : damien.wyart (at) *nospam* free.fr (Damien Wyart)
Groupes : fr.comp.applications.emacsOrganisation : Serveur de News Free
Date : 11. Dec 2020, 18:30:28
Message-ID : <5fd39ea4$0$8948$426a74cc@news.free.fr>References : 1 2 3User-Agent : Gnus/5.13 (Gnus v5.13) Emacs/28.0.50
Bonjour,
* Jean-Yves Baudais <
jean-yves.baudais@insa-rennes.fr> in fr.comp.applications.emacs:
J'ai quand même réussi un truc malgré mon ignorance :
"markdown-shifttab" à la place de "markdown-cycle t".
Je préfère ma version :)
En effet, j'avais bien vu que S-TAB est mappé sur markdown-shifttab,
mais sa définition est la suivante :
,----
| (defun markdown-shifttab ()
| "Handle S-TAB keybinding based on context.
| When in a table, move backward one cell.
| Otherwise, cycle global heading visibility by calling
| `markdown-cycle' with argument t."
| (interactive)
| (cond ((markdown-table-at-point-p)
| (call-interactively #'markdown-table-backward-cell))
| (t (markdown-cycle t))))
`----
donc quand on est à l'intérieur d'un tableau, on se déplace à la cellule
précédente. Vu que la demande initiale était de changer le mode
d'affichage inconditionnellement, j'ai repris directement
(markdown-cycle t) dans mon hook.
Dans les deux cas, ça fonctionne si j'ouvre le fichier au lancement
d'Emacs (sous un shell : "emacs monfichier.md"). Par contre si j'ouvre
un fichier markdown à partir d'Emacs avec CTRL-X CTRL-F, il s'ouvre en
mode OVERVIEW et pas CONTENTS.
(Sans le hook, ça s'ouvre toujours en mode SHOW ALL.) Dans le buffer
*Messages*, j'ai OVERVIEW [2 times]
à la place de
OVERVIEW
CONTENTS
Effectivement, je reproduis bien le problème. La partie de la fonction
markdown-cycle qui nous intéresse fait ceci :
,----
| (cond
| ;; Move from overview to contents
| ((and (eq last-command this-command)
| (eq markdown-cycle-global-status 2))
| (outline-hide-sublevels 1)
| (message "CONTENTS")
| (setq markdown-cycle-global-status 3)
| (markdown-outline-fix-visibility))
| ;; Move from contents to all
| ((and (eq last-command this-command)
| (eq markdown-cycle-global-status 3))
| (outline-show-all)
| (message "SHOW ALL")
| (setq markdown-cycle-global-status 1))
| ;; Defaults to overview
| (t
| (outline-hide-body)
| (message "OVERVIEW")
| (setq markdown-cycle-global-status 2)
| (markdown-outline-fix-visibility))))
`----
et donc j'ai l'impression que dans le cas C-x C-f la condition
(eq last-command this-command) n'est pas vérifiée. Je n'ai pas
d'explication et j'avoue que je suis pas enthousiaste pour
débugguer ça :)
Une idée pour corriger ça ?
Je propose donc ceci, moins élégant car on duplique du code, mais qui
fonctionne dans tous les cas (j'avoue que pour ma première version, je
n'avais testé que le chargement initial).
(add-hook 'markdown-mode-hook
(lambda () (progn
(outline-hide-sublevels 1)
(message "CONTENTS")
(setq markdown-cycle-global-status 3)
(markdown-outline-fix-visibility))))
(on peut éventuellement supprimer la ligne message si on n'en a pas l'utilité)
En espérant que cela fonctionnera bien aussi de votre côté :)
-- DW