2013-04-26 12 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