Chcę mieć tagi <kbd> dla mojego bloga napisane w trybie org

16

Piszę i publikuję mojego bloga w trybie org i org-page. Chodzi o to, że chcę pisać o Emacsie i chciałbym, aby klawisze były podświetlone, tak jak Stack Exchange robi to z <kbd>tagiem. Zdobycie tego: C-x C-fzamiast czegoś innego!

W jaki sposób lub jak mogę to osiągnąć?

shackra
źródło

Odpowiedzi:

15

Oto, czego używam na swoim blogu .

(define-key org-mode-map "\C-ck" #'endless/insert-key)
(defun endless/insert-key (key)
  "Ask for a key then insert its description.
Will work on both org-mode and any mode that accepts plain html."
  (interactive "kType key sequence: ")
  (let* ((is-org-mode (derived-mode-p 'org-mode))
         (tag (if is-org-mode
                  "@@html:<kbd>%s</kbd>@@"
                "<kbd>%s</kbd>")))
    (if (null (equal key "\r"))
        (insert
         (format tag (help-key-description key nil)))
      (insert (format tag ""))
      (forward-char (if is-org-mode -8 -6)))))

Wywołaj to, dzwoniąc C-c k.

  1. Poprosi Cię o klucz, tak jak C-h kzrobiłby to.
  2. Wstawia ten klucz otoczony <kbd>znacznikami ucieczki .
  3. Jeśli tylko naciśniesz RET, wstawi tagi i pozostawi punkt w środku (zamiast wstawiania dowolnego klawisza), dzięki czemu będziesz mógł pisać bardziej skomplikowane klawisze.
  4. Ma nawet trochę kodu, dzięki któremu można go używać poza nim org-mode!
Malabarba
źródło
1
Twój blog wydaje się fajny, przy okazji. Piszesz to w trybie org, prawda? jak to opublikujesz?
shackra
2
@JorgeArayaNavarro Używam mocno poprawionej wersji ox-jekyll . Chciałem o tym napisać na blogu, ale łatka zawiera 200 linii kodu, więc okazało się, że jest to trochę wyzwanie.
Malabarba
1
Jaka jest różnica między (define-key org-mode-map (kbd "C-c k") #'endless/insert-key)i (define-key org-mode-map (kbd "C-c k") 'endless/insert-key)?
shackra
2
@JorgeArayaNavarro Zobacz moją odpowiedź na ten komentarz
Malabarba
2
Ładny. A jeśli chcesz, aby każdy pojedynczy klucz w sekwencji był oddzielnym znacznikiem, po prostu zmień (help-key-description key nil)na(mapconcat 'identity (split-string (help-key-description key nil)) "</kbd><kbd>")
phils,