top  Index  Search  Changes  RSS  Login

BrokenMenu

howm のメニューが壊れるバグ. バイトコンパイル時にマクロをマクロと見抜けないのが原因だった模様.


修正済 (2004-08-15 23:03:47)

howm のテスト版にアップすると、下記のエラーが出ます。make test でも howm-directory さえ設定すれば発生します。

Debugger entered--Lisp error: (invalid-function (macro lambda (&rest body) (\` (progn (setq buffer-read-only nil) (erase-buffer) (\,@ body) (set-buffer-modified-p nil) (setq buffer-read-only t)))))
 howm-rewrite-read-only-buffer(nil (t howm-after-save) nil)
 howm-menu-refresh("d:/home/howm/0000-00-00-000000.howm" 1 "*howmM:%menu%*")
 howm-menu-open-sub("d:/home/howm/0000-00-00-000000.howm" 1 "*howmM:%menu%*")
 howm-menu-open("d:/home/howm/0000-00-00-000000.howm" 1 "*howmM:%menu%*")
 howm-keyword-search-open-menu("%menu%" #<window-configuration>)
 howm-keyword-search("%menu%")
 ad-Orig-howm-menu(nil nil)
 howm-menu()
* call-interactively(howm-menu)

メニューも

= <<< %menu%
%"c"[新規] %"D"[複製] 検索(%"s"[固定] %"g"[正規] %"m"[roma])
%"a"[一覧] %"l"[最近] %"A"[前後] %"y"[予定] %"t"[Todo] [全消]
%"K"[題↑] [名↑] %"d"[日↓] %"i"[鍵↓] %"r"= <<< %menu= <<< %menu%
%"c"[新規] %"D"[複製] 検索(%"s"[固定] %"g"[正規] %"m"[roma])
%"a"[一覧] %"l"[最近] %"A"[前後] %"y"[予定] %"t"[Todo] [全消]
%"K"[題↑] [名↑] %"d"[日↓] %"i"[鍵↓] %"r"= <<< %menu%
%"c"[新規] %"D"[複製] 検索(%"s"[固定] %"g"[正規] %"m"[roma])
%"a"[一覧] %"l"[最近] %"A"[前後] %"y"[予定] %"t"[Todo] [全消]
%"K"[題↑] [名↑] %"d"[日↓] %"i"[鍵↓] %"r"= <<< %menu%
%"c"[新規] %"D"[複製] 検索(%"s"[固定] %"g"[正規] %"m"[roma])
%"a"[一覧] %"l"[最近] %"A"[前後] %"y"[予定] %"t"[Todo] [全消]
%"K"[題↑] [名↑] %"d"[日↓] %"i"[鍵↓] %"r"= <<< %menu%
%"c"[新規] %"D"[複製] 検索(%"s"[固定] %"g"[正規] %"m"[roma])
%"a"[一覧] %"l"[最近] %"A"[前後] %"y"[予定] %"t"[Todo] [全消]
%"K"[題↑] [名↑] %"d"[日↓] %"i"[鍵↓] %"r"= <<< %menu%
%"c"[新規] %"D"[複製] 検索(%"s"[固定] %"g"[正規] %"m"[roma])
%"a"[一覧] %"l"[最近] %"A"[前後] %"y"[予定] %"t"[Todo] [全消]
%"K"[題↑] [名↑] %"d"[日↓] %"i"[鍵↓] %"r"[更新] [menu 更新] [menu 編集]

といった風に大変なことになってます。

  • 2004-07-01 (木) 01:20:12 名無しさん : 大変なことになってますけど, 手元じゃ再現できませんでした. バージョン(make test で表示される一式)と具体的な再現方法((setq howm-directory ○○)とか)を教えていただけるとうれしいです.
  • 2004-07-01 (木) 01:20:39 名無しさん : ad-Orig-howm-menu って何ですかね? (defadvice howm-menu …) とかしてます?

howm の設定は

  (setq howm-directory "~/data/howm/")

だけです。

howm: test040618
Emacs: 21.3.1
system: windows-nt
window system: w32
Meadow: Meadow-2.10-dev (ASAGAO)

1.1.2.1 なら動作したので、とりあえず追跡しつつ古いのを使ってます。

  • 2004-07-02 (金) 02:21:43 作者 : meadow ユーザの方にお願い: ↑の症状が再現するかどうか, 試していただけないでしょうか. win の環境構築がおっくうで, 自分でやってみる気合がなかなか… _o_

やってみました。設定は

(global-set-key "\C-c,," 'howm-menu)
(setq howm-directory "~/data/howm/")
(mapc (lambda (f)
    (autoload f "howm-mode" "Hitori Otegaru Wiki Modoki" t))
      '(howm-menu howm-list-all howm-list-recent howm-list-grep
                     howm-mode
                     ))

だけです。howm にメモは 0 の状態で試しました。howm はtest040701 のものです。エラーは

Debugger entered--Lisp error: (invalid-function (macro lambda (&rest body) (\` (progn (setq buffer-read-only nil) (erase-buffer) (\,@ body) (set-buffer-modified-p nil) (setq buffer-read-only t)))))
  howm-rewrite-read-only-buffer(nil (t howm-after-save) nil)
  howm-menu-refresh("d:/akihisa/data/howm/0000-00-00-000000.howm" 1 "*howmM:%menu%*")
  howm-menu-open-sub("d:/akihisa/data/howm/0000-00-00-000000.howm" 1 "*howmM:%menu%*")
  howm-menu-open("d:/akihisa/data/howm/0000-00-00-000000.howm" 1 "*howmM:%menu%*")
  howm-keyword-search-open-menu("%menu%" #<window-configuration>)
  howm-keyword-search("%menu%")
  howm-menu()
* call-interactively(howm-menu)

と出て、メニューはエラーが出るものの正常に出ました。ただし、2回連続でメニューを出そうとすると、

= <<< %menu%
 %"c"[新規] %"D"[複製] 検索(%"s"[固定] %"g"[正規] %"m"[roma])
 %"a"[一覧] %"l"[最近] %"A"[前後] %"y"[予定] %"t"[Todo] [全消]
 %"K"[題↑] [名↑] %"d"[日↓] %"i"[鍵↓] %"r 750
-- 
[menu 更新][menu 編集]

のようになってしまいます。どうも750のところに以降の文章が隠れてしまっているようです。ナローイングとかになってるのかな。。。

  • 2004-07-02 (金) 22:00:18 ユーザーZ : 報告だけですが、以下の環境で問題なく動いています。こんなに楽しく便利なものを公開していただいて、作者様には感謝。
howm-test040701
Meadow-2.10-dev (ASAGAO) svn:revision=3325
GNU Emacs 21.3.1 (i386-mingw-windows98.3000)
of 2004-06-30 on iam
    • 2004-07-03 (土) 20:12:57 ユーザーZ : make && make install で インストール、ChangeLog Memo との併用方式、1日1ファイル、下みたいな感じの基本設定です。test040703 でもオッケーでした。
(setq howm-menu-top nil) ; メニューをメモ扱いしない
(setq howm-menu-file "~/menu.howm")
(setq howm-directory "~/iam/howm/")
(setq howm-file-name-format "%Y/%m/%Y_%m_%d.howm") ; 1日1ファイル
    • 2004-07-03 (土) ユーザーZ 20:24:53 : 上記と同じ基本設定、下記バージョンの Meadow でメニューが正常に表示されることを確認しました。
Meadow-2.00pre2 (KIKYOU)
GNU Emacs 21.1.1 (i386-mingw-windows98.3000)
of 2004-06-25 on iam
howm-test20040703
  • 2004-07-03 (土) 06:02:55 作者 : thx. 手元にあった emacs-21.3.1 でも Meadow-2.00 Beta1 でも再現できなかったんで, Meadow-2.10-dev を入れてみるかなあってとこです.
  • 2004-07-03 (土) 06:04:31 作者 : (1) howm をどうインストールしたか (特に, make && make install したかどうか), (2) ~/data/howm/ の中身 (特に, ~/data/howm/0000-00-00-000000.howm の有無), (3) Meadow のバージョン(特に, 2.10-dev 以外でも発症するか), を教えていただけると助かります
  • 2004-07-03 (土) 06:08:24 作者 : つっついててバグ一個は発覚したけど, ↑とは別物っぽい…
  • 2004-07-03 (土) 16:07:14 作者 : meadow-2.10-dev でも再現できませんでした ;_;
   (setq load-path (cons "z:/gomi/howm-test040703" load-path))
   (setq howm-directory "z:/gomi/karappo")
   (set-language-environment "Japanese")
   (set-default-coding-systems 'euc-jp)
   (set-buffer-file-coding-system 'euc-jp)
   (set-terminal-coding-system 'euc-jp)
   (set-keyboard-coding-system 'euc-jp)
   (setq howm-menu-lang 'ja)
   (require 'howm-mode)
   (setq howm-ja-dir "z:/gomi/howm-test040703/ja")
   (howm-menu)
    • で, ふつうにメニューが表示されました
  • 2004-07-06 (火) 21:18:32 名無しさん : というわけで, 発症した方, どうやったら再現できるか助言がほしいです

でも同じ症状が発症します. make & make install はしていません.インストールは*.el等のコピーのみです.

(byte-recompile-directory "~/elisp/" 0)

を.emacs.elの最初でしているのですが,この際,

In howm-xemacsp:
howm-common.el:213:26:Warning: reference to free variable `xemacsp'
howm-common.el:221:1:Error: Symbol's function definition is void: howm-xemacsp

と出て,howm-commonだけ,*.elcが作成されません. この状態(howm-common.elcだけが存在しない.他の*.elcは存在する)だと,同じ症状が発症します.

byte-compileをEmacsの起動時にしないで,全てのhowm-*.el が *.elのみの状態にしておくと症状は発生しません.

emacs起動後

(byte-compile-file "~/elisp/..../howm-common.el")

して,howm-common.elcを作っても やはり症状は発生します.

  • 2004-08-12 (木) 22:14:12 名無しさん : howm-xemacsp をさしかえてみました(howm-1.2rc3)。どないでしょう?
  • 2004-08-12 (木) 23:02:20 名無しさん : 1.2rc3試しました.やはりhowm-commonだけbyte-compileに失敗します.

.emacs.elを

;; emacs.el
(setq load-path (cons "~/elisp/howm" load-path))
(byte-recompile-directory "~/elisp/howm" 0)

のみにしてEmacsを起動

Compiling file himitsu/howm/howm-common.el at Thu Aug 12 23:01:34 2004
In howm-first-n:
howm-common.el:195:29:Warning: Function `subseq' from cl package called at
   runtime
howm-common.el:223:1:Error: Symbol's function definition is void: howm-xemacsp

とエラー発生. howm-common以外は,*.elcが作成される.この状態で,C-c,,すると,Menuの描写が乱れる

byte-compileなしだと,howm正常動作.

.emacs.elを

(setq load-path (cons "~/elisp/howm" load-path))
(require 'howm)
(byte-recompile-directory "~/elisp/howm" 0)

のみにした場合はbyte-compile成功.howmも正常動作.

  • 2004-08-13 (金) 03:13:07 名無しさん : thx. 再現しました. howm-1.2rc4 で今度こそ?
  • 2004-08-13 (金) 10:44:36 名無しさん : howm-1.2rc4でbyte-compileは成功するようになり,全ての*.elcが作成されるようになりました.ありがとうございます.しかし,

.emacs.elを

;; emacs.el
(setq load-path (cons "~/elisp/howm" load-path))
(byte-recompile-directory "~/elisp/howm" 0)

で,byte-compileした状態だと,以前として,C-c,,を2回すればMenu表示が乱れます.エラーメッセージも最初の報告者と同様なものが表示されています.

.emacs.elを

(setq load-path (cons "~/elisp/howm" load-path))
(require 'howm)
(byte-recompile-directory "~/elisp/howm" 0)

のみにして,byte-compileした場合は,howmは正常動作します. 一回だけ,後者のようにbyte-compileすれば動作には問題がないので,特に困ってるというわけではありませんが...

  • 2004-08-14 (土) 07:45:55 名無しさん : 再現しました. わかりやすいヒントありがとうございます. というわけで howm-1.2rc5
  • 2004-08-14 (土) 20:02:11 名無しさん : howm-1.2rc5でなおりました.作者さんありがとう.

  • 2004-08-15 (日) 23:44:26 名無しさん : わかってみれば, 手掛りは最初から提示されてましたね. あちこち見当はずれをやらかしてしまいました _o_
  • 2004-08-21 (土) 02:42:11 名無しさん : 反省こめて補足. 手掛り = 「マクロ howm-rewrite-read-only-buffer の引数が, マクロ展開より先に評価されてる」. これは「マクロ」っていうより「関数」の評価順序.
  • 2004-08-21 (土) 02:43:00 名無しさん : このマクロは別のファイルで定義されてた. 呼び出し側のファイルを単独でバイトコンパイルすると, これがマクロだなんてわかるはずもなく, 関数扱いされてしまった模様. というわけで, 定義側ファイルを明示的に require して解決.
  • 2004-08-21 (土) 02:43:08 名無しさん : バイトコンパイルしなければ起きないし, Makefile の手順でバイトコンパイルしても起きないんで, 発覚が遅れた.
(Please LogIn to post comments.)

Last modified:2008/03/09 14:08:11
Keyword(s):
References:[修正済]