是否可以创建组织模式* scratch *缓冲区?


13

在emacs中处理文档时,我经常发现自己打开一个新的缓冲区,以org模式进行一些操作,复制org模式内容,并将其粘贴到我的文档中。以前,每次需要这样做时,我都会创建一个新的组织模式文档。现在,我有一个文件~/.scratch.org保存我的工作。

是否可以创建一个*org-scratch*行为类似于*scratch*缓冲区的缓冲区?


3
缓冲M-x org-mode时有什么不便之处*scratch*吗?
xji

1
@XiangJi甚至都没有想到要这样做。好主意啊。
布赖恩·菲茨帕特里克

Answers:


11

*Scratch*缓冲区的初始主模式由变量控制initial-major-mode-值必须是一个符号(用外行的话来说,这意味着在主模式名前加一个单引号): http://www.gnu。 org / software / emacs / manual / html_node / elisp / Auto-Major-Mode.html

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

编辑:基于原始发布者的评论,这是一个示例函数,该函数以以下主要模式按顺序创建非文件访问缓冲区org-mode

(defun my-scratch-buffer ()
"Create a new scratch buffer -- \*hello-world\*"
(interactive)
  (let ((n 0)
        bufname buffer)
    (catch 'done
      (while t
        (setq bufname (concat "*hello-world"
          (if (= n 0) "" (int-to-string n))
            "*"))
        (setq n (1+ n))
        (when (not (get-buffer bufname))
          (setq buffer (get-buffer-create bufname))
          (with-current-buffer buffer
            (org-mode))
          ;; When called non-interactively, the `t` targets the other window (if it exists).
          (throw 'done (display-buffer buffer t))) ))))

那么,可能会有两个*Scratch*缓冲区吗?
布赖恩·菲茨帕特里克

我添加了一个示例函数,该函数以数字顺序创建新的非文件访问缓冲区,并包括一个org-mode名称。可以将名称更改hello-world为用户希望由操作系统识别的任何名称,例如Windows不喜欢astrisk。
法律名单

很酷。感谢您的关注!
布赖恩·菲茨帕特里克

我很高兴能够提供帮助。我决定抛出结果并一口气显示缓冲区-功能是相同的,但是此功能看起来更加紧凑。:)
律师名单

11

有一个扩展名为scratch,它允许创建特定于模式的暂存缓冲区。它可以从MELPA获得,因此您应该可以轻松安装。

安装此软件包后,当您处于org-mode缓冲区中时,可以运行M-xscratch中获取暂存缓冲区org-mode

如果提供前缀参数,则可以选择模式(而不是选择当前活动的主模式)。


我试过了,但我认为退出emacs后便会删除暂存缓冲区。原始暂存缓冲区不会,它也会自动保存。这是对的还是我错过了什么?
薇薇(Vivi)2015年

1
除非您执行特殊操作,否则原始*scratch*缓冲区不会在会话之间持久存在,也不会在退出emacs时保存。尝试运行emacs -q以获取标准行为,该行为未经您的init文件修改。
弗朗索瓦·佛伏特

有趣的是,我不知道。我刚刚对此进行了调查,发现这是Aquamacs的功能。我还发现,Aquamacs带有键绑定Command-N,可以在另一帧中创建新的暂存器(该暂存器在会话之间不持久)。
薇薇

2
顺便说一下,MELPA上有一个名为persistent-scratch的程序包,它声称可以创建持久性暂存缓冲区。
薇薇(Vivi)2015年

5

我认为一种简单的实现方法M-x org-mode就是在*snatch*缓冲区中运行,然后org-mode直接启用。这可以应用于启用任何主要模式。


迄今为止最简单的方法。
user2699 2015年

这当然是有用的。我喜欢拥有专门用于组织模式的暂存缓冲区,因为我经常将暂存缓冲区用于其他用途。
布赖恩·菲茨帕特里克

2

尝试这个:

  1. Cx b(输入新暂存缓冲区的名称,例如“ asdf”)
  2. MX组织模式(更改“ asdf”缓冲区的主要模式)

关闭此缓冲区时,您将不会获得保存其内容的查询。也就是说,您将获得适当的暂存缓冲区。并且*scratch*缓冲区保持不变。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.