[英]Emacs: How do I create a new “empty” buffer whenever creating a new frame?
我的Emacs在OS X系统上。 每当我使用⌘N时,是否有任何方法可以使新帧默认为空缓冲区(就像TextEdit的工作方式一样)? 我更喜欢先写内容,然后再确定合适的文件名。 但是,Emacs希望我先确定文件名,然后再写内容。 我没有看到任何好处。 有谁知道为什么Emacs这样工作?
基本上,如果我使用Cx 5 2 ,则Emacs总是弹出带有我当前正在处理的任何文件的框架。 这很不方便。 我也不希望我的Emacs弹出一个默认为*scratch*
的新框架(许多Google搜索结果以某种方式建议了这种方法)。 我希望它在新框架中有一个临时称为“ Untitled”的缓冲区,如果再次使用⌘N ,Emacs会弹出另一个临时的“ Untitled 2”缓冲区,依此类推。 这样,我可以稍后确定缓冲区文件名。
您可以使用switch-to-buffer
创建新switch-to-buffer
。 键入Cx b
,输入缓冲区名称,然后按RET
。 如果不存在具有该名称的缓冲区,Emacs将在“基本模式”下自动创建一个新的缓冲区。 您可以像往常一样使用Mx
切换到其他任何模式,例如Mx python-mode
。 要更改默认缓冲区,请将major-mode
的默认值设置为所需的缓冲区。
但是,如果您希望自动选择一个缓冲区名称并创建一个新框架,则需要编写自己的命令:
(defun lunaryorn-new-buffer-frame ()
"Create a new frame with a new empty buffer."
(interactive)
(let ((buffer (generate-new-buffer "untitled")))
(set-buffer-major-mode buffer)
(display-buffer buffer '(display-buffer-pop-up-frame . nil))))
将此绑定到Cc n
:
(global-set-key (kbd "C-c n") #'lunaryorn-new-buffer-frame)
现在,按下Cc n
可以创建一个新框架,并带有一个名为“ untitled”的新空缓冲区,其中x是一个连续数字。
如果我了解您的要求,这可能对您有用:
(defun empty-frame ()
(interactive)
(let ((fl (make-temp-file "Untitled")))
(switch-to-buffer-other-frame fl)))
这将为每个新缓冲区打开一个新的临时文件。 如果您不想实际创建文件,则可以使用以下代码:
(defun empty-frame ()
(interactive)
(let ((bn "Untitled-")
(num 1))
(while
(get-buffer (concat bn (number-to-string num)))
(setq num (1+ num)))
(switch-to-buffer-other-frame
(concat bn (number-to-string num)))))
下面将创建一个具有唯一名称的缓冲区。 该缓冲区未与任何文件关联,因此如果/当您使用Cx Cs
save-buffer
,系统将提示您提供文件名。
(defun empty-frame ()
"Open a new frame with a buffer named Untitled<N>.
The buffer is not associated with a file."
(interactive)
(switch-to-buffer-other-frame (generate-new-buffer "Untitled")))
您已经看到了有关如何创建新的“无标题”缓冲区的答案,但是关于Emacs为什么要您首先选择一个名称的原因,其中有一些原因:
Cx b *无标题*将打开新缓冲区(如果不存在)。 另请参阅Emacs手册
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.