Как получить символ, соответствующий синтаксису в мажорном режиме - PullRequest
0 голосов
/ 25 марта 2020

Как я могу получить символ (или его набор), соответствующий данному синтаксическому символу в major-mode?

Например, я хочу иметь возможность получить escape-символ, например '\' в большинстве режимов, таких как elisp или C. Я не могу найти функцию, которая бы возвращала символ (ы), соответствующий классу синтаксиса - в этом случае класс синтаксиса escape, ie. (string-to-syntax "\\") ;; => (9) в режимах Lisp / C.

Итак, как я могу go другим способом, например. (some-function '(9) major-mode) ;; => "\\"

1 Ответ

1 голос
/ 25 марта 2020

Синтаксические таблицы являются таблицами символов, вы можете использовать map-char-table для проверки каждого правила в синтаксисе talbe, например,

(defun foo (syntax-code syntax-table)
  "Return chars (or char range) with SYNTAX-CODE in SYNTAX-TABLE."
  (let (result)
    (map-char-table
     (lambda (k v)
       ;; k is either a char or (FROM . TO)
       ;; v is (SYNTAX-CODE . MATCHING-CHAR)
       (when (= (car v) syntax-code)
         (push (pcase k
                 (`(,from . ,to) (list (string from) (string to)))
                 (_ (string k)))
               result)))
     syntax-table)
    (nreverse result)))

(foo 9 emacs-lisp-mode-syntax-table)
;; => ("\\")
...