錯誤試行

PCや生活の試行錯誤の成果を報告するブログ

Emacs26でpukiwiki-mode.elを動作させる


目次



(2021/2/28 emacs26で動作確認した件を追記)

Emacsからwikiシステムであるpukiwikiを編集できるpukiwiki-modeという拡張機能があり、大変便利に使用していた。
そろそろEmacsのバージョンを上げようと思い、Emacs23からEmacs24に変えてpukiwiki-modeを使用しようとしたところ、「PukiWiki のテキストが見つかりません」と表示され、ページ一覧画面から編集画面や閲覧画面に入ることができなかった(ページ一覧画面も色分けされずに表示される)。これはemacs24でmake-local-hook関数が廃止された影響とのこと。emacs23に戻したところ正常に動作した。

試行錯誤するも不具合は改善しない

「M-x pukiwiki-edit」を実行して直接ページ名を指定すれば編集画面に入ることはできるが、ポスト操作した後に"Getting form data... done"のまま処理が返って来ない。
文末に挙げた参照サイトの記述によると、pukiwiki-mode.elからmake-local-hookの行を削除すれば良いようだが、やってみたところ一覧ページから編集画面に入れるようにはなったがポスト後に処理が戻らない現象はそのままだった。
今のところはemacs23を使い続ければ良いが、pukiwiki-mode(emacs)無しでpukiwikiを編集する気にはなれないので、将来的にどうしたものか。

追記(Emacs26で動作を確認)

上記不具合に困ってしばらく放置していたが、どうにかしようと試行錯誤しローカルホストのPukiwiki 1.5.1(UTF-8版)とEmacs26で一応動作を確認したので手順を以下に述べる。
なお、Pukiwiki公式サイトの編集に使えるか試してみたところ「PukiWiki のテキストが見つかりません」と言われてページの一覧が取得できなかった(検索すると出てくるhttps対応パッチを当ててみると、読み込みそうだが「Args out of range: "", 1」のエラーが出てやはり読み込めなかった)。

  • pukiwiki-mode.elの編集
  • MELPAからhttp.elを入れる
  • http.elに2002年のhttp.elから以下の箇所をペーストする

    ;; derived from url.el
    (defconst http-url-unreserved-chars
      '(
        ?a ?b ?c ?d ?e ?f ?g ?h ?i ?j ?k ?l ?m ?n ?o ?p ?q ?r ?s ?t ?u ?v ?w ?x ?y ?z
        ?A ?B ?C ?D ?E ?F ?G ?H ?I ?J ?K ?L ?M ?N ?O ?P ?Q ?R ?S ?T ?U ?V ?W ?X ?Y ?Z
        ?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9
        ?$ ?- ?_ ?. ?! ?~ ?* ?' ?\( ?\) ?,)
      "A list of characters that are _NOT_ reserve in the URL spec.
    This is taken from draft-fielding-url-syntax-02.txt - check your local
    internet drafts directory for a copy.")
    
    ;; derived from url.el
    (defun http-url-hexify-string (str coding)
      "Escape characters in a string.
    At first, encode STR using CODING, then url-hexify."
      (mapconcat
       (function
        (lambda (char)
          (if (not (memq char http-url-unreserved-chars))
              (if (< char 16)
                  (upcase (format "%%0%x" char))
                (upcase (format "%%%x" char)))
            (char-to-string char))))
       (encode-coding-string str coding) ""))
    

以上で使えるようになったが、不具合などあっても責任は持てないので自己責任でどうぞ。