更新履歴兼雑記 - Wheel

最新のものはこちら
03.10.09

[Wheel]: graphviz と Hiki でサイトマップ

まるでまじめなお子さんのWikiのようだ

全部はっつけるとでかいので一部だけ。 ソース。 ダメダメな出来栄え。無茶な大きさになるのです。 一応クリッカブルマップになっていてリンクを辿れたりします (けど僕はそんな機能いらない)。 でもそのクリッカブルマップはずれまくっています (けど僕は使わないから気にしない)。 ていうか僕はこんなプラグインいらない。 そろそろ img タグ 10回は使った気がします。

03.10.08

[Wheel]: graphviz と Hiki

思うところあって 画像生成は一回しか行わない mimetex.rbを作りました。 mimetex というディレクトリを hiki.cgi の層に掘る必要があります。

んで、一回しか生成しないならそれなりに重い処理もアリだなーと思って、 最近個人的に関わりの強い Graphviz プラグインを。 dot.rb。 出力は以下のような感じ。

継承ツリー

ごめんなさい。上下逆。 ごめんなさい。Graphviz をまだ日本語化してません。 ごめんなさい。やる気ないプラグインです。 dot というディレクトリが必要。 入力は以下の通り。

{{dot('class_tree', 'Uranau -> Juu; Uranau -> Kuti; Mise -> Uranau; Mise -> Madare; Hiroi -> Madare; Hiroi -> Mu')}}

次回予告: Graphviz でサイトマップ (予定は未定)

しかし Hiki はいいですね。まだよくわかってませんけど。 html 手書きはいい加減辛いと感じてるんで rd 使ってみたりしたんですけど、 拡張できない(たぶん)のがどうにもきつく感じてました。 Hiki みたいに拡張できる rd は無いものか。 ていうか Hiki の出力エンジンをひっこぬけば良いのかな?

03.10.06

[Wheel]: mimetex と Hiki

至福

mimetex の存在を Zinniaさんに教えてもらいました。幸せすぎ。

一応プラグインの ソース。 上の絵は mimetex の方を黒背景に白字にする改造も施してあります。

03.04.08

[Wheel]: http_filter_proxy.rb

みまごうことなき再生産品。 html を適当にフィルタリングしたいらしいです。 サンプルとして 2ちゃんねるの >> リンクをちょっと便利にしたり、 ttp リンクを補正したり。 ruby で書くと簡単だけどちょっと遅いなあ。

03.02.22

[Wheel]: w3mconf

再生産。またも w3m 系。 ./configure のオプションって色々面倒です。 zsh の補完を使えば随分ラクですが、 設定の数が多いと結構つらい。 で、UI を作ろうと思ったのですが、 インターフェイスの記述は html にやらせて、 処理は local-CGI でやるのはどうかと思ったのです。

で、 w3mconf.cgiw3mconf。 使い方は w3mconf.cgi を file:///$LIB/ に相当する場所、 /usr/lib/w3m なんかに入れる。 w3mconf にパスを通す。 で、./configure する代わりに w3mconf として、 いろいろ設定をした後に submit。 結果を見せてくれるので、気にいらなければ再編集。 気に入れば w3m を終了。 w3mconf したディレクトリに doConfig という 実行ビットの立ったファイルがあるので、 ./doConfig などとすると OK。

02.12.06

[Wheel]: w3m から URL のコピー

車輪の再生産をしたような気がする時は自戒を込めて、 Wheelタグを使うことにする。 以前の再生産品もこのタグに変えておこう。 さて、今日も元気に再生産。

さて、また w3m。 w3m の現在の URL をコピーしたいのだ。 w3m から URL をスクリーンのレジスタにコピーする方法は zinnia さんが述べられている。 ただ問題は、私は emacs は違う Window で動かしているし、 screen のセッションもいっぱい動いていて、この方法は使えない。

じゃあ X のコピーバッファだろう。 コピーバッファに任意の文字列を転送するプログラムは…

ls /usr/X11R6/bin

うん、見つかんない。我ながら何も探してないに等しい。じゃあ再生産だ。 xbuf.c ひどい出来栄えだ。すばらしい。 .w3m/keymap に、

keymap m EXTERN "xbuf %s"
keymap M EXTERN_LINK "xbuf %s"

次、タイトルを同時に取得したい。 URL から wget でとってきて title をパースしたらいいんだけど、 まあ w3m は知ってる情報なんだから w3m をいじる。

etc.c の myExtCommand をそのままいじると 変更個所がいっぱいでてきて面倒だから、

Str
myExtCommand2(char *cmd, char *arg, char* title, char* word, int redirect)

をでっちあげ、main.c の invoke_browser で、

char* word = GetWord(Currentbuf);
if (word != 0) word = shell_quote(word);
cmd = myExtCommand2(browser, shell_quote(url), shell_quote(Currentbuf->buffername), word, FALSE);

こんな感じ。 これで、%t がタイトル文字列に、%w がカーソル下文字列にそれぞれ置換される。 %w はついでだから。DICT_WORD はちょっと使いにくいシーンがあるゆえ。 このへんは w3m-dev でも議論になってたと思うんだけど、 なんで実装されてないのかなあ。 それとも別の方法で実現されてる?

で、これを使ってみると、日本語がダメ。 カットバッファには日本語が通らんわな。 本当は X のセレクションを使うんだろうけど、 もうめんどくさいので、適当にエンコードすればいいだろう。 .w3m/keymap に、

