如何在主模式下获取语法对应的字符

How to get the character corresponding to syntax in a major-mode

如何在 major-mode 中获取对应于给定语法字符的字符(或字符集)?

例如,我希望能够在大多数模式(如 elisp 或 C)中获取转义字符,例如“\”。我找不到可以 return 字符的函数对应于语法 class——在本例中为转义语法 class,即。 (string-to-syntax "\") ;; => (9) 在 Lisp/C 模式中。

所以,我怎样才能走另一条路,例如。 (some-function '(9) major-mode) ;; => "\"

语法表是字符表,可以使用map-char-table来检查语法表中的每条规则,例如

(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)
;; => ("\")