Debugging Emacs:如何在scratch屏幕中加载文件内容 我想在启动时将“~/todo.org”文件内容加载到scratch缓冲区中。

Debugging Emacs:如何在scratch屏幕中加载文件内容 我想在启动时将“~/todo.org”文件内容加载到scratch缓冲区中。,debugging,emacs,org-mode,Debugging,Emacs,Org Mode,我试过: (setq initial-buffer-choice "~/todo.org") 但它会在一个新的缓冲区中打开文件(而不是草稿) 我也尝试过: (setq initial-scratch-message "~/todo.org") 但是它在暂存缓冲区中打印文件路径,我想要它的内容 我还想将scratch缓冲区的模式更改为org模式。 我试过: (setq initial-major-mode org-mode) 但我有一个初始化错误 作为变量的符号值无效:组织模式 最后,我要说

我试过:

(setq initial-buffer-choice "~/todo.org")
但它会在一个新的缓冲区中打开文件(而不是草稿)

我也尝试过:

(setq initial-scratch-message "~/todo.org")
但是它在暂存缓冲区中打印文件路径,我想要它的内容

我还想将scratch缓冲区的模式更改为org模式。 我试过:

(setq initial-major-mode org-mode)
但我有一个初始化错误

作为变量的符号值无效:组织模式


最后,我要说的是:

(condition-case err
  (when (get-buffer "*scratch*")
    (with-current-buffer "*scratch*"
      (erase-buffer)
      (insert-file-contents "~/todo.org")
      (org-mode)
    )
  )
(error (message "%s" error-message-string err)))

最后,我要说的是:

(condition-case err
  (when (get-buffer "*scratch*")
    (with-current-buffer "*scratch*"
      (erase-buffer)
      (insert-file-contents "~/todo.org")
      (org-mode)
    )
  )
(error (message "%s" error-message-string err)))

您只需将一点Lisp代码放入您的:

(条件案例错误
(带当前缓冲区“*划痕*”
(let((最小值(最小点))
(最大值(最大点))
(转到字符最大值)
(插入文件内容“~/todo.org”)
(删除区域最小最大值)
(组织模式)
(错误(消息“%s”错误消息字符串err)))

但是,当@费尔斯在对你的问题的评论中指出,*ScRabue>代码>缓冲区可能不是使用此功能的最佳缓冲区。因此,我建议考虑以下备选方案:

(condition-case err
    (let ((buffer (get-buffer-create "*todo*")))
      (with-current-buffer buffer
        (insert-file-contents "~/todo.org")
        (org-mode))
      (setq initial-buffer-choice buffer))
  (error (message "%s" error-message-string err)))

通过使用此版本,您可以不使用
*scratch*
缓冲区。您的
.org
文件将以
*todo*
的名称插入一个单独的缓冲区。此缓冲区与您的
~/todo.org
文件没有关联,因此当您首次尝试保存它时,您必须指定一个文件名。

您可以实现所需的功能使用一点Lisp代码编辑效果,并将其放入:

(条件案例错误
(带当前缓冲区“*划痕*”
(let((最小值(最小点))
(最大值(最大点))
(转到字符最大值)
(插入文件内容“~/todo.org”)
(删除区域最小最大值)
(组织模式)
(错误(消息“%s”错误消息字符串err)))

但是,当@费尔斯在对你的问题的评论中指出,*ScRabue>代码>缓冲区可能不是使用此功能的最佳缓冲区。因此,我建议考虑以下备选方案:

(condition-case err
    (let ((buffer (get-buffer-create "*todo*")))
      (with-current-buffer buffer
        (insert-file-contents "~/todo.org")
        (org-mode))
      (setq initial-buffer-choice buffer))
  (error (message "%s" error-message-string err)))

通过使用此版本,您可以不使用
*scratch*
缓冲区。您的
.org
文件将以
*todo*
的名称插入一个单独的缓冲区。此缓冲区与您的
~/todo.org
文件不关联,因此当您首次尝试保存它时,您必须指定一个文件名。

启动缓冲区不可用受
初始主模式
影响。键入:
M-x描述变量RET初始主模式RET
以了解更多信息。在
组织模式
前面加上一个引号。您可能还想
(要求“组织”)
在执行此操作之前。我不确定该库何时加载,这可能取决于您使用的Emacs版本。您可能还希望阅读
m-x描述函数RET插入文件内容RET
m-x描述函数RET与当前缓冲区RET
。您能解释一下为什么要插入todo.org文件内容I吗nto
*scratch*
,而不是打开和显示todo.org本身?另外,您希望处于
组织模式的是启动缓冲区还是scratch缓冲区(后者至少与您的其他请求相关联,但您编写了前者,这对我来说毫无意义)。这听起来像。您最终要解决的问题是什么?是划痕缓冲区(已修复键盘-椅子错误:)。我想在此缓冲区中加载文件内容,以便可以将文件编辑为“只读但可编辑”。“只读但可编辑”这是一个矛盾。你的意思是你想要一个与文件无关的缓冲区吗?也就是说,一个与
~/todo.org
无关的缓冲区,例如,这样你就不会意外地覆盖它了?启动缓冲区不受
初始主模式
的影响。键入:
M-x描述变量RET initial main mode RET
>要了解更多信息,请在
组织模式
前面加上一个引号。您可能还想
(要求“组织”)
在执行此操作之前。我不确定该库何时加载,这可能取决于您使用的Emacs版本。您可能还希望阅读
m-x描述函数RET插入文件内容RET
m-x描述函数RET与当前缓冲区RET
。您能解释一下为什么要插入todo.org文件内容I吗nto
*scratch*
,而不是打开和显示todo.org本身?另外,您希望处于
组织模式的是启动缓冲区还是scratch缓冲区(后者至少与您的其他请求相关联,但您编写了前者,这对我来说毫无意义)。这听起来像一个。你最终要解决的问题是什么?是划痕缓冲区(键盘-椅子错误修复:))。我想在这个缓冲区中加载文件内容,这样我可以将文件编辑为“只读但可编辑”。“只读但可编辑”是一个矛盾。您的意思是想要一个与文件无关的缓冲区吗?也就是说,一个与
~/todo.org
无关的缓冲区,例如,您不能意外地覆盖它?您的代码不正确
setq
用于设置变量的值。如果在Emacs加载后检查变量的值,您会发现它是错误的--
M-x descripe variable RET initial scratch message RET
发生的事情是,当Emacs计算
(insert file contents“~/todo.org”)
时,您恰好访问了
*scratch*
缓冲区,您的文件将被插入到
*scratch*
缓冲区中。查看第2480行至第2485行,了解如何使用
(使用当前缓冲区“*scratch*”…
:我不明白,它可以完成此任务。您是否有最干净的方法来完成此任务?您的代码似乎是无意中“完成[]此任务”,因为
*scratch*
缓冲区恰好是se