[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Meadow などの Emacs ではいろいろな機能が emacs-lisp という言語で書かれていま す. これは人間が普通に読んだり編集することのできるファイルです.そのため,ユーザ が簡単に変更でき,一次的な設定も手軽に行うことができるという利点があります.
しかし,動作が少し遅いという欠点があります.これは, Emacs が設定ファイルを読み込 み, Emacs 内部でパソコンが理解できる形式に変換する作業を行っているためです.
そこで, バイトコンパイルという仕組みがあります. 要はコンパイルという作業をして, あらかじめパソコンが理解しやすいファイルを作っておき,速度を速くしてやろうという ものです.バイトコンパイルすると,拡張子は elc になり中を見ても読むことのできな い形式になります.
ただし, elc というバイトコンパイルされたファイルがあると, Meadow は必ず elc ファイルを読み込みます.そのため, el ファイルを変更しても,バイトコンパイル しない限り elc には反映されませんので,設定は有効にはなりません.この点には十分 注意してください.
個人の設定ファイルなどは,バイトコンパイルして体感できるほどの差を感じることはあ まりなく,上記のような副作用もあるため,バイトコンパイルしないことをお勧めします.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
まずは,バイトコンパイルする方法から紹介します.
単純な方法は M-x byte-compile-file として, ファイルを選ぶ方法です.バイト コンパイルするファイルが少ない時に利用します.
バイトコンパイルするファイルが多い時には,一個一個ファイル名を指定するなんて面倒 です.そこで, dired からバイトコンパイルする方法があります.
そのために dired でファイルを選び, B を押します.これで,バイトコンパイル できます.複数のファイルをバイトコンパイルするためには,mでファイレウにマー クをつけて,Bとするとマークをつけたファイルをすべてバイトコンパイルができ ます.
M-x byte-recompile-directory とすると,指定したディレクトリでバイ トコンパイルが必要なファイルをすべてバイトコンパイルができます.
meadow -batch -f batch-byte-compile *.el
のようにコマンドラインからバイトコンパイルすることもできます.
以下で実際に設定ファイルをバイトコンパイルして運用する方法をいくつか紹介します.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Emacs 標準の機能を使う方法です. 設定ファイルをいくつかに分割しておき, それを特定 のディレクトリに保存しておきます.
そして,.emacs に以下のような設定を書いておきます.
(byte-recompile-directory "~/mylisp/") (load "~/mylisp/startup") |
こうしておくと, 1 行目で,~/mylisp/ 下のファイルの中でバイトコンパイルが必要な ファイルがバイトコンパイルされます.そして, 2 行目のようにその設定ファイルを読 み込むように設定しておきます.
例えば ~/mylisp/startup.el に
(load "~/mylisp/.meadow2") (load "~/mylisp/.font") (load "~/mylisp/.screen") |
といった風に書いておきます.
こうしておけば,必ずバイトコンパイルしてから設定ファイルを読み込むようになります.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
これは *.el ファイルの方が新しければバイトコンパイルするための設定です. ただし, apel がないと動きません.
(require 'bytecomp) (require 'path-util) (defun load-after-bytecompile (file) (let ((compiled-file-name "")) (if (not (string-match "\\.el$" file)) (setq file (concat file ".el"))) (setq file (file-installed-p file)) (setq compiled-file-name (byte-compile-dest-file file)) (if (file-installed-p compiled-file-name) (if (file-newer-than-file-p compiled-file-name file) (load-file compiled-file-name) (if (byte-compile-file file t) () (error "Can't compile")) ) (if (byte-compile-file file t) () (error "Can't compile")) ))) |
.emacs の設定を別ファイルにし,
(load-after-bytecompile "filename")
|
という風に使ってください
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
.emacs を保存時にバイトコンパイルする設定です. 以下を, .emacs に追加します.
(add-hook 'after-save-hook (function (lambda () (if (string= (expand-file-name "~/.emacs.el") (buffer-file-name)) (save-excursion (byte-compile-file "~/.emacs.el")))))) |
これで保存時にバイトコンパイルしてくれます.
あるいは, .emacs の最後に以下を追加しても同様のことができます.
;;; Local Variables: ;;; after-save-hook: (lambda () (byte-compile-file (buffer-file-name))) ;;; End: |
これを設定すると,ファイルを開く時に有効にするかどうかを確認されます.というのも, これを悪用すると,「~/」以下を消去といったことも可能だからです.
(setq enable-local-eval t) |
とすると,聞かれることはなくなりますが,危険です.ちなみに,デフォルトは「'maybe 」です.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
以下の設定を .emacs に追加して, M-x byte-compile-this-fileとすれば, 現在の バッファのファイルをバイトコンパイルしてくれます.
(defun byte-compile-this-file () "Compile current-buffer-file of Lisp into a file of byte code." (interactive) (byte-compile-file buffer-file-name t)) |
[ << ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |