emacs-21.2の大量にある.el(.elc)ファイルをgzipで圧縮して置きたいのですが、emacs起動時に解凍しながら起動させる方法がありましたら教えてください。OSはSolaris8です。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:watal No.1

回答回数130ベストアンサー獲得回数0

「大量にある.el(.elc)」がどういうものかわかりませんが、何かのオリジナルで作られたLispの設定ファイル集なのでしょうか。

それらの内容を全て.emacsや.emacs.el(c)に展開することで、起動時に読み込ませることは出来ませんか?

”emacs”コマンドにエイリアスを張って、

gzipコマンドで圧縮したファイルを.emacs、もしくは.emacs.el(c)に全て展開したのち、emacsを起動させてはどうでしょうか。

id:aioi

返答ありがとうございます。

今回の目的は、ディスク使用容量を削減するため、

[install-dir]/share/emacs/ 以下のLispファイル等を圧縮して置きたいと考えております。今回頂いた解決案では利用しないファイルまでが一度に展開されてしまうことになり、emacs起動時にシステムにかかる負荷が大幅に増加してしまいます。これを回避するために必要なファイルをその都度展開して利用する方法を取りたいと思うのですが。

現在auto-compression-modeを使っての展開と他のバージョンと全く同一のファイルに対してシンボリックリンクを張ることで容量の削減に努めていますが、この展開方法ではロード時に展開できないファイル(日本語入力モード時にロードされる[install-dir]/share/emacs/21.2/leim/quail/japanese.elc等)があり、こういったファイルの自動圧縮・展開方法か、またはこういったファイルの圧縮をあきらめるために、どのファイルがauto-compression-modeを通さずにロードされるのかを説明してあるような所があったらうれしいのですが。。。(英語か日本語しか読めませんが)

現在debug-on-errorを使ってエラーが起きる都度、圧縮ファイルを展開して置くという手探り状態です。

2003/02/11 10:33:41
id:watal No.2

回答回数130ベストアンサー獲得回数0

ポイント30pt

http://emacs-20.ki.nu/mailing-list.shtml

Mailing List for Emacs-20

なるほど。失礼しました。

私のレベルでは申し訳ありませんが、ご回答を提示できませんので、上記の

各種Emacs関連MLに問い合わせては如何でしょうか。

id:aioi

メーリングリストの過去ログを調べてみるという手を忘れてました。

emacs-21用のメーリングリストもあるようですのでそちらも見てみようかと思います。

2003/02/11 14:30:21
id:takot No.3

回答回数0ベストアンサー獲得回数0

ポイント10pt

ディスク容量がどれだけなのかは分かりませんが、手元のSolaris環境では[install-dir]/share/emacs 以下のファイルは100MBほどありました。

Emacs21が起動時にこれらのファイルを読み込むのは「必要」なことであって、それを起動ごとに毎度毎度展開するのは非現実的に思えます(Emacsにまかせないでスクリプトか何かでやると、複数ユーザが使ったときにどうするの? という問題もあり)。また実際にそれが行われるのであれば、大容量のメモリがない限りはswapに展開されるわけですよね。

swapとuserlandは普通は別パーティションになっていると思いますが、標準のEmacs Lispを削ることを考えなければならないような状況であれば、いずれにせよディスクの状況は厳しいのでしょう。

またシンボリックリンクで節約されているようですが、せっかくならハードリンクの方がささやかながらもうちょっと節約できます。

.elと.elcの両方があるなら.elを消すという手もあります。あとで.elを読みたくなったときはちょっと困りますが。

どうしてもEmacs-21.2を使わなくてはいけないのでしょうか。ディスクを節約するのなら古い日本語Emacs、たとえばngやNEmacsを利用するのではいけませんか?

EmacsとはCPU,memory,diskといった資源をたくさん使うことを覚悟の上でインストールするものだと私は思うので、ちょっと不思議な質問に見えました。

id:aioi

お返事ありがとうございます。

