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))))
4

2 回答 2

2

你可以简单地删除你的(if (get-buffer-create "*lawlist*" )因为switch-to-buffer将创建缓冲区,如果它还不存在,如果它创建它,那么它会调用set-buffer-major-mode. 但请注意,initial-major-mode这只适用于名为的缓冲区*scratch*,您应该改为(setq-default major-mode 'text-mode)。更简单的是显式调用您想要的主要模式,就像 Francesco 提出的解决方案一样。

于 2013-04-26T12:43:10.940 回答
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*缓冲区设置为,则可以使逻辑更简单。text-modenew-frame-with-scratch

于 2013-04-26T06:35:51.233 回答