5

質問は1に似ています。

ただし、達成可能なすべてのサブディレクトリをフォルダーに配置することも異なります。

第 1 レベルのフォルダーを実現可能にする Jouni のコード

(let ((base "~/Projects/emacs"))
  (add-to-list 'load-path base)
  (dolist (f (directory-files base))
    (let ((name (concat base "/" f)))
      (when (and (file-directory-p name) 
                 (not (equal f ".."))
                 (not (equal f ".")))
        (add-to-list 'load-path name)))))

ディレクトリとそのすべてのサブディレクトリをEmacsのload-pathに配置するにはどうすればよいですか?

4

3 に答える 3

9

他の質問での私の答えは、複数レベルのサブディレクトリを処理します。

参考にしたコード

(let* ((my-lisp-dir "~/.elisp/")
       (default-directory my-lisp-dir)
       (orig-load-path load-path))
  (setq load-path (cons my-lisp-dir nil))
  (normal-top-level-add-subdirs-to-load-path)
  (nconc load-path orig-load-path))
于 2009-04-27T00:12:40.397 に答える
1

これは、調整可能なヘルパー関数を使用する Jouni の回答の適応です。

ヘルパー関数の利点の 1 つは、予想外のことを実行したときにトレースできることです。これは純粋な関数であるため、ロード パスに副作用がないためです。normal-top-level-add-subdirs-to-load-path を使用してみましたが、その中のすべてが非常に副作用があり、予測不可能な特殊変数に依存しているため、クリーンで新鮮なものを書く方が簡単でした. 私の答えはinodeを使用していないため、効率が悪い可能性があることに注意してください。

このアプローチの 2 つ目の利点は、無視するファイルを調整できることです。

(defun add-to-load-path-with-subdirs (ディレクトリとオプションの endp)
  (let ((newdirs (lp-subdir-list ディレクトリ)))
    (if endp (setq load-path (load-path newdirs を追加))
      (setq ロードパス (nconc newdirs ロードパス)))))

(defconst +lp-ignore-list+
  (リスト "CVS" ".git" ".svn" ".." "."))

(defun lp-subdir-list (base &optional ignore)
  (無視しないと
    (setq ignore +lp-ignore-list+))
  (let ((保留中 (リストベース))
 (retval nil))
    (保留中
      (let ((dir (保留中のポップ)))
 (プッシュ dir retval)
 (dolist (f (ディレクトリ-ファイル dir))
   (let ((name (concat dir "/" f)))
     (when (and (not (member f ignore))
         (ファイル ディレクトリ p 名))
       (プッシュネームは保留中)
       (プッシュネームretval))))))
    (reverse retval)))
于 2010-03-09T19:28:35.593 に答える
0

簡単な答え:

 (normal-top-level-add-subdirs-to-load-path)
于 2011-01-15T01:53:32.387 に答える