** EDIT: ** Depuis cette écriture, il semble qu'une partie des fonctionnalités a été directement implémentée en mode markdown. Consultez ce commentaire et les liens qu'il contient.
Configuration
Vous pouvez adopter deux approches.
- Vous pouvez écrire une commande qui compile le code de démarque (à l'aide d'une commande shell) et affiche le code html dans un tampon.
- Vous pouvez effectuer certaines personnalisations en mode organisationnel pour que le tampon ressemble à une démarque rendue.
J'explique ici comment implémenter le numéro 2. Copiez simplement tout le code ci-dessous dans votre fichier init.
Ajouter les règles de verrouillage des polices
Cette variable contrôle l'apparence des listes. Il ajoute de l'espace pour mettre la liste en retrait et utilise un joli point (si votre police peut l'afficher).
(defvar endless/bullet-appearance
(propertize (if (char-displayable-p ?•) " •" " *")
'face 'markdown-list-face)
"String to be displayed as the bullet of markdown list items.")
Il s'agit de la commande qui ajoute réellement les règles. Il y en a un pour les listes et un pour les liens.
(require 'rx)
(defvar endless/markdown-link-regexp
"\\[\\(?1:[^]]+\\)]\\(?:(\\(?2:[^)]+\\))\\|\\[\\(?3:[^]]+\\)]\\)"
"Regexp matching a markdown link.")
(font-lock-add-keywords
'markdown-mode
'(("^ *\\(\\*\\|\\+\\|-\\|\\) "
1 `(face nil display ,endless/bullet-appearance) prepend)
(endless/markdown-link-regexp
1 '(face nil display "") prepend))
'append)
Rendre le lien modifiable
Parce que nous utilisons la display
propriété pour masquer une partie du lien, nous devons dire à font-lock qu'il doit effacer cette propriété chaque fois que vous supprimez une partie du lien (de cette façon, nous pouvons toujours le modifier).
(add-hook 'markdown-mode-hook #'endless/markdown-font-lock)
(defun endless/markdown-font-lock ()
"Configure aggressive font-locking of `markdown-mode'."
(define-key markdown-mode-map "\C-c\C-l" #'endless/markdown-insert-link)
(add-to-list (make-local-variable 'font-lock-extra-managed-props) 'display))
Nous pouvons également définir une commande pour la modifier facilement, liée à C-c C-l
, comme en mode org.
(defun endless/markdown-insert-link ()
"Insert or edit link at point."
(interactive)
(if (or (looking-at endless/markdown-link-regexp)
(and (ignore-errors (backward-up-list) t)
(or (looking-at endless/markdown-link-regexp)
(and (forward-sexp -1)
(looking-at endless/markdown-link-regexp)))))
(let ((data (endless/ask-for-link
(match-string-no-properties 1)
(or (match-string-no-properties 2)
(match-string-no-properties 3)))))
(if (match-string-no-properties 2)
(replace-match (cdr data) :fixedcase :literal nil 2)
(replace-match (cdr data) :fixedcase :literal nil 3))
(replace-match (car data) :fixedcase :literal nil 1))
(let ((data (endless/ask-for-link)))
(insert "[" (car data) "](" (cdr data) ")"))))
(defun endless/ask-for-link (&optional name link)
(cons (read-string "Text of the link: " name)
(read-string "URL of the link: " link)))
(Facultatif) Configurer certains visages
Cela devrait suffire pour les points que vous avez demandés. Si vous voulez que votre tampon ressemble encore plus au démarquage SE, appelez
M-x customize-group RET markdown-faces
et changez ce que vous jugez bon. J'ai fait quelques configurations moi-même, et voici ce que j'ai obtenu.
(custom-set-faces
'(markdown-header-face-1 ((t (:inherit markdown-header-face :height 2.0))))
'(markdown-header-face-2 ((t (:inherit markdown-header-face :height 1.7))))
'(markdown-header-face-3 ((t (:inherit markdown-header-face :height 1.4))))
'(markdown-header-face-4 ((t (:inherit markdown-header-face :height 1.1))))
'(markdown-inline-code-face ((t (:inherit font-lock-constant-face :background "gainsboro"))))
'(markdown-link-face ((t (:inherit link))))
'(markdown-pre-face ((t (:inherit font-lock-constant-face :background "gainsboro")))))
Résultats
Voici ce que vous obtiendrez après les 2 premiers ensembles de configurations:
Voici également ce que vous obtiendrez après avoir configuré les visages. On peut se demander si cela a l'air mieux, je m'en tiendrai personnellement à celui ci-dessus.