** EDIT: ** Sejak penulisan ini, tampaknya sebagian fitur telah langsung diimplementasikan dalam mode penurunan harga. Lihat komentar ini , dan tautan di dalamnya.
Konfigurasi
Ada dua pendekatan yang bisa Anda ambil.
- Anda dapat menulis perintah yang mengkompilasi kode penurunan harga (menggunakan perintah shell) dan menampilkan html di buffer.
- Anda dapat membuat beberapa penyesuaian a-la org-mode untuk membuat buffer terlihat seperti penurunan harga yang diberikan.
Saya jelaskan di sini cara menerapkan nomor 2. Cukup salin semua kode di bawah ini ke file init Anda.
Tambahkan aturan kunci-font
Variabel ini mengontrol tampilan daftar yang Anda inginkan. Ini menambahkan beberapa ruang untuk indentasi daftar, dan menggunakan poin-poin yang cukup (jika font Anda dapat menampilkannya).
(defvar endless/bullet-appearance
(propertize (if (char-displayable-p ?•) " •" " *")
'face 'markdown-list-face)
"String to be displayed as the bullet of markdown list items.")
Ini adalah perintah yang sebenarnya menambahkan aturan. Ada satu untuk daftar dan satu untuk tautan.
(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)
Jadikan tautannya dapat diedit
Karena kami menggunakan display
properti untuk menyembunyikan bagian dari tautan, kami perlu memberi tahu font-lock bahwa itu harus menghapus properti itu setiap kali Anda menghapus bagian dari tautan (dengan cara itu kami masih dapat mengeditnya).
(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))
Kita juga dapat mendefinisikan perintah untuk mengeditnya dengan mudah, terikat C-c C-l
, seperti dalam 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)))
(Opsional) Konfigurasikan beberapa wajah
Itu sudah cukup untuk poin yang Anda minta. Jika Anda ingin buffer Anda terlihat lebih seperti penurunan harga SE, hubungi
M-x customize-group RET markdown-faces
dan ubah apa yang Anda inginkan. Saya melakukan beberapa konfigurasi sendiri, dan inilah yang saya dapatkan.
(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")))))
Hasil
Inilah yang akan Anda dapatkan setelah 2 konfigurasi pertama:
Inilah yang akan Anda dapatkan setelah mengonfigurasi wajah juga. Dapat diperdebatkan apakah ini terlihat lebih baik, saya pribadi akan tetap dengan yang di atas.