当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 4 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : ORG mode使用的链接问题
帖子发表于 : 2011-04-26 21:56 

注册: 2009-08-22 8:57
帖子: 6
送出感谢: 0 次
接收感谢: 1
在使用ORG的时候有的时候需要用到外部链接。。
一般使用C-u, C-c, C-l.
但是他给出来的是让你查找链接。
请问如何设置,使得他可以直接按照本文件名(如:abc.org)(如果不存在,则建立)然后打开刚刚创建的子目录(如:abc.d),让你在里面寻找或者创建文件?
我想在整理文档的时候,这是一个好方法!
elisp经验有限啊。。。


页首
 用户资料  
 
2 楼 
 文章标题 : Re: ORG mode使用的链接问题
帖子发表于 : 2011-04-28 10:55 

注册: 2009-09-04 16:42
帖子: 77
送出感谢: 1
接收感谢: 5
代码:
(defun my-org-insert-link (&optional complete-file link-location)
  (interactive "P")
  (if (member complete-file '((4)))
      (let* ((default-dir default-directory)
             (file (buffer-file-name))  ;文件名(含路径)
             (file-dir (file-name-directory file)) ;文件路径
             (file-name (file-relative-name file file-dir)) ;文件名
             (dir-name (concat file-name ".d")))            ;要创建的子目录名
        (setq default-directory file-dir)
        (if (not (file-directory-p dir-name))
            (make-directory-internal dir-name))
        (setq default-directory (concat file-dir dir-name "/"))
        (org-insert-link complete-file link-location)
        (setq default-directory default-dir))
    (org-insert-link complete-file link-location)))

这个函数有C-u前缀时会进入子目录查找文件,其他情况下和org-insert-link一样


页首
 用户资料  
 
3 楼 
 文章标题 : Re: ORG mode使用的链接问题
帖子发表于 : 2011-05-02 23:22 

注册: 2009-08-22 8:57
帖子: 6
送出感谢: 0 次
接收感谢: 1
lhui 写道:
代码:
(defun my-org-insert-link (&optional complete-file link-location)
  (interactive "P")
  (if (member complete-file '((4)))
      (let* ((default-dir default-directory)
             (file (buffer-file-name))  ;文件名(含路径)
             (file-dir (file-name-directory file)) ;文件路径
             (file-name (file-relative-name file file-dir)) ;文件名
             (dir-name (concat file-name ".d")))            ;要创建的子目录名
        (setq default-directory file-dir)
        (if (not (file-directory-p dir-name))
            (make-directory-internal dir-name))
        (setq default-directory (concat file-dir dir-name "/"))
        (org-insert-link complete-file link-location)
        (setq default-directory default-dir))
    (org-insert-link complete-file link-location)))

这个函数有C-u前缀时会进入子目录查找文件,其他情况下和org-insert-link一样

我研究了很久。放进去,调用函数。还是不行。。。啊。。要死了。
他总是提示Insert a link.
出现一个新的buffer。叫做org link:

然后开始提示:
Use TAB to complete link prefixes, then RET for type-specific completion supportInsert a link.

查手册,n多自定义变量。。真是解决不了。。。

等过一段时间,我有时间学了,一定把这个函数搞定了!

Thx a lot...至少让我有点思路。

其中代码的最后一行和倒数第三行完全一样,我看了一下,可能有问题。。。


页首
 用户资料  
 
4 楼 
 文章标题 : Re: ORG mode使用的链接问题
帖子发表于 : 2011-05-03 18:40 

注册: 2009-09-04 16:42
帖子: 77
送出感谢: 1
接收感谢: 5
很抱歉,由于没有仔细测试,上面的函数确实有bug,已经在下面更新了。
但你上面说的问题并不是bug,我想你没有看函数下面的那句话吧。简单地说,如果用
代码:
(define-key org-mode-map "\C-c\C-l" 'my-org-insert-link)
绑定该函数到 C-c C-l,那么C-c C-l 就会调用原来的`org-insert-link',也就是你上面的情况;如果是C-u C-c C-l,就正是你想要的(C-u是传递的参数)。所以这个函数是可以代替原来的`org-insert-link'使用的。

代码:
(defun my-org-insert-link (&optional complete-file link-location)
  (interactive "P")
  (if (equal complete-file '(4))
      (let* ((default-dir default-directory) ;获取 default-directory
             (org-link-file-path-type 'absolute)   ;上面的函数少了这句,会导致bug
             (file (buffer-file-name))             ;获取文件名(含路径)
             (file-dir (file-name-directory file)) ;文件路径
             (file-name (file-relative-name file file-dir)) ;文件名
             (dir-name (concat file-name ".d"))) ;设置要创建的子目录名
        (setq default-directory file-dir)
        ;; 判断是否存在子目录名;若不存在则创建
        (if (not (file-directory-p dir-name))
            (make-directory-internal dir-name))
        ;; org-insert-link 是根据 default-directory 查找文件的,所以需要改变目录
        (setq default-directory (concat file-dir dir-name "/"))
        (unwind-protect                 ;如果没有这句,会导致C-g退出时无法恢复 default-directory
            (org-insert-link complete-file link-location)
          (setq default-directory default-dir))) ;恢复 default-directory
    (org-insert-link complete-file link-location)))


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 4 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译