** EDIT: ** Seit diesem Schreiben scheint ein Teil der Funktionen direkt im Markdown-Modus implementiert worden zu sein. Schauen Sie sich diesen Kommentar und die darin enthaltenen Links an.
Aufbau
Sie können zwei Ansätze wählen.
- Sie können einen Befehl schreiben, der den Markdown-Code kompiliert (mithilfe eines Shell-Befehls) und den HTML-Code in einem Puffer anzeigt.
- Sie können einige Anpassungen im Organisationsmodus vornehmen, damit der Puffer wie ein gerenderter Markdown aussieht .
Ich erkläre hier, wie Nummer 2 implementiert wird. Kopieren Sie einfach den gesamten folgenden Code in Ihre Init-Datei.
Fügen Sie die Regeln für die Schriftsperre hinzu
Diese Variable steuert, wie Listen aussehen sollen. Es fügt etwas Platz zum Einrücken der Liste hinzu und verwendet einen hübschen Aufzählungspunkt (falls Ihre Schriftart dies anzeigen kann).
(defvar endless/bullet-appearance
(propertize (if (char-displayable-p ?•) " •" " *")
'face 'markdown-list-face)
"String to be displayed as the bullet of markdown list items.")
Dies ist der Befehl, der die Regeln tatsächlich hinzufügt. Es gibt eine für Listen und eine für Links.
(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)
Machen Sie den Link bearbeitbar
Da wir die display
Eigenschaft verwenden, um einen Teil des Links auszublenden, müssen wir font-lock mitteilen, dass diese Eigenschaft gelöscht werden soll, wenn Sie einen Teil des Links löschen (auf diese Weise können wir ihn weiterhin bearbeiten).
(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))
Wir können auch einen Befehl definieren, um ihn einfach zu bearbeiten, gebunden an C-c C-l
, wie im org-Modus.
(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)))
(Optional) Konfigurieren Sie einige Gesichter
Das sollte für die von Ihnen angeforderten Punkte ausreichen. Wenn Sie möchten, dass Ihr Puffer noch mehr wie ein SE-Abschlag aussieht , rufen Sie an
M-x customize-group RET markdown-faces
und ändern Sie, was Sie für richtig halten. Ich habe mich selbst konfiguriert und hier ist, was ich habe.
(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")))))
Ergebnisse
Nach den ersten beiden Konfigurationen erhalten Sie Folgendes:
Folgendes erhalten Sie auch nach dem Konfigurieren von Gesichtern. Es ist fraglich, ob dies besser aussieht, ich bleibe persönlich bei der obigen.