w3m に現在行表示

追記: このオプション普通にあるし! display_lineinfo 。

w3m で文章読んでると現在何行目を読んでるかわからなくて、それだとあとどのくらい時間がかかるかとかがわかりにくくて困ったりします。気持ち的には常に表示して欲しいので、適当にパッチ。

Index: display.c
===================================================================
RCS file: /cvsroot/w3m/w3m/display.c,v
retrieving revision 1.69
diff -u -r1.69 display.c
--- display.c   15 Jul 2004 16:32:38 -0000      1.69
+++ display.c   25 Nov 2006 22:58:04 -0000
@@ -342,6 +342,11 @@
 #endif
     Strcat_charp(msg, " <");
     Strcat_charp(msg, buf->buffername);
+    if (buf->currentLine && buf->lastLine) {
+       Strcat(msg, Sprintf(" (%d/%d)",
+                           buf->currentLine->real_linenumber,
+                           buf->lastLine->linenumber));
+    }

     if (s) {
        int l = COLS - 3 - sl;

追記: 元のパッチは、ダメかなーどきどき、と思ってたんですがやはりコア吐いたので(カラのファイルを読めなかった)修正しました。つまり currentLine とか lastLine の NULL チェックをするようにしたというような。

w3m で現在指してる画像の URL をコピー

したい時がたまにあります。通常のリンクのコピーの場合は、私の場合、 xclip を用いて、

keymap M EXTERN_LINK "echo -n %s | xclip"

などとしています。同じように、

keymap M-i VIEW_IMAGE "echo -n %s | xclip"

などとできれば画像 URL のコピペができるな、と思いました。よってパッチ。関数の位置変えたので差分大きいですがたいしたことはしてません…

Index: main.c
===================================================================
RCS file: /cvsroot/w3m/w3m/main.c,v
retrieving revision 1.252
diff -u -r1.252 main.c
--- main.c	29 May 2006 12:42:22 -0000	1.252
+++ main.c	25 Nov 2006 20:15:30 -0000
@@ -2985,35 +2987,6 @@
     on_target = TRUE;
 }
 
-/* view inline image */
-DEFUN(followI, VIEW_IMAGE, "View image")
-{
-    Line *l;
-    Anchor *a;
-    Buffer *buf;
-
-    if (Currentbuf->firstLine == NULL)
-	return;
-    l = Currentbuf->currentLine;
-
-    a = retrieveCurrentImg(Currentbuf);
-    if (a == NULL)
-	return;
-    /* FIXME: gettextize? */
-    message(Sprintf("loading %s", a->url)->ptr, 0, 0);
-    refresh();
-    buf = loadGeneralFile(a->url, baseURL(Currentbuf), NULL, 0, NULL);
-    if (buf == NULL) {
-	/* FIXME: gettextize? */
-	char *emsg = Sprintf("Can't load %s", a->url)->ptr;
-	disp_err_message(emsg, FALSE);
-    }
-    else if (buf != NO_BUFFER) {
-	pushBuffer(buf);
-    }
-    displayBuffer(Currentbuf, B_NORMAL);
-}
-
 static FormItemList *
 save_submit_formlist(FormItemList *src)
 {
@@ -4992,6 +4965,45 @@
     displayBuffer(Currentbuf, B_FORCE_REDRAW);
 }
 
+/* view inline image */
+DEFUN(followI, VIEW_IMAGE, "View image")
+{
+    Line *l;
+    Anchor *a;
+    Buffer *buf;
+    char *browser;
+
+    if (Currentbuf->firstLine == NULL)
+	return;
+    l = Currentbuf->currentLine;
+
+    a = retrieveCurrentImg(Currentbuf);
+    if (a == NULL)
+	return;
+
+    browser = searchKeyData();
+    if (browser != NULL && *browser != '\0') {
+	ParsedURL pu;
+	parseURL2(a->url, &pu, baseURL(Currentbuf));
+	invoke_browser(parsedURL2Str(&pu)->ptr);
+	return;
+    }
+
+    /* FIXME: gettextize? */
+    message(Sprintf("loading %s", a->url)->ptr, 0, 0);
+    refresh();
+    buf = loadGeneralFile(a->url, baseURL(Currentbuf), NULL, 0, NULL);
+    if (buf == NULL) {
+	/* FIXME: gettextize? */
+	char *emsg = Sprintf("Can't load %s", a->url)->ptr;
+	disp_err_message(emsg, FALSE);
+    }
+    else if (buf != NO_BUFFER) {
+	pushBuffer(buf);
+    }
+    displayBuffer(Currentbuf, B_NORMAL);
+}
+
 DEFUN(extbrz, EXTERN, "Execute external browser")
 {
     if (Currentbuf->bufferprop & BP_INTERNAL) {

なんか色々溜まってきたけど、 w3m-dev とかに提案してみた方がいいのかなぁ…

Titanion の Makefile for Linux

TitanionMakefile ですが、いつものことながら template の巡回参照めんどくさいなぁ…と思っていたところ、まとめてコンパイルすれば通るよ、と教えていただいので(いや、もともとわかっていたことではあったはずなのですが、例のごとく記憶喪失ですっかり失念してました)、 Makefile を置いておきます。ちなみに内容はほぼ Makefile.gr と似たようなものです。

http://shinh.skr.jp/dat_dir/Makefile.ttn

むしろ私以外に需要があったんだーという感想があったりもしたりします。そして私は WINE でやるという。 isshiki さん ABA さんゲーは今度まとめて LinuxMakefileOSX バイナリを揃えたいとは思っているのですがなかなか…すいません。

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h