LINUX.ORG.RU

История изменений

Исправление theNamelessOne, (текущая версия) :

С запятой помог этот ответ: внутри code или verbatim окружаешь запятую ZERO WIDTH SPACE. Увы, тильду внутри code так ввести не получится.

Однако, следующий ответ в той же теме натолкнул на лучшее решение: можно написать фильтр, который будет преобразовывать entities при экспорте:

(require 'ox)
(require 'ox-ascii)
(require 'rx)

(defconst PtiCa:entity-regex
  (rx "\\"
      (group (one-or-more word))
      (or "{}" word-boundary)))

(defvar PtiCa:backend-entity-position-alist
  '((latex . 1)
    (html . 3)
    (ascii . 4)
    (latin1 . 5)
    (utf-8 . 6)))

(defun PtiCa:export-entities-in-code/verbatim (contents backend info)
  (when (eq backend 'ascii)
    (setf backend (or (plist-get info :ascii-charset)
                      org-ascii-charset)))
  (let* ((pos (cdr (assq backend PtiCa:backend-entity-position-alist)))
         (rep (lambda (match)
                (let* ((entity (match-string 1 match))
                       (entity-spec (assoc entity org-entities))
                       (replacement (nth pos entity-spec)))
                  (or replacement match)))))
    (replace-regexp-in-string PtiCa:entity-regex rep contents t t)))

(add-to-list 'org-export-filter-code-functions
             #'PtiCa:export-entities-in-code/verbatim)
(add-to-list 'org-export-filter-verbatim-functions
             #'PtiCa:export-entities-in-code/verbatim)

Особо не проверял, но этот код должен работать для html-, ascii-, latex-бэкендов + его можно расширить для кастомных бэкендов, модифицируя PtiCa:backend-entity-position-alist и org-entities.

Исходная версия theNamelessOne, :

С запятой помог этот ответ: внутри code или verbatim окружаешь запятую ZERO WIDTH SPACE. Увы, тильду внутри code так ввести не получится.

Однако, следующий ответ в той же теме натолкнул на лучшее решение: можно написать фильтр, который будет преобразовывать entities при экспорте:

(require 'ox)
(require 'ox-ascii)
(require 'rx)

(defconst PtiCa:entity-regex
  (rx "\\"
      (group (one-or-more word))
      (or "{}" word-boundary)))

(defvar PtiCa:backend-entity-position-alist
  '((latex . 1)
    (html . 3)
    (ascii . 4)
    (latin1 . 5)
    (utf-8 . 6)))

(defun PtiCa:export-entities-in-code/verbatim (contents backend info)
  (when (eq backend 'ascii)
    (setf backend (or (plist-get info :ascii-charset)
                      org-ascii-charset)))
  (let* ((pos (cdr (assq backend PtiCa:backend-entity-position-alist)))
         (rep (lambda (match)
                (let* ((entity (match-string 1 match))
                       (entity-spec (assoc entity org-entities))
                       (replacement (nth pos entity-spec)))
                  (message "%s | %S" replacement replacement)
                  (or replacement match)))))
    (replace-regexp-in-string PtiCa:entity-regex rep contents t t)))

(add-to-list 'org-export-filter-code-functions
             #'PtiCa:export-entities-in-code/verbatim)
(add-to-list 'org-export-filter-verbatim-functions
             #'PtiCa:export-entities-in-code/verbatim)

Особо не проверял, но этот код должен работать для html-, ascii-, latex-бэкендов + его можно расширить для кастомных бэкендов, модифицируя PtiCa:backend-entity-position-alist и org-entities.