【问题标题】:emacs > org mode > agenda - always use current bufferemacs > 组织模式 > 议程 - 始终使用当前缓冲区
【发布时间】:2023-03-21 00:52:01
【问题描述】:

我为各种项目使用了许多不同的组织模式文件,我通过在文件名中添加日期来修改它们,例如 filename-2020-09-17.org。我意识到我可以使用版本控制,但在这种情况下这是不可能的,因为需要与不使用 VC 的其他人共享文件。

我希望议程始终只显示当前文件/缓冲区的项目。

当我将例如带有 filename-2020-09-16.org 的文件保存到 filename-2020-09-17.org 时,议程仍会显示旧文件名,除非我将其从议程文件列表中删除并添加新文件。

我意识到我可以使用 C-c a

我看了 Agenda view of the current buffer

OP 说解决方案很简单,但他/她/他们没有提供解决方案 - 至少我没有看到它,我尝试了发布的代码,但它没有用。

我也找到了https://www.reddit.com/r/orgmode/comments/bxwovd/agenda_for_current_buffer/,但这似乎不能满足我的需要。

具体来说,我想在 .emacs 中添加一些内容,以便始终适用于所有文件。

我还研究了按键宏程序,但这似乎并不理想。

感谢任何帮助。

提前谢谢。

【问题讨论】:

    标签: emacs org-mode


    【解决方案1】:

    这是一个简单的函数来做你想做的事,但没有错误检查来确保例如您正在从访问 Org 模式文件的缓冲区调用它。这个想法是您将org-agenda-files 列表设置为仅包含缓冲区正在访问的文件,然后调用常规org-agenda 函数。将修改后的函数绑定到C-c a 键可能是也可能不是您想要做的,但您可以尝试自己决定:

    (defun org-agenda-current-buffer ()
       (interactive)
       (let ((org-agenda-files (list (buffer-file-name (current-buffer)))))
          (org-agenda)))
    
    (define-key global-map (kbd "C-c a") #'org-agenda-current-buffer)
    

    【讨论】:

    • 您好 NickD,非常感谢您花时间和兴趣提供帮助。我尝试了代码,但出现错误“符号的函数定义是无效的:缓冲区文件名”。我相信这是一件小事,但如果你能帮助我解决这个问题,将不胜感激。抱歉,我是 emacs 和 lisp 的新手,只是不太了解.....
    • 拼写错误:buffer-file-name - 我会修复它。感谢您指出!
    • 嗨 NickD,我发现这适用于议程,而且我认为它适用于全球列表。但是我发现如果我使用“按'N r'(例如'0 r')再次搜索:(0)[ALL](1)TODO(2)DONE等”过滤全局列表,那么这不起作用 -列表为空。我发现我仍然需要使用 C-c [ 将当前文件添加到议程中才能使其正常工作。您是否添加了任何代码来完成这项工作?谢谢。
    • 这是因为过滤全局列表发生在不同的缓冲区(议程缓冲区)中,所以上面的 (current-buffer) 调用不会返回与以前相同的内容。不,在上面的代码中我对此无能为力:它只是创建一个本地 org-agenda-files 列表并在其上调用 org-agenda。我能想到的唯一另一件事是更改 global org-agenda-files 列表:每当您打开一个新的 org-mode 文件时,将其清除并将其设置为仅包含您刚刚打开的文件。这是一种不同的机制,因此您可能想就它提出一个新问题。
    • 嗨 NickD 感谢您的进一步解释,感谢您给我的所有帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多