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 とかに提案してみた方がいいのかなぁ…

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