2007年6月3日の日記を表示中

2007年 6月 3日 (日)

XEmacs

先日の問題をどうにかしようとXEmacsのソースを眺めてみました.途中

  /* #### fuck me!  who wrote this crap?  think "abstraction", baby. */

とか書いてあってイカス.でもやっぱどうしようも無い雰囲気(´・ω・`)

T60

Firefoxで画像がいっぱい貼ってあるページの表示が突如激重になり,swsusp2の悪影響か!?とか焦ったんですが,よく考えたらカーネル上げた後,ATIのドライバ入れ直すの忘れてただけでした.見たら8.37.6なんてのが出てたのでいつも通りバラして導入.・・・って,これ入れたらまた正常にハイバネーションしなくなるんじゃ・・・(;´Д`)ハァハァ

uim.el

やっぱ今まで通り,全部uim.elが吸い込んで自前で処理する方向でいきますわ.「何かおかしいぞ」という部分は,指摘があったらその都度対処することにしよう.誰も使ってないところを一生懸命作り込んでもしょうがないしね・・・あ,だったらXEmacsのサポ(ry

で,help-char判定をuim.el側でやってみたんですが,簡単と見せかけて実は相当面倒くさいこと判明.とりあえず prefix-help-command にデフォルトで設定されている describe-prefix-bindings 関数は,中で this-command-keys を呼んでるんですが,この関数,Cで書いてあって,関数が返してくる値をlisp側から書き換える方法が無いっぽい・・・(;´д`).だもんで,ここは fset と symbol-function を使って関数そのものを一時的に差し替えるとかそんなのをやることにしました.↓こんな雰囲気.keyvecはuim.elが横取りしたキーベクトル.

(let (this-command-keys-original 
      (mode uim-mode))
  (fset 'this-command-keys-original
	(symbol-function 'this-command-keys))
  (unwind-protect
      (progn
	(fset 'this-command-keys 
	      '(lambda ()
		 keyvec))
	(setq uim-mode nil)
	(funcall prefix-help-command))
    (progn
      (fset 'this-command-keys 
	    (symbol-function 'this-command-keys-original))
      (setq uim-mode mode))))

ちなみに,↑の外側でやってる help-charかどうかの判定は↓な感じ.「keyvecの最後はhelp-charですか?」ということを調べたいだけなのに,XEmacs側はなぜこんなことになってしまうのかと・・・_|‾|○

(or (and uim-emacs
	 (= help-char (aref (uim-last-onestroke-key keyvec) 0)))
    (and uim-xemacs
	 (equal (uim-xemacs-make-event 
		 (uim-convert-char-to-symbolvector (key-description help-char)))
		(aref (uim-last-onestroke-key keyvec) 0))))

上記を追加したことで,C-x C-h とかを横取りした際にちゃんとC-xのヘルプが表示されるようになりました.ふぅ・・・.

が,テストしてるうちに,上記対策をとると FSF Emacsの方で f1 C-h した際に,uim.elがONだと「You have typed <f1>」の「<f1>」の部分が表示されないことが判明.help-macro.elを読むに,この部分は this-command-keys から生成しているんで,上記変更で問題ないはずなのになぜ?と思って追ってみたら,f1 C-h には help-for-help なるコマンドがバインドされてました・・・.何この統一性の無さは.というわけで,this-command-keys を差し替える処理を他数ヶ所にも埋め込み,こちらも一応解決.特に問題なさそうだったんでcommit.

ちなみに,XEmacsでシフト矢印が効かない問題は未解決だったり.これまたソース追わないとわからなそうで・・・.トホホ.

Emacs

なんかEmacsネタばっかだなぁ.multi-ttyのブランチの方は大変いい感じで,uim.elの方のバージョンチェックを23に対応させればちゃんと動いてくれました.というわけでこっちもcommit.

それはそうと,uim.elのテスト用にEmacs-21系入れ直そうと思ったらビルド通りませんorz.leimのバイトコンパイルでこけている模様・・・.

Byte-compile the created files by:
  % emacs -batch -f batch-byte-compile XXX.el
if [ -f quail/CCDOSPY.elc ]; then true; else \
         EMACSLOADPATH=/home/compile/emacs-21.4/leim/../lisp ../src/emacs -batch --no-init-file --no-site-file --multibyte  -l /home/compile/emacs-21.4/leim/../lisp/international/quail \
          -f batch-byte-compile quail/CCDOSPY.el quail/Punct.el quail/QJ.el quail/SW.el quail/TONEPY.el quail/4Corner.el quail/ARRAY30.el quail/ECDICT.el quail/ETZY.el quail/Punct-b5.el quail/PY-b5.el quail/QJ-b5.el quail/ZOZY.el; fi
Fatal error (11)./bin/sh: line 2: 30177 セグメンテーション違反です  EMACSLOADPATH=/home/compile/emacs-21.4/leim/../lisp ../src/emacs -batch --no-init-file --no-site-file --multibyte -l /home/compile/emacs-21.4/leim/../lisp/international/quail -f batch-byte-compile quail/CCDOSPY.el quail/Punct.el quail/QJ.el quail/SW.el quail/TONEPY.el quail/4Corner.el quail/ARRAY30.el quail/ECDICT.el quail/ETZY.el quail/Punct-b5.el quail/PY-b5.el quail/QJ-b5.el quail/ZOZY.el
make[1]: *** [quail/CCDOSPY.elc] エラー 139
make[1]: ディレクトリ `/home/compile/emacs-21.4/leim' から出ます
make: *** [leim] エラー 2

試しにCFLAGSに設定してる最適化オプションを切ってみたら通った・・・.ぬぬぬ,「-O3 -march=i686 -mtune=nocona」がダメだというのか? 一つずつ切ってみた結果,「-O3」がよろしくないことがわかりました.「-O2」なら平気らしい.ふーん.

2007年6月3日の日記を表示中

中の人情報

名前:
nosuke (のすけ)
メール:
sasugaanijaのgmail.com
「の」は「@」みたいな
関連リンク:

カレンダー

2007年6月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

<<先月分

翌月分>>

最新の10件のエントリ

最近の10件のコメント

過去ログ