2016-04-03 197 views
0

我是一名關於學習emacs lisp的新生,因此我正在閱讀emacs lisp手冊。當我讀6.6 Char-Tables時,我對如何使用char-table感到困惑。在那一章中,我找不到一個使用char-table的好例子。Emacs lisp char-table

當然,elisp具有由char-table和syntax-table組成的語法表可以做很多事情。 我想知道如何很好地使用char-table,以及在哪些情況下我會使用它。

感謝

+2

如果您認爲Emacs文檔需要改進,請使用'M-x report-emacs-bug'向開發人員提出您的(具體的)建議。 – Drew

回答

1

我不是很熟悉的Emacs Lisp編程,但單獨從數據結構,我立刻鍵盤映射思維的描述。事實證明,I was right

特別是在這種情況下,使用「父」字符表是有意義的:例如,當激活一個模式時,該模式可能有一個鍵盤映射和它提供的鍵盤綁定。在將當前鍵盤映射設置爲模式鍵盤映射之前,當前鍵盤映射可能會成爲模式鍵盤映射的父代。這樣,當模式的鍵盤映射不提供映射時,可以查詢先前的鍵盤映射以獲得適當的映射。


以下是我想實現用C炭表,作爲一個粗略的草圖:

struct char_table { 
    void * data[256 /* or how many char codes there are */]; 
    struct char_table * parent; 
}; 

void * lookup(
    struct char_table * table, 
    char /* or a more suitable type for char codes */ key) { 
    void * result = table.data[key /* plus possibly some calculation */]; 
    if (!result && table.parent) { 
    result = lookup(table.parent, key); 
    } 
    return result; 
} 
+0

我不知道它是什麼意思,我是ac程序員,我的理解就是這樣,char表如下所示:xxx ['a'] = object0 xxx ['b'] = object1 xxx ['c'] = object2 – huix

+0

這是非常正確的,除了char-tables可以是稀疏的,即未使用的索引不佔用任何空間(認爲hash/dict/associative array/Lisp assoc-list)。 – tripleee

0

的Emacs的字符,表只是一個特殊的數組多數民衆贊成由字符而不是索引由整數。在Unicode中有很多字符,所以值得有一個特殊的實現這樣一個數組,其中許多字符範圍共享相同的值。