わたしも当初、emacs起動時に必須のLispファイルは数多く存在するものと思っておりました。しかし疑問に思いemacs起動時のファイルアクセスを調べてみたところ、わたしの環境ではemacs起動時にアクセスされるLispファイルはターミナル上でスクロールせずに表示できる程度しかありませんでした。ということは、これは物凄くムダに資源を使用しているのではないかと考えたわけです。起動するたびに数十MBのLispファイルを読み込むようなら圧縮はどうかと考えてしまいますが、起動に必要なLispファイルは数えるほどしかなく、他のLispファイルはユーザが使用中にその都度呼び出されるだけのようで、軽く数種類のプログラムを書くような程度では殆んどのLispファイルは呼び出されることはないようです。

ユーザが要求した時だけswap領域に展開して使えるのであれば、普段数十MBのファイルを半分以下の容量に圧縮して置くだけの価値は十分にあるのではないかと思います。すべてのLispファイルを圧縮させることは不可能ですが、起動時に展開しながら読み込めるLispファイルはすべて圧縮して置きたいと考えています。

わたしにはこれを実現するための方法として、auto-compression-modeをonにすることしかイメージできず、emacsはauto-compression-modeをonにしても圧縮したLispファイルを展開せずに読もうとすることがあり、そのファイルのリストがわからないために手探りで悩んでいます。

たしかにemacsを入れているのですからディスクの使用容量にケチケチするな、と思いますが、試しに圧縮してみたところ、emacsの使用する容量が半分以下と劇的に削減できたため、これはぜひとも使わなければと考えたところです。

2003/02/11 15:39:35
id:yy-2002 No.4

回答回数32ベストアンサー獲得回数0

ポイント30pt

この中の TinyPath.el で実現できるようなのですが...

1. ソース

ftp://ftp3.sourceforge.net/pub/sourceforge/tiny-tools/emacs-tin...

を展開して, その中にある

emacs-tiny-tools-2002.0805/lisp/tiny/

以下を適当なディレクトリー

(たとえば, ~/Emacs/tiny/) におきます

2. ~/.emacs に下記のような設定を書きます

(setq load-path (cons ”~/Emacs/tiny” load-path))

(setq tinypath-:compression-support ’all)

(setq tinypath-:load-path-root load-path)

(require ’cl)

(load ”tinypath”)

3. 環境変数 USER=(アカウント名) を設定し

Emacs を起動します.

これで, tiny/* 以外の lisp (.el, .elc) を

gzip しても, load / autoload できるというのですが, 当方の Emacs 環境で試したところ, まだ *.el.gz を読み込みに成功していません. (自分の環境で成功していない方法を紹介するのは心苦しいのですが...)

tinypath.el の使い方については,

この「Compressed lisp file support」のセクションを参照ください.

id:aioi

ご返答ありがとうございます。

IN ORDER TO USE THE FULL COMPRESSION SUPPORTと期待が持てそうなのですが、続くFOR AUTOLOAD FUNCTIONSというところが引っ掛ります。ご紹介いただいたHPでの方法はjka-comprとの兼ね合わせで圧縮されたファイルをロードしているので、試してみましたが、動作としては(auto-compression-mode 1)とした時と同じでした。圧縮されているmy-el.gzを(load ”my-el”)としてロードさせることはご紹介いただいた方法でも(auto-compression-mode 1)でもどちらでもできたのですが、そのどちらも日本語入力を行う時に読み込まれる、圧縮された

[install-dir]/share/emacs/21.2/leim/quail/japanese.elc.gz

は読めませんでした。

エラーは以下の通りです。

Debugger entered--Lisp error: (error ”No Quail package `japanese’”)

signal(error (”No Quail package `japanese’”))

error(”No Quail package `%s’” ”japanese”)

quail-select-package(”japanese”)

quail-use-package(”japanese” ”quail/japanese”)

apply(quail-use-package ”japanese” ”quail/japanese”)

activate-input-method(”japanese”)

toggle-input-method(nil)

call-interactively(toggle-input-method)

この回避策としてわたしが知るものは、

[install-dir]/share/emacs/21.2/leim/quail/japanese.elc.gz

を展開して置くか、コンパイル時にwnn等の指定を行うことで読ませなくするという方法があるのですが、これではどうも気持が悪いというか、すっきりしない感じがあります。

いろいろとありがとうございました。

2003/02/12 13:19:53

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません