2013-01-07 73 views
0

我試圖創建一個輔助模式Twig語法非常類似於Django和我想改變註釋風格的值使用{#和#}如何在emacs次要模式下設置註釋開始和註釋結束?

如果我做

(setq comment-start "{#") 
(setq comment-end "#}") 

運行正常,但是當改變LISP模式註釋端仍然是「#}」,而不是「」

的代碼是here

由於

+2

聽起來像你對我應該創建一個派生的主要模式,而不是。 – tripleee

+0

@tripleee如何幫助? –

+0

因爲這樣你就只有一個機制來處理這種模式處於活動狀態的緩衝區。聽起來像一個可用的Django模式將是一個很好的起點; https://code.djangoproject.com/wiki/Emacs – tripleee

回答

1

你可以做how to change the cursor based on a minor mode沿着答案線的東西:

(defvar twig-mode-previous-comments nil 
    "Storage for comment start/end that was before twig mode was enabled") 
(define-minor-mode twig-mode "twig" :lighter "" 
    (unless twig-mode-previous-comments 
    (set (make-local-variable 'twig-mode-previous-comments) (cons comment-start comment-end))) 
    (if twig-mode 
     (progn 
     (set (make-local-variable 'comment-start) "{#") 
     (set (make-local-variable 'comment-end) "#}")) 
    (setq comment-start (car twig-mode-previous-comments)) 
    (setq comment-end (cdr twig-mode-previous-comments)))) 
+0

而不是使用'defvar' +'make-local-variable',你可以簡單地使用'defvar-local'。 – Daimrod

+0

@Daimrod'defvar-local'並不是Emacs的內置函數,而實現類似內容的包(例如'ediff-defvar-local')只是通過'defvar'和'make-variable-緩衝區本地化) –

+0

它不是內置的,但它是在'subr.el'中定義的,它是GNU Emacs的一部分,對我來說足夠接近。無論如何,你的版本也可以。 – Daimrod

3

您需要通過添加這讓他們buffer-local

(set (make-local-variable 'comment-start) "{#") 
(set (make-local-variable 'comment-end) "#}") 

define-minor-mode體。