3

我的问题:

我的办公室电脑在 Windows 7 下运行,我的笔记本在 Linux (openSuse 12.1) 下运行。我想在 org-mode 的议程视图中包含某个文件“foo.org”。在 Windows 7 下,路径是 T:/123-12/foo.org ;在 Linux 下,路径是 ~/Documents/Projects/12-123-Projectname/foo.org

在两台计算机上都有一个相同的文件“Projects.org”,其中包含我的项目以及所有时间表、截止日期、花里胡哨。但是这个文件 Projects.org 太大了,我需要将内容交换到项目文件夹中。该文件每天在两台计算机之间同步,当然这两个项目也会同步。

如何将 foo.org 包含在两台计算机的议程视图中,并在主文件“Project.org”中包含一个条目?如果 linux / 如果 windows 7 是否有可能进行切换?或者可以用符号链接来完成吗?


1. 编辑pmr对https://stackoverflow.com/a/11611956/1171221的回答

我可以为每个操作系统添加许多文件吗?例如:

(setq org-agenda-files
      (if (eq system-type 'windows-nt)
          '("windows-path1/file1.org" "windows-path2/file1.org" "windows-path3/foo7.org")
          '("unix-path1/file1.org"    "unix-path2/file2.org"    "unix-path3/foo7.org")))

 感谢您的友好帮助。坦率地说,为每个新的“file-xy.org”更改 .emacs-file 很麻烦,但这似乎是 org.el 的设计。

重新考虑您的答案:我在 Linux 和 Windows 上自然有不同的“.emacs”,无法同步 .emacs 文件。要么我必须将此定义外包(我可以以某种方式将其放入我的大型 project.org 中吗?)到一个可以同步的文件中,或者,我必须添加任何额外的“foo-xy.org”手动到相应的 .emacs 文件,我不需要操作系统之间的区别。


2. 编辑:解决方案

pmrs 的回答和评论是关键。我需要一个文件来提供 Windows 和 Linux 之间的切换。但是我在这两台机器上的 .emacs 文件向不同的方向增长,需要花费太多精力来对齐它们。

作为另一个可以在两台机器之间保持同步的文件,我编写了我的第一个 lisp 文件:AW-org-agenda-files.el,它基本上看起来像这样:

;;; AW-org-agenda-files.el --- *.org-Dateien mit TODOs in agenda-view einbeziehen 

;; Copyright: AW
;; Maintainer: AW
;; Keywords: customisation of Orgmode
;; Package: emacs

(setq org-agenda-files
      (if (eq system-type 'windows-nt)
      '("u:/Emacs/whatever.org" "u:/Emacs/Client1.org" "u:/Emacs/Client2.org" 
        "u:/Emacs/Privat.org" "t:/222-2012/file.org")
      '("~/Dokumente/Technik-u-Dokus/Emacs/whatever.org"
            "~/Dokumente/Technik-u-Dokus/Emacs/Client1.org" "~/Dokumente/Technik-u-Dokus/Emacs/Client2.org" "~/Dokumente/RA-win/2012-222-name/file.org")

))

(provide 'AW-org-agenda-files)
;;; end
4

2 回答 2

5

用于生成议程的文件存储在变量 中org-agenda-files。您可以.emacs 根据平台使用变量有条件地初始化此system-type变量。

(setq org-agenda-files
      (if (eq system-type 'windows-nt)
          '("windows-path/file.org")
        '("unix-path/file.org")))

了解更多信息:C-h v system-type RET

于 2012-07-23T11:50:17.353 回答
1

另一种解决方案是为系统之间的路径差异创建变量,并创建一个列出所有文件的变量。在您的情况下(省略不遵循相同模式的最终文件):

(defvar my/org-windows "u:/Emacs")
(defvar my/org-linux "~/Dokumente/Technik-u-Dokus/Emacs")
(defvar my/org-agenda-files '("whatever.org"
                              "Client1.org"
                              "Client2.org"
                              "Privat.org"))

然后你只是mapcar文件的路径,你就会有你的议程文件列表。

(mapcar (lambda (i)
          (expand-file-name i
                            (if (eq system-type 'windows-nt)
                                my/org-windows
                              my/org-linux)))
        my/org-agenda-files)

这不适用于具有其他路径的任何文件,但如果您的路径集有限,您可以为每个位置定义一组变量,然后只需更新该文件夹中的实际文件列表。

于 2013-07-01T13:09:48.553 回答