首页 > 解决方案 > 如何在主要模式下获取与语法对应的字符

问题描述

如何获取与 a 中给定语法字符相对应的字符(或其集合)major-mode

例如,我希望能够在 elisp 或 C 等大多数模式中获取转义字符,例如“\”。我找不到返回与语法类对应的字符的函数——在这个case 转义语法类,即。(string-to-syntax "\\") ;; => (9)在 Lisp/C 模式下。

那么,我该如何走另一条路,例如。(some-function '(9) major-mode) ;; => "\\"

标签: syntaxemacsmajor-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)
;; => ("\\")

推荐阅读