首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让emacs-helm列表提供固定目录中的文件作为选项?

如何让emacs-helm列表提供固定目录中的文件作为选项?
EN

Stack Overflow用户
提问于 2012-10-01 19:13:48
回答 3查看 1.1K关注 0票数 4

这与这个问题有关:

how-to-have-emacs-helm-list-offer-files-in-current-directory-as-options

但是,不是从当前目录添加文件,我希望能够有一个固定的目录列表,helm-mini将始终提供来自该目录的文件。理想情况下,我希望能够只拥有具有特定扩展名的文件,并且我希望这是递归完成的(实际上只有一层深)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-02 10:54:25

这就是你要的。我使用这段代码来列出特定目录中的所有org文件。如果要列出所有文件,只需删除源代码中的candidate-transformer行,并删除emagician/helm-ct-is-org-file。

您可能还想重命名source/variable/function。;)

helm编辑:已修复,感谢偷看helm-cmd-t

备注:这是我第一次真正尝试制作helm源代码,这个实现可能很糟糕。它还专门解决了我的问题(仅在一个目录中直接查找所有org文件),而不是更一般的问题(基于特定目录中的文件构建helm源代码)。

代码语言:javascript
复制
(defvar emagician/helm-c-source-files
  `((name  . "Find Emagician Files")
    (header-name . (lambda (_)))
    (candidates . ,(lambda () 
                    (when (file-accessible-directory-p emagician-dir)
                      (directory-files emagician-dir t))))
    (match helm-c-match-on-file-name helm-c-match-on-directory-name)
    (keymap . ,helm-generic-files-map)
    (candidate-transformer . emagician/helm-ct-is-org-file)
    (help-message . helm-generic-file-help-message)
    (mode-line . ,helm-generic-file-mode-line-string)
    (type . file)))

(defun emagician/helm-ct-is-org-file (candidates)
  (remove-if-not (lambda (c)
                   (and (string= (substring c -4) ".org")
                        (not (string= (substring (file-name-nondirectory c) 0 2) ".#"))))
                 candidates))


(defun emagician/helm-emagician-dir () 
  "List all the org files in the Emagician dir"
  (interactive)
  (helm :sources emagician/helm-c-source-files
        :candidate-number-limit 40
        :buffer "*emagician-|-+-|-files*"))

(global-set-key (kbd "S-<f3>") 'emagician/helm-emagician-dir)
票数 1
EN

Stack Overflow用户

发布于 2012-10-03 21:57:39

下面是一个稍有不同用于组织扩展的预过滤器。

代码语言:javascript
复制
(require 'helm-cmd-t)

(defvar my-org-folders (list  "~/org")
  "my permanent folders for helm-mini")

(defun helm-my-org (&optional arg)
  "Use C-u arg to work with repos."
  (interactive "P")
  (if (consp arg)
      (call-interactively 'helm-cmd-t-repos)
    (let ((helm-ff-transformer-show-only-basename nil))
      (helm :sources (mapcar (lambda (dir)
                               (helm-cmd-t-get-create-source-dir dir))
                             my-org-folders)
            :candidate-number-limit 20
            :buffer "*helm-my-org:*"
            :input "org$ "))))
票数 3
EN

Stack Overflow用户

发布于 2012-10-03 20:47:52

您可以通过利用helm-cmd-t库更好地解决这个问题。它以递归方式将目录打包为存储库,您可以将其用作源。

它理解如何非常快速地读取大量DVCS repos。

默认功能并不完全是您想要的,但是您可以很容易地利用这些机制来满足您的所有需求。

例如,我在这里定义了一个命令,它将两个repos添加到默认的helm-mini源文件中。

代码语言:javascript
复制
(require 'helm-cmd-t)

(defvar my-mini-folders (list  "~/src/ember/data" "~/src/ember/ember.js")
  "my permanent folders for helm-mini")

(defun helm-my-mini (&optional arg)
  "my helm-mini.  Use C-u arg to work with repos."
  (interactive "P")
  (if (consp arg)
      (call-interactively 'helm-cmd-t-repos)
    (let ((helm-ff-transformer-show-only-basename nil))
      (helm :sources (nconc (list
                             helm-c-source-buffers-list
                             helm-c-source-recentf
                             helm-c-source-buffer-not-found)
                            (mapcar (lambda (dir)
                                      (helm-cmd-t-get-create-source-dir dir))
                                    my-mini-folders))
            :candidate-number-limit 20
            :buffer "*helm-my-mini:*"))))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12672186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档