Kazuhiro's blog
ようこそ! Kazuhiro's blog
金曜日, 7月 21 2017 @ 11:38 午後 JST
 記事を友人にメールする 印刷用画面 

Texinfoで日本語pdfを作成する

general

細田さんが作業された、「Texinfoで日本語PDFを生成」をLookupとWanderlustのドキュメントでやってみました。そのままではクロスリファレンスの部分が日本語化されていないので、一部変更したものを使ってみました。 実際にやったことは変更したファイル (texinfo.tex, texinfo-ja.tex, txi-ja.tex) をダウンロードし、.texiファイルに若干の修正を加えただけです。

修正内容は

  1. ファイルの先頭にある\input texinfo\input texinfo-jaにし、texinfo.texを直接読み込まずにtexinfo-ja.texを読み込むようにする。
  2. ファイルの文字コードをutf-8にし、ファイルヘッダ (Emacs用の coding cookieや@documentencodingコマンドの引数等) もそれに合わせる。

だけでした。Debian (sid) とW32TeXのLuaTeXで確認しています。 尚、インデックスや見出しに日本語等の非ASCII文字を含む場合 (Lookupのドキュメントが該当します)、texindexコマンドはTexinfo 6.0以降のものである必要があるはずです (W32TeXのtexindexは対応していません。私はMSYS2texindexを使いました)。作成されたWanderlustの日本語ドキュメントをおいてみました (pdf, 3.2MB) ので興味のある方はご覧ください。

 記事を友人にメールする 印刷用画面 

x-gzip64 decoder for FLIM on Emacs24

general

Emacs24で実装された、zlibサポートを利用したx-gzip64エンコードのデコーダです。 今更FLIMに入れるのもどうかという気もしますので、ここで公開しておきます。

