4

これはこの質問に関連しています:

使用方法 -emacs-helm-list-offer-files-in-current-directory-as-options

しかし、現在のディレクトリからファイルを追加するのではなく、helm-mini が常にファイルを提供するディレクトリの固定リストを取得できるようにしたいと考えています。理想的には、特定の拡張子を持つファイルだけを保持できるようにしたいと考えており、これを再帰的に実行したいと考えています (実際には 1 層だけの深さです)。

4

3 に答える 3

3

これは、org拡張機能のプレフィルターとは少し異なるテイクです。

(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$ "))))
于 2012-10-03T13:57:38.910 に答える
2

helm-cmd-tライブラリを活用することで、より適切に解決できます。ソースとして使用できるリポジトリとしてディレクトリを再帰的にパッケージ化します。

多くの DVCS リポジトリを非常に高速に読み取る方法を理解しています。

デフォルトの機能は、ここで求めているものとまったく同じではありませんが、機械を簡単に活用してすべての要件を満たすことができます。

たとえば、ここでは、デフォルトの helm-mini ソースに 2 つのリポジトリを追加するコマンドを定義しています。

(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:*"))))
于 2012-10-03T12:47:51.947 に答える
1

どうぞ。このコードを使用して、特定のディレクトリ内のすべての組織ファイルを一覧表示しています。すべてのファイルを一覧表示する場合は、ソースの候補トランスフォーマー行を削除し、emagician/helm-ct-is-org-fileを削除します。

ソース/変数/関数の名前も変更することをお勧めします。;)

編集: helm-cmd-tを覗いてくれたおかげで修正されました

注:これはヘルムソースを作成する上での私の最初の本当の亀裂であり、この実装はおそらくひどいものです。また、より一般的な問題(特定のディレクトリからのファイルに基づいてヘルムソースを構築する)ではなく、私の問題(1つですべての組織ファイルを直接検索するだけ)を具体的に解決します。

(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)
于 2012-10-02T02:54:24.870 に答える