Полимод Emacs для Markdown и Python - PullRequest
       48

Полимод Emacs для Markdown и Python

0 голосов
/ 25 сентября 2018

Я использую библиотеку python3 pweave (http://mpastell.com/pweave/usage.html) для грамотного программирования .

В качестве текстового режима используется pweave markdown , как режим кода python3 , и можно использовать noweb (https://en.wikipedia.org/wiki/Noweb) синтаксис буквального программирования.

Для правильной подсветки синтаксиса в emacs Я намеревался использовать библиотеку polymode (https://polymode.github.io/ и https://github.com/polymode).

Я использую emacs version26.1. И я смог установить polymode из melpa.

К сожалению, ранее не существовало многорежимного режима для режима хоста: markdown, inner-mode: python3, синтаксис: noweb, поэтому я попытался, основываясь на документации и существующем коде, написать свой poly-pweave-mode , добавив следующий код lisp в мой файл .emacs .

(require 'polymode-classes)

(defcustom pm-host/pweave-text
  (pm-host-chunkmode :name "pweave-text"
                     :mode 'markdown-mode)
  "markdown host chunkmode"
  :group 'poly-hostmodes
  :type 'object)

(defcustom  pm-inner/pweave-code
  (pm-inner-chunkmode :name "pweave-code"
                      :head-matcher "^[ \t]*<<\\(.*\\)>>="
                      :tail-matcher "^[ \t]*@.*$"
                      :mode 'python-mode)
  "noweb static python3 inner chunkmode."
  :group 'poly-innermodes
  :type 'object)

(define-polymode poly-pweave-mode
  :hostmode 'pm-host/pweave-text
  :innermode 'pm-inner/pweave-code)

(add-to-list 'auto-mode-alist '("\\.pymd" . poly-pweave-mode))

Но почему-то emacs это не ест.Когда я открываю emacs, я получаю следующую ошибку:

Warning (initialization): An error occurred while loading `/Users/abc/.emacs':

Symbol's function definition is void: pm-host-chunkmode

To ensure normal operation, you should investigate and remove the
cause of the error in your initialization file.  Start Emacs with
the `--debug-init' option to view a complete error backtrace.

Что я не так делаю? Как я могу запустить желаемый полимод?

1 Ответ

0 голосов
/ 05 ноября 2018

Это решение о том, как указать markdown-python3-noweb полимод

;; define pwn polymode
(require 'poly-noweb)
(require 'poly-markdown)

(defcustom pm-inner/noweb-python
  (clone pm-inner/noweb
         :name "noweb-python"
         :mode 'python-mode)
  "Noweb for Python"
  :group 'poly-innermodes
  :type 'object)

(define-polymode poly-pweave-mode poly-markdown-mode
  :innermodes '(pm-inner/noweb-python :inherit))

(add-to-list 'auto-mode-alist '("\\.pymd" . poly-pweave-mode))

Благодарю вас Виталий Спину , автор полимодапакет, который помог мне решить этот вопрос!Для подробного обсуждения взгляните на вопрос о многомодовом режиме 180 на github .

В качестве альтернативы Я нашел этот пост на бирже стека emacs: https://emacs.stackexchange.com/questions/20136/pythontex-and-auctex Итак,После этого поста, это решение, чтобы добраться до markdown-python3-noweb mmm-mode

;; define pwn multi major modes mode
(require 'mmm-auto)

(mmm-add-classes
 '((noweb-python
    :submode python-mode
    :face mmm-default-submode-face
    :front "^<<.*>>=\n"
    :back "^@$")))

(setq mmm-global-mode 'maybe)
(mmm-add-mode-ext-class 'markdown-mode nil 'noweb-python)

(add-to-list 'auto-mode-alist '("\\.pymd" . markdown-mode))

Моя благодарность принадлежит Жану Пьеру , чей подробныйобъяснение в посте сделало это частью пирога, чтобы заставить это работать для моего случая!

...