簡體   English   中英

從Lisp模式派生而忽略其鈎子?

[英]Derive from Lisp Mode, ignoring its hooks?

因此,我通過繼承標准Lisp模式為自定義Lisp創建了主要模式。 但是,當emacs進入它時,它也會自動激活粘液模式,該模式將覆蓋我的大多數綁定。 據我所知,這是因為SLIME在Lisp模式下注冊了一些鈎子,而我的模式也觸發了它們,但是我不確定。 有辦法避免這種情況嗎?

如果您使用的是define-derived-mode則將運行父模式的body和mode鈎子。

有關詳細信息,請參閱https://stackoverflow.com/a/19295380

如果要在lisp-mode-hook啟用slime-mode ,而新模式是從lisp-mode派生的,那么最簡單的方法是在派生模式的模式掛鈎中再次禁用 slime-mode模式。


編輯:實際上,我相信您可以通過操縱delayed-mode-hooks 主體中delayed-mode-hooks模式掛鈎來防止祖先模式的模式掛鈎運行。

(您不能阻止祖先模式的主體運行。)

但我建議您要這樣做。 我認為,如果您發現自己想要弄亂派生模式機制(特別是如果您打算共享代碼),那么您根本就不應該使用派生模式。

您可能應該從lisp-modeemacs-lisp-mode的實現中獲得lisp-mode 它們是不同的模式(而不是從另一個派生而來的)(每個模式都來自prog-mode )。 但是,它們的(獨立的)鍵映射具有共享的父鍵映射,這意味着許多鍵綁定執行相同的操作。

我建議使用該代碼作為模板來創建新的Lisp-ish主模式。

正確的方法是從lisp-mode的父類繼承。 理想情況下,應該有一個家長lispish-mode所有Lisp的主要模式中使用,但目前尚無這樣的事情,所以你必須使用prog-mode ,然后手動安裝/從復制你想要的東西lisp-mode

我歡迎添加了lispish-mode的補丁程序(即使它帶有更好的名稱,它甚至會更好),但是到目前為止,每次查看它時,我最終發現Lispish模式之間的差異太大,因此被分享。

我可以看到兩種解決問題的方法

  1. 更改添加到lisp-mode-hook的鈎子函數,以便對其進行測試(eq major-mode 'lisp-mode) ,因此不會在派生模式下執行。

  2. 運行父母時禁用lisp-mode-hook

     (defun my-tamed-lisp-mode () (let ((lisp-mode-hook nil)) (lisp-mode))) (define-derived-mode my-custom-lisp-mode my-tamed-lisp-mode "CustomLisp" "Major mode for my custom Lisp." ...) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM