xyzzyからpukiwikiを検索する

ひらメソッドでソースを読んでいると、不便だったのでxyzzyからpukiwikiを検索できるようにした。

xyzzyの音 検索xyzzy で選択範囲 (セレクション) を Google 検索を参考に.xyzzyに以下を追加する。

;pukiwiki
(defun search-pukiwiki (&optional str)
  (interactive)
  (unless str
    (setq str (read-string "pukiwiki: ")))
  (long-operation
    (let ((url (concat "http://192.168.100.2/wiki/index.php?cmd=search&type=ANDq&word="
                       (si:www-url-encode str))))
      ;─────────────────────
      ; 1. 標準ブラウザを使う場合
      (shell-execute url t)
      ; 2. browser.dll & browserex.l を使う場合
      ;(bx::navigate url)
      ; 3. www-mode を使う場合
      ;(www-open-url url)
      ; 4. 指定したブラウザを使う場合
      ;(call-process (concat "C:/usr/local/MozillaFirebird/MozillaFirebird.exe " url))
      ;─────────────────────
      )))
(defun search-pukiwiki-selection ()
  (interactive)
  (search-pukiwiki (if (pre-selection-p)
                     (selection-start-end (beg end)
                       (buffer-substring beg end))
                   nil)))

(add-hook '*post-startup-hook*
        #'(lambda()
            (insert-menu-item *app-popup-menu* 0 nil "pukiwiki"
                 'search-pukiwiki-selection nil)))

pukiwikiはデフォルトだと負荷対策のためPOSTでしか検索できないので、GETで検索できるようにplugin/search.inc.phpを書き換える必要がある。

// Allow search via GET method 'index.php?plugin=search&word=keyword'
// NOTE: Also allows DoS to your site more easily by SPAMbot or worm or ...
+define('PLUGIN_SEARCH_DISABLE_GET_ACCESS', 0); // 1, 0
-define('PLUGIN_SEARCH_DISABLE_GET_ACCESS', 1); // 1, 0
<form action="$script?cmd=search" method="get">
 <div>
+  <input type="hidden"  name="cmd" value="search" />
  <input type="text"  name="word" value="$s_word" size="20" />

参考:pukiwikiのBugTrack

pukiwikiは1.4.7です。