Hatena::ブログ(Diary)

こんなに月も紅いのに このページをアンテナに追加 RSSフィード

2012年3月5日(月)

outline-treeのマルチフレーム対応

0.2.3.4も来たので転がしてみる



(require "outline-tree/outline-tree")

(ni-autoload)

より先に

(require "outline-tree-multiple-frames")

しちゃって下さい。

まだ各フレームで取り敢えず表示できる程度にしか実装できていません。

app-menu(上部メニュー)やpopup-menu(右クリックメニュー)はほぼそのままなので全然駄目々々です。

私的には常時表示でキーボード操作しかしないんで問題なくてですね(ぉぃ

2012年2月24日(金)

マルチフレーム版へ移行したどー

タイトルの通りマルチフレーム版こと0.2.3系に移行した。その時の産物をぶちまける。


multiple-frames-fix.l

私は他人の作ったスクリプトは可能な限り弄りたくなかったので関数の上書きやラップで対応した。

私の使ってるsite-lispで干渉する物が大体これくらいだった。

厳密にはまだあるけど、使用頻度少ないし起動できるので後回し。

簡単なラップ化

やってる事は滅茶苦茶だけどね

hashで保存されてる*app-menu*を別の所に残して、(get-app-menu)したのを*app-menu*入れて(funcall)して戻ってきたらhashに戻す。

意外とこんなんで行けた( ;谷)

browserex, buf2html, csv-mode, ggrep, multiple-replace, outline-tree2, py-mode, tterm, reference.chm, xtal-mode が該当。

条件付きラップ

si::*fset, guidgen-setup-menuとguidgen-remove-menu を弄った。

si::*fsetとか弄りたくなかったが…まぁ、ifが混じっただけなんで大丈夫でしょう。多分。

katex, guidgen が該当。

関数上書き

save-session-info を弄った。

session-ext が該当。

流用時の注意点
(when (consp (member :multiple-frames *features*))
  (require "multiple-frames-fix"))

という感じで出来るだけ早く読み込む。

(ni-autoload)使ってる人はmultiple-frames-fix.lのreference.chmの部分は切り取って(ni-autoload)の後でやる事。

(provide)されてないから再度上書きされちゃいますねん…

browserexとoutline-tree2のメニューが(make-frame)したフレームには出ないのを修正

outline-tree2をメインのフレームしかツリー表示はないが何となく動くように修正




以降は昔作ったものも含めてごっちゃり

siteinit.l

でか過ぎて困るw

app-menu2.l

メニューバーを英語にしたかった。それだけ。

実害がないのでまだ直してないがマルチフレーム版ではうまく動作してない('A

修正した

ctags2.l

メニュー対応

(setq *ctags-read-tags-alist*
      ; ("Project directory" . "Tags directory")
      '(("~/work/" . "~/work")
        ("~/work2/" . "~/work2")
        ))

.xyzzyとかで上記のような感じに定義すると配下のフォルダでは使用場所を読むようにした。

meadow-func.l

適当にmeadowキーバインドされてる関数を拾ってみた。

○○-mode-hookで

(make-local-variable 'ed::local-help-variable)
(setf ed::local-help-variable *ahk-html-help-file*)

とか

(make-local-variable 'ed::local-help-variable)
(setf ed::local-help-variable 'gauche-find-ref-asap))

って感じでchmのパス文字列関数にするとF1 .でとかやってる。

siteinit.lも並べて見た方が良いかな。

mercurial-cygwin.l

mercurial.lでcygwinmercurialを使いたかった。

…正直今となっては微妙かもと思ってる

tterm2.l, cygterm.l

http://git.io/MH8rHg

utf-8対応とかメニュー登録とかその辺

tterm.lに修正を加えNAXELに登録した(マルチフレーム版以外でも動作可)

hideif2.l

ctags2同様プロジェクトごとに規定設定を作りたかった

(setq *hide-ifdef-parameter-alist*
      ; ("Project directory" ("Include directory list") ("Define list") ("Undefine list"))
      '(("~/work"
         ("~/work/include"
          "~/work/include/xxlib")
         ("WIN32" "_WINDOWS")
        ("~/work"
         ("~/work/headers")
        ))

こんな感じ。

outline-tree-ctags.l

outline-treeに表示されるctags属性をcやfじゃなくclassやfunctionと表記されるようにしたかった。それだけ。

2012.04.03バージョンのlist-kindsが5.7J1から取ってきたからか私のと随分違ったので無理やり修正した

module-definition-mode.l

dll作る時の.def用。色付けしたかっただけ。

colordiff-mode.l

.diffとか.patch用。

便利だがcontext形式だけはregexp-keyword-listで対応できないので辛い。

まぁ、unified形式の方がそもそも好きなんで。

あとがき

多分私が自作したのはこれくらいだと思う。

質問やらなんやらがあるならコメでも呟きでも。



siteinit.lにはかなり色んな物が転がってるかと。うちの会社が

void main()
{
	#define AAA

	if( true )
	{
		func1();
	}
	#ifdef AAA
	func2();
	#else
	func3();
	#endif

	#undef AAA
}

みたいなプリプロセッサのインデントを指定されてるんで頑張っのとか、

VB.netに可能な限り対応してみたりとか

hg-modeをmqやらhgflowやら対応させてたりとか



マルチフレームの感想

しかし*app-menu*にhashを保存せずに別の所に保存してselected-frameが変更されたりとかした時に随時*app-menu*を更新みたいな感じは無理だったのかぬぅ。まぁ、対応できたんで問題ないけど。

個人的に気になるのは起動時のウィンドウサイズはどうにかならないものかと…

元々xyzzy.exeで複数起動した際には常にiniから位置やサイズを取得してたのに、

(make-frame)だとWindowsデフォルトサイズ(?)になっちょる。都度広げるのがマンドクセ

あとframeの持ち方の変更のせいだろうね、outline-tree2にフォーカスが行ってる時にマウスでフォーカス戻らないや…今度調べる。