Ouverture de fichier en mode Markdown

Le
Jean-Yves Baudais
Bonjour,
J'ouvre les fichiers .md automatiquement en mode Markdown
(markdown-mode.el version 2.3 de 2017). Par défaut les fichiers
s'ouvrent en mode "SHOW ALL" qui correspond Í 
"markdown-cycle-global-status 1". Et le changement de mode se fait avec
"shifttab".
Je souhaiterais une ouverture directement dans un autre mode, genre
"OVERVIEW" ou "CONTENT", et lÍ , ça dépasse largement mes compétences
Auriez-vous une idée de code pour changer le mode d'affichage
automatiquement Í  l'ouverture des fichiers ?

-- Jean-Yves
  • Partager ce contenu :
Vos réponses
Trier par : date / pertinence
Damien Wyart
Le #26562200
Bonjour,
* Jean-Yves Baudais
J'ouvre les fichiers .md automatiquement en mode Markdown
(markdown-mode.el version 2.3 de 2017). Par défaut les fichiers
s'ouvrent en mode "SHOW ALL" qui correspond Í 
"markdown-cycle-global-status 1". Et le changement de mode se fait
avec "shifttab".
Je souhaiterais une ouverture directement dans un autre mode, genre
"OVERVIEW" ou "CONTENT", et lÍ , ça dépasse largement mes
compétences...
Auriez-vous une idée de code pour changer le mode d'affichage
automatiquement Í  l'ouverture des fichiers ?

J'ai testé quelques approches, et finalement, je propose ceci :
(add-hook 'markdown-mode-hook
(lambda () (markdown-cycle t)))
Pour passer en mode CONTENTS directement, il faut appeler la fonction 2 fois :
(add-hook 'markdown-mode-hook
(lambda () (progn
(markdown-cycle t)
(markdown-cycle t))))
Cela va s'appliquer globalement, donc si on veut ce comportement
seulement sur certains fichiers, ça serait plus complexe...
--
DW
Jean-Yves Baudais
Le #26562204
Bonjour,
Le 08/12/2020 Í  07:57, Damien Wyart a écrit :
[...]
Pour passer en mode CONTENTS directement, il faut appeler la fonction 2 fois :
(add-hook 'markdown-mode-hook
(lambda () (progn
(markdown-cycle t)
(markdown-cycle t))))
Cela va s'appliquer globalement, donc si on veut ce comportement
seulement sur certains fichiers, ça serait plus complexe...


Non, non, je souhaite la même chose pour tous les fichiers *.md. Merci
pour le code, c'est exactement ce que je souhaitais :-)
--Jean-Yves
Jean-Yves Baudais
Le #26562273
Bonjour,
Le 08/12/2020 Í  07:57, Damien Wyart a écrit :
Pour passer en mode CONTENTS directement, il faut appeler la fonction 2 fois :
(add-hook 'markdown-mode-hook
(lambda () (progn
(markdown-cycle t)
(markdown-cycle t))))


J'ai quand même réussi un truc malgré mon ignorance :
"markdown-shifttab" Í  la place de "markdown-cycle t". 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
Une idée pour corriger ça ?
--Jean-Yves
Damien Wyart
Le #26562500
Bonjour,
* Jean-Yves Baudais
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
Jean-Yves Baudais
Le #26562861
Bonjour,
Le 11/12/2020 Í  17:30, Damien Wyart a écrit :
* Jean-Yves Baudais
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 :)

J'abdique :-)
[...]
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é :)

Ben non ça ne fonctionne pas. Le message d'erreur Í  l'ouverture d'un
fichier .md (ouverture sous emacs ou au lancement d'emacs) est
| File mode specification error: (void-function outline-hide-sublevels)
... mais j'ai débuggé ! Si, si ! J'ai donc recherché la fonction fautive
dans mon markdown-mode.el et il y a
| ;; Use new names for outline-mode functions in Emacs 25 and later.
| (eval-and-compile
| (defalias 'markdown-hide-sublevels
| (if (fboundp 'outline-hide-sublevels)
| 'outline-hide-sublevels
| 'hide-sublevels))
| ...
et c'est markdown-hide-sublevels qui est utilisé dans la définition de
la fonction markdown-cycle. J'ai donc remplacé outline-hide-sublevels
par markdown-hide-sublevels dans le hook et tout-y-l'est-nickel.
Merci,
--Jean-Yves
Poster une réponse
Anonyme