;; x-gzip64 decoder
(when (and (fboundp 'zlib-available-p) (zlib-available-p))
  (eval-after-load "mel-g"
    '(progn
       (mel-define-method mime-decode-region (start end (nil "x-gzip64"))
         (save-excursion
           (save-restriction
             (narrow-to-region start end)
             (let ((mb enable-multibyte-characters))
               (set-buffer-multibyte nil)
               (base64-decode-region (point-min) (point-max))
               (zlib-decompress-region (point-min) (point-max))
               (set-buffer-multibyte mb)))))

       (mel-define-method mime-decode-string (string (nil "x-gzip64"))
         (with-temp-buffer
           (set-buffer-multibyte nil)
           (insert string)
           (base64-decode-region (point-min) (point-max))
           (zlib-decompress-region (point-min) (point-max))
           (buffer-string)))

       (mel-define-method mime-write-decoded-region (start end filename
                                                           (nil "x-gzip64"))
         "Decode and write current region encoded by gzip64 into FILENAME.
START and END are buffer positions."
         (interactive "*r\nFWrite decoded region to file: ")
         (let ((coding-system-for-read 'binary)
               (coding-system-for-write 'binary)
               (buffer (current-buffer)))
           (with-temp-buffer
             (set-buffer-multibyte nil)
             (insert-buffer-substring buffer start end)
             (base64-decode-region (point-min) (point-max))
             (zlib-decompress-region (point-min) (point-max))
             (write-region (point-min) (point-max) filename)))))))

タグ: Emacs Wanderlust

 記事を友人にメールする 印刷用画面 

cld4-epw-20150508 is released

general

cdae2-epwを作成されたクサガメさんが、Cambridge Learner's Dictionary 4th Editionに付属のCD-ROMの内容を、EBStudioで変換できるようにするためのPerlスクリプトを公開されています。

 記事を友人にメールする 印刷用画面 

Re: wanderlust で GMail 風、新着レス順にソート

general

元ネタはMatsubaraさんの記事fumiさんの記事および2ちゃんねるから。

エラーの原因は最初の(cdr x)(cddr x)の誤りであるからだったような気がしますが、詳細は忘れました。fletを取り除いたり、速度も(多分)速くしたものを公開しておきます。 condition-caseは二つともいらない気がしますが、wl-summary-overview-entity-compare-by-dateがそうなっているので合わせておきました。

(defun wl-summary-overview-entity-compare-by-reply-date (a b)
  "Compare entity A and B by latest date of replies."
  (let ((fx
         #'(lambda (x)
             (let* ((number (elmo-message-entity-number x))
                    (list (cons number
                                (wl-thread-entity-get-descendant
                                 (wl-thread-get-entity number))))
                    max time)
               (while list
                 (when (condition-case nil
                           (elmo-time-less-p
                            max
                            (setq time
                                  (elmo-message-entity-field
                                   (elmo-message-entity
                                    wl-summary-buffer-elmo-folder (car list))
                                   'date)))
                         (error nil))
                   (setq max time))
                 (setq list (cdr list)))
               max))))
    (condition-case nil
        (elmo-time-less-p (funcall fx a) (funcall fx b))
      (error nil))))
(add-to-list 'wl-summary-sort-specs 'reply-date)

尚、実用上はメッセージの時刻をわざわざ比較せずともメッセージ番号の比較で十分だと思いますので、下記のコードを利用して、reply-numberでソートするのが速度的には有利です。

(defun wl-summary-overview-entity-compare-by-reply-number (a b)
  "Compare entity A and B by latest number of replies."
  (let ((fx #'(lambda (x)
                (setq x (elmo-message-entity-number x))
                (apply 'max x (wl-thread-entity-get-descendant 
                               (wl-thread-get-entity x))))))
    (< (funcall fx a) (funcall fx b))))
(add-to-list 'wl-summary-sort-specs 'reply-number)

タグ:Wanderlust Emacs

 記事を友人にメールする 印刷用画面 

ELECOM USB 3.0対応メモリーリーダライタの罠

general

がんばっておもしろおかしく書こうかと思いましたが10秒で挫折したので結論だけ。

ELECOMのUSB 3.0対応メモリーリーダライタはコンパクトフラッシュ Type IIには対応していません。 私が買ったMR3-C002のパッケージの表には対応メディアにMicro Driveと書かれ、パッケージ裏の対応メディアの一覧やニュースリリースにもコンパクトフラッシュ (Type II) とかマイクロドライブなども記載されていますが、開口部の厚みが足りないのでType IIのカードは物理的にささりません。 WEBサイトで公表している対応表にだけは正しい情報が記載されていますが、製品紹介のページやオンラインショップの製品情報などは訂正されていません。

ちなみに、約1年後に発表された新製品Type IIカードが刺さらない (JPG)のは明らかですが、対応しているとニュースリリースには書かれています。

(記載内容はこの記事を書いた時点でのものです。)

(追記) 画像を添付しました。ちなみに、CF Type IIの厚みは5mmです。

(追記その2) 2013/11/28付けの対応表 (pdf) ではCF Type IIとマイクロドライブは対応していることになっているので、新製品の発表時には本当に気づいていなかったのかもしれません。

(追記その3 2014/02/19) MR3-A006については家電量販店ではパッケージに対応メディアの一覧を修正するシールが貼られているのを確認しました。他の製品については製品自体が無かったので不明です。 また、オンラインショップの製品紹介は修正されていません。

 記事を友人にメールする 印刷用画面 

cdae2-epw is released

general

まだテストバージョンとのことですが、 the Cambridge Dictionary of American English, Second Editionに付属のCD-ROMをEBStudioで変換できるようにするためのPerlスクリプトをクサガメさん公開されています。

タグ: EBStudio EPWING CDAE2

 記事を友人にメールする 印刷用画面 

SEMI-EPGで自動verifyを抑制する

general

SEMI-EPGで、鍵をauto retrieveされると困る人がいるようなので。 直接の解では無いですが、SEMIと同様に、自動でverifyを行わないようにさせる設定です。

(eval-after-load "semi-setup"
  '(eval-after-load "mime-view"
     '(when mime-setup-enable-epg
        (mime-add-condition
         'preview
         '((type . application)
           (subtype . pgp-signature)
           (body . invisible)
           (body-presentation-method . mime-preview-application/*-signature))
         'with-default "mime-pgp"))))

(2014/01/31 追記) 手元のものではmime-pgp-verify-when-previewnilにすることでSEMIと同様の動作になるようにしました。

タグ: SEMI-EPG Wanderlust

 記事を友人にメールする 印刷用画面 

FLIMの新機能

general

私的に使用しているFLIMの改造版wanderlust/flim@githubに取り込まれたので、新機能について簡単に解説します。

built-in GnuTLSによるSMTPでのSTARTTLS接続のサポート

Emacs24以降ではGnuTLSライブラリの組み込みがサポートされていますが、これが有効になっている場合にはSMTPでのSTARTTLS接続に利用されます。 この機能を明示的に無効にしたい場合は変数smtp-use-gnutlsnilに設定してください。

RFC2231準拠なエンコーダの取り込み

flim-1_14-rfc2231-encoderブランチの変更をマージし、非アスキー文字からなる添付ファイル名はRFC2231に準拠した形ででエンコードするようにしました。

LIMITっぽいエンコーダの実装

非アスキー文字からなる添付ファイル名に対してOutlookのようなエンコードを行うエンコーダを実装したのかLIMITから取り込んだのかすっかり忘れてしまいましたが、とにかく入ってます。 ただし、通常は有効にされていません。 例えば以下の様にmime-header-encode-method-alistの値を設定してください。

(setq mime-header-encode-method-alist
      '((eword-encode-Content-Disposition-field-body-broken-mime
         Content-Disposition)   
        (eword-encode-Content-Type-field-body-broken-mime Content-Type)
        (eword-encode-address-list
         Reply-To From Sender Resent-Reply-To Resent-From
         Resent-Sender To Resent-To Cc Resent-Cc Bcc Resent-Bcc
         Dcc)
        (eword-encode-in-reply-to In-Reply-To)
        (eword-encode-structured-field-body Mime-Version User-Agent)
        (eword-encode-unstructured-field-body)))

応用・注意点

  • 例えば以下の様にmime-header-encode-method-alistの値を設定すると、いわゆるDatula方式っぽくエンコードを行えます。

    (setq mime-header-encode-method-alist
          '((eword-encode-Content-Disposition-field-body Content-Disposition)
            (eword-encode-Content-Type-field-body-broken-mime Content-Type)
            (eword-encode-address-list
             Reply-To From Sender Resent-Reply-To Resent-From
             Resent-Sender To Resent-To Cc Resent-Cc Bcc Resent-Bcc
             Dcc)
            (eword-encode-in-reply-to In-Reply-To)
            (eword-encode-structured-field-body Mime-Version User-Agent)
            (eword-encode-unstructured-field-body)))
    
  • 現時点では、SEMI-EPG以外のSEMIおよびそのvariantではメールの再編集の際にファイル名のパラメータの一部が保持されません。

タグ:Wanderlust FLIM

 記事を友人にメールする 印刷用画面 

ldoce5-fpw-20120824 is released

general

音声・画像などに対応したldoce5-fpwの改造版を隆さんが公開されています。 phrasal verbも検索できるようになっているそうです。 私が公開しているoald7-fpwにはその機能はありませんが、私以外に使用者がいるのか不明なoald7-fuwではphrasal verbやidiomも条件検索から検索できるようになっています。 oald7-fpwに反映されていないのは自分で使っていないので面倒になっただけだったと思いますが、記憶に自信がありません。

最近はWanderlust周りをいじっていることが多いですが、たまには辞書関連の話題も書いておきます。

タグ:LDOCE5 EPWING

 記事を友人にメールする 印刷用画面 

サマリバッファの文字化け (Wanderlustの)

general

MLに投稿されていた、サマリバッファのキャッシュが正しく保存されない問題についてですが、WanderlustのMLが早めに終了してしまったようなので、 (だいたい) 自分で調べた内容を記録しておきます。 encode-coding-regionの動作がおかしいというところまでが前提です。

src/coding.cにあるCODING_DECODE_CHARマクロのコメントには以下のように書かれています。

/* This wrapper macro is used to preserve validity of pointers into
   buffer text across calls to decode_char, which could cause
   relocation of buffers if it loads a charset map, because loading a
   charset map allocates large structures.  */

これによると、charset mapが読み込まれると、bufferのrelocationが生じる可能性があります。 このコメントにはdecode_charについてのみ書かれていますが、encode_charや、char_charsetについてもcharset mapが読み込まれる、すなわち、bufferのrelocationが生じる可能性があります。 しかし、エンコーダ (encode_coding_iso_2022等) はそれを考慮していない為、実際にrelocationが生じると不適切な場所へエンコードした結果を書き込んでしまいます。 このバグを持つ Emacs に関しては、

(defadvice encode-coding-region
  (before avoid-relocation (start end coding) activate)
  (encode-coding-string (buffer-substring start end) coding))

等のようにして、encode-coding-region内でcharset mapが読み込まれないようにすれば回避できます。

Emacsに対するパッチも一応投稿していますが、反応が無いのでどうなるのかよく分かりません。

(追記) WanderlustのMLは広瀬さんが引き継がれて再開しました。 新しい投稿アドレスはwl@ml.gentei.orgです。

(追記その2) encode-coding-regionのバグはtrunkで修正されました。 半田さんありがとうございます。

タグ:Wanderlust