2013-04-26 44 views
1

以下代碼僅在基本模式下生成新緩衝區,並且我還無法弄清楚如何讓新的暫存緩衝區以文本模式自動生成。 。 。任何幫助將不勝感激。新的框架與草稿(文字模式) - 關閉,但沒有雪茄。 。

(setq initial-major-mode 'text-mode) 

(defun new-frame-with-scratch() 
    "Open a new frame with scratch buffer selected" 
    (interactive) 
    (let ((frame (make-frame))) 
    (select-frame-set-input-focus frame) 
    (if (get-buffer-create "*lawlist*") 
     (switch-to-buffer "*lawlist*" 'norecord)))) 

回答

1

initial-major-mode創建初始*scratch*緩衝區時才使用,所以我認爲它不會幫助你。你必須在你的新創建*lawlist*緩衝明確地改變模式:

(defun new-frame-with-scratch() 
    "Open a new frame with scratch buffer selected" 
    (interactive) 
    (let ((frame (make-frame)) 
     (scratch-name "*lawlist*")) 
    (select-frame-set-input-focus frame) 
    (unless (get-buffer scratch-name) 
     (with-current-buffer (get-buffer-create scratch-name) 
     (text-mode))) 
    (switch-to-buffer scratch-name 'norecord))) 

的邏輯可以變得更簡單,如果你想你的*lawlist*緩衝每次new-frame-with-scratch被稱爲unconditionnally設置爲text-mode

+0

真棒 - 非常感謝你!我以前曾嘗試在代碼片段的各個部分插入'(文本模式)',但沒有正確的解決。您的修改完美無缺! – lawlist 2013-04-26 16:15:12

2

你可以簡單地刪除您(if (get-buffer-create "*lawlist*")因爲switch-to-buffer將創建緩衝區,如果不存在它,如果它創建它,然後調用set-buffer-major-mode。但請注意initial-major-mode只適用於名爲*scratch*的緩衝區,您應該改爲(setq-default major-mode 'text-mode)。比較容易的是明確地調用你想要的主要模式,就像Francesco提出的解決方案一樣。

+0

我希望我能檢查兩個正確的答案 - 非常感謝您的幫助。我已經添加到我的init.el文件中:'(setq-default major-mode'text-mode)'。 – lawlist 2013-04-26 16:17:29