** EDIT: ** Da questa scrittura, sembra che parte delle funzionalità siano state implementate direttamente in modalità markdown. Dai un'occhiata a questo commento e ai relativi collegamenti.
Configurazione
Ci sono due approcci che puoi adottare.
- È possibile scrivere un comando che compila il codice markdown (usando un comando shell) e visualizzi l'html in un buffer.
- È possibile effettuare alcune personalizzazioni a-l'org-mode per fare il buffer di aspetto simile Markdown resa.
Spiego qui come implementare il numero 2. Copia semplicemente tutto il codice qui sotto nel tuo file init.
Aggiungi le regole di blocco dei caratteri
Questa variabile controlla l'aspetto delle liste. Aggiunge un po 'di spazio per rientrare nell'elenco e utilizza un bel punto elenco (se il font può visualizzarlo).
(defvar endless/bullet-appearance
(propertize (if (char-displayable-p ?•) " •" " *")
'face 'markdown-list-face)
"String to be displayed as the bullet of markdown list items.")
Questo è il comando che aggiunge effettivamente le regole. Ce n'è uno per gli elenchi e uno per i collegamenti.
(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)
Rendi il collegamento modificabile
Poiché stiamo usando la display
proprietà per nascondere parte del collegamento, dobbiamo dire a font-lock che dovrebbe cancellare quella proprietà ogni volta che elimini parte del collegamento (in questo modo possiamo ancora modificarlo).
(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))
Possiamo anche definire un comando per modificarlo facilmente, associato C-c C-l
, come in modalità 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)))
(Facoltativo) Configura alcune facce
Questo dovrebbe essere sufficiente per i punti richiesti. Se vuoi che il tuo buffer assomigli ancora di più al markdown SE, chiama
M-x customize-group RET markdown-faces
e cambia ciò che ritieni opportuno. Ho fatto un po 'di configurazione, ed ecco cosa ho ottenuto.
(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")))))
risultati
Ecco cosa otterrai dopo le prime 2 serie di configurazioni:
Ecco cosa otterrai anche dopo aver configurato i volti. È discutibile se questo sembra migliore, mi atterrò personalmente con quello sopra.