2015-06-10 31 views
1

我不確定如何正確地描述了這個問題,但這裏有雲:Emacs的網絡模式選擇單詞分隔符包括_

在Emacs與我雙擊選擇一個單詞,什麼決定選擇哪個角色 - - 這個叫什麼? (在終端配置的偏好,這就是所謂的選擇按單詞字符,所以我會用這句話。)

沒有網絡的模式,例如,如果我雙擊titleimage_title這個詞,它僅突出顯示title - 也就是說,下劃線被識別爲逐字分隔符。

一旦啓用Web模式,單詞選擇的行爲發生變化,下劃線不再是單詞分隔符。在前面的示例中,雙擊現在突出顯示整個image_title。這刺激了我,因爲我通常想選擇下劃線分隔標識符的部分。 (一般來說,我寧願任何模式都不要改變默認的選擇行爲。)

有什麼方法可以改變這種行爲的網絡模式?

編輯爲在我的首選模式下添加:,如果我雙擊_字符,它會選擇包括下劃線在內的整個單詞。我喜歡這種細微而精確的選擇行爲控制。

+1

與發佈一個潛在的回答這個問題的問題是,Emacs的開發人員一直在變化的內部運作在各種版本和未來版本之間的'mouse.el'中的函數。您的Emacs版本可能與其他人使用的版本不同。你需要做的是按'C-h k',然後左鍵單擊來查看被調用的兩個函數。然後你需要'M-x find-function'來追蹤負責選擇區域的函數。一旦你這樣做了,你需要用一個自定義的語法表('with-syntax-table')來創建一個新的函數。 – lawlist

+1

你需要使用'with-syntax-table',因爲你不想改變當前緩衝區主模式使用的'syntax-table' - 你只需要一個臨時語法表選擇有問題的功能的區域組件。例如,您可以複製'text-mode'使用的語法表,或者簡單地創建並定義您自己的語法表。一旦找到問題的功能,您可能可以使用臨時語法表的建議來包裝它 - 大多數Emacs用戶將源代碼視爲神聖的東西,他們會更好地使用建議而不是創建新功能。 :) – lawlist

回答

0

@lawlist - 感謝您的建議!我是不是能夠通過完全跟隨功能,但它確實使我沿着正確的路徑:

  • 發現double-mouse-1,谷歌搜索
  • 發現mouse word selection使用全局forward-word功能
  • 該網頁提到syntax-table,你提到syntax-table做什麼我們這裏有網絡mode.el包含syntax-table(和bug #377參考。)

web模式的語法表包含,大約1969年線以V 11.2.2:

(defvar web-mode-syntax-table 
    (let ((table (make-syntax-table))) 
    (modify-syntax-entry ?_ "w" table) 
    (modify-syntax-entry ?< "." table) 
    (modify-syntax-entry ?> "." table) 
    (modify-syntax-entry ?& "." table) 
    (modify-syntax-entry ?/ "." table) 
    (modify-syntax-entry ?= "." table) 
    (modify-syntax-entry ?% "." table) 
    table) 
    "Syntax table used to reveal whitespaces.") 

我承擔?_ "w"意味着它治療_作爲一個字字符。我將"w"更改爲".",下劃線現在被視爲我想要的字邊界!

Hooray爲堆棧溢出,谷歌和github。

而且,現在我已經得到了一些正確的關鍵字,堆棧溢出表明,這可能有助於相關答案:Changing Emacs Forward-Word Behaviour

+0

我對Web模式並不熟悉,但*如果Web模式依賴於您正在修改的任何內容(例如,突出顯示,摺疊或其他)的字符的語法,則建議的修訂可能會中斷一些東西。如果是這樣的話,那麼你不妨考慮用'with-syntax-table'之類的東西來臨時修改實際的功能問題:http://www.gnu.org/software/emacs/manual/html_node/的elisp /句法的表-Functions.html – lawlist

相關問題