Я хочу, чтобы теги <kbd> для моего блога были написаны в режиме org

16

Я пишу и публикую свой блог с помощью org-mode и org-page. Дело в том, что я хочу написать об Emacs, и мне бы хотелось, чтобы сочетания клавиш выделялись, как это делает Stack Exchange с <kbd>тегом. Получаем это: C-x C-fвместо чего-то еще!

Каким образом или как я могу этого достичь?

shackra
источник

Ответы:

15

Вот что я использую для своего блога .

(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)))))

Вызвать это, позвонив C-c k.

  1. Он подскажет вам ключ так же, как C-h kсделал бы.
  2. Он вставляет тот ключ в окружении <kbd> теги.
  3. Если вы только что нажали RET , он вставит теги и оставит точку внутри (вместо вставки любой клавиши), так что вы сможете вводить более сложные клавиши.
  4. Он даже имеет некоторый код, чтобы сделать его пригодным для использования вне org-mode!
Malabarba
источник
1
Ваш блог кажется крутым, кстати. Вы пишете это в org-mode, верно? как ты это публикуешь?
Шакра
2
@JorgeArayaNavarro Я использую сильно залатанную версию вол-джекилла . Я собирался написать об этом в блоге, но патч содержит 200 строк кода, так что это оказалось сложной задачей.
Малабарба
1
Какая разница между (define-key org-mode-map (kbd "C-c k") #'endless/insert-key)а (define-key org-mode-map (kbd "C-c k") 'endless/insert-key)?
Шакра
2
@JorgeArayaNavarro Смотрите мой ответ на этот комментарий
Малабарба
2
Ницца. И если вы хотите, чтобы каждый отдельный ключ в последовательности был отдельным тегом, просто измените (help-key-description key nil)на(mapconcat 'identity (split-string (help-key-description key nil)) "</kbd><kbd>")
phils