keymap t EXTERN "echo \<a href=\\\"%s\\\"\>`urlcode %t e`\</a\>|xbuf"

ちなみに urlcode は URL encode-decode する小物。 そんで、.emacs.el に、

(defun url-decode-yank ()
  "URL decode and yank."
  (interactive)
  (call-process "urlcode" nil t t (x-get-cut-buffer)))
(global-set-key "\C-q\C-y" 'url-decode-yank)

終わり。

02.12.06

[Wheel]: formula-mode

出力は綺麗じゃなくても良いから、数式を高速に入力したいのです。 板書を写しとれる位の速度で。 かつ、それを見て思考ができるフォーマットで。 つまり、TeX はコンパイル前は可視性に低くてダメ。

で、 ここまで 書いて、分数どうすっかなーとか思ってて、 やっぱりもうちょっと探そうと思って中断した。 だいたい elisp なんて始めてなんだから再生産は分が悪い。

今のところ cc と入力すると γ になって、 もう一度 c を入力すると Γ になったりするらしい。 数式は連続で同じ文字はまず出てこないことを利用したわけ。

02.10.16

[Wheel]: Makefile テンプレート作成ツール。

私は趣味で書いてるコードの七割位が テストコードというか、なんらかのお試しコードな気がする。 で、その時に、

> g++ -o hoge hoge.cc

とか打つのが結構めんどい。 何がめんどいって、hogeが二回あるんだもん。 まあ、

> g++-o () { g++ -o $@ $@.cc }

とかしといたら良いか、とも思ったのだが、 まあ、これじゃ芸が無いってことで小物を作ってみた。 例の如くどこかに似たようなものがあるんじゃないかなあ、 とびくびくしながら。 フィーリングコンパイルツール kati、とその設定ファイル .kati

インストールはパスの通ったところに kati を置いて chmod 755。 後はホームディレクトリに .kati を置くだけ。

結構賢い動きをする。 例えば、

> cd SDL-1.2.4/test 
> kati

だけで、configure もへったくれもなく、たくさんの実行ファイルができる。 当然、.kati の SDL の項目は正しく設定されていないといけないが。

対象を一つにしぼることもできる。 というか当初の目的がこれ。

> kati testsprite

なり、

> kati testsprite.c

これで、testsprite だけをコンパイルできる。

boost/libs/regex/src のように、main が無いファイル群の場合、 オブジェクトファイルだけを作る。

/* a.c */
int a();

int main() {
  return a();
}

/* b.c */
int a() { return 0; }

このような場合、ちゃんと以下のようにやってくれる。

cc -c a.c -g -W -Wall -ansi -pedantic 
cc -c b.c -g -W -Wall -ansi -pedantic 
cc -o a a.o b.o   -g -W -Wall -ansi -pedantic 

.kati に書いてあるのは、各行の一番左が項目名、 残りは項目に対応したオプション。 ソース内のインクルード文に、項目名文字列が含まれている場合、 そのオプションが自動的に指定される。 SDL やら boost がコンパイルできたのはそのため。

明示的に項目を加えることもできる。

> kati SDL
   or
> kati hoge.cc SDL

+ を付けることで、項目を削除することもできる。 例えば testsprite は -W -Wall がうるさいので、

> kati testsprite +w

default という項目名はデフォルトで読み込まれる。 $ で始まるオプションは、その項目名を取り込む。 default は -g -W -Wall -ansi -pedantic になっている。

コンパイルは Makefile を作ることによって行われている。 Makefile.kati という名前で保存されている。 これを Makefile の元にすると楽ができそうだ。

あとコンパイルオプションを付け加えることもできる。

> kati hoge.cc -march=i486

あと、全オプションはフィーリングで CFLAGS と LDFLAGS に分配される。

文法的には、以下のような感じ。

kati [ターゲット] [追加/削除項目] [追加オプション]

んなとこ。 まあ少なくとも私には便利そうだ。 でもあちこちで雑をしているから変な動きもあると思う。

02.09.13

[Wheel]: w3m をいじる。

至高のテキストブラウザ。 Phoenixさんのせいでnetscapeはアンインストールに追い込まれましたが、 w3mはまだまだ私のメインブラウザ。 んでも、前からちょっと欲しかった機能があった。

一つ目。w3m起動中のディレクトリの変更。 連続でダウンロードする時など、 いちいちファイルの先頭に ~/tmp などと書くのは面倒。

二つ目。前後のバッファへの移動。 BACK はバッファを殺しちゃうので元に戻れないので。

三つ目。同時稼働中のw3m間での履歴共有。 同時に起動してるとどうしても欲しい時が。

どれも簡単にできそうだったんで、 既存かどうかよくも調べずサクっと実装してみた。 0.3.1へのパッチ。 昔 w3m-dev見たり、いじってたりてたのですぐにできた。 相変わらず綺麗なんだか汚ないんだかわからんソースだな。 とりあえず全体の設計は非常に綺麗で素直なのでいじりやすくて良い。

今見ると、 三つ目は議論になってるっぽい。 この方法の方が良いかも。

一応仕様。一つ目二つ目は、

keymap C CHDIR
keymap T CHDIR /tmp
keymap B SELECT -1
keymap F SELECT 1

といった具合。三つ目はオプションの中に、 「終了時にのみURL履歴を保存」という項目を追加したので、 これを NO にすると OK。

で、こういうのって既存ですかねえ? とりあえず w3m-dev を久しぶりに片っ端から見るか。


home / index

全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。

shinichiro.hamaji _at_ gmail.com / shinichiro.h