1

私は独自の Emacs 環境を開発し始めています。ユーザー ディレクトリからライブラリをロードし、インストールされたディレクトリを無視するカスタムの init.el (以下を参照) があります。Amusement または Mail Lisp ライブラリを User ディレクトリに配置していませんが、それらはまだオートコンプリート リストに表示されています。これは、オートロード関数として定義されているためです。これらの自動ロード関数が作成されないようにするにはどうすればよいですか? これは面倒で無駄が多いため、不要な機能を個別に削除したくありません。

不要な機能に関するヘルプ情報。

5x5 is an interactive autoloaded Lisp function.

It is bound to <menu-bar> <tools> <games> <5x5>.

私のinit.el;

(setq inhibit-defaul-init 1)

(setq load-path (list 
     (expand-file-name "~/.emacs.d/")
     (expand-file-name "~/.emacs.d/lisp/")
     (expand-file-name "~/.emacs.d/lisp/emacs-lisp/")
     (expand-file-name "~/.emacs.d/lisp/eshell/")
     (expand-file-name "~/.emacs.d/lisp/net/")
     (expand-file-name "~/.emacs.d/lisp/nxml")
     (expand-file-name "~/.emacs.d/lisp/org")        
     (expand-file-name "~/.emacs.d/lisp/term")
     (expand-file-name "~/.emacs.d/lisp/textmodes")
     (expand-file-name "~/.emacs.d/lisp/usrl")
     (expand-file-name "~/.emacs.d/lisp/")
    )
)
4

2 に答える 2

3

通常の関数をバインド解除できるのと同じ方法で、オートロードされた関数をバインド解除できるため、次5x5のように実行中のシステムから他の不要なオートロード関数を効果的に削除できます。

(mapc
 (lambda (func) (fmakunbound func))
 '(5x5 5x5-crack-randomly 5x5-crack-mutating-current 5x5-crack-mutating-best 5x5-crack-xor-mutate 5x5-crack))

自動ロードされた変数の場合、makunbound代わりにfmakunbound.

可能性のある容疑者のリストを取得するには、次を使用できます

  • M-x find-library RET loaddefs RET
  • M-x occur RET ^(autoload RET

loadhistライブラリも興味深いかもしれません。

編集:

実際、autoload ファイルを検査することは、何かを削除したいかどうかを確認するためのかなり安全な方法のように思えます。ただし、これは関数でのみ使用できると思います。私が見る限り、他の種類の自動ロードされるオブジェクトは、loaddefs によってすぐに定義されます。シンボル名に基づいて仮定を立てることもできますが、私はお勧めしません (しかし、私はこれを何もしないので、YMMV です)。

(defvar my-unwanted-libraries
  '("5x5" "snake" "hanoi" "tetris")
  "Unbind all autoloaded functions for these libraries.")

(defun my-unbind-unwanted-autoload-functions ()
  "Unbind all unwanted autoloaded functions."
  (interactive)
  (do-symbols (symbol)
    (let* ((function (and (fboundp symbol)
                          (symbol-function symbol)))
           (file (and function
                      (consp function)
                      (eq (car function) 'autoload)
                      (cadr function))))
      (when (and file (member file my-unwanted-libraries))
        (fmakunbound symbol)))))
于 2012-06-09T02:17:30.480 に答える
2

ほとんどの Emacs は Emacs Lisp で書かれており、可能な限り自動ロードされるため、自動ロード用に設定された関数を簡単に削除することはできません。たとえば、c++-modeは自動ロードされた関数であるため、すべての自動ロードされた関数を削除すると、使用できなくなりc++-modeます (独自のコピーを追加した場合を除く)。

おそらく、あなたが求めていることを行う最善の方法は、独自の Emacs 実行可能ファイルを作成し、Emacs 実行可能ファイル自体に入れるものを制限することです。これはここに文書化されています。不要なディレクトリ/ライブラリを削除して再構築するだけです。新しく生成された autoload ファイルには、これらのライブラリ内の関数への参照が含まれていないため、準備は完了です。

注: Emacs で使用されているライブラリを、知らないうちに削除してしまう可能性があります。たとえば、M-x report-emacs-bug電子メールを使用します...

これらの自動ロードされた関数を削除したい特定の理由はありますか? 補完が散らかっていると感じた場合は、表示内容をカスタマイズするために使用できる多数の補完ライブラリがあります。

于 2012-06-08T23:08:44.853 に答える