Emacs

Emacs 単体のインストールをした。Cygwin + Emacs はまた別の機会に回す。もちろん、いまさら meadow を入れる気も全然ない。

インストール

Emacs のエディターとしての使い勝手の良さは他のテキスト・エディターには代えがたいので、Windows でも使うことにした。と言うよりも、ホントは Mew を使いたかっただけだが・・。Windows 用バイナリを直接インストールする、と言っても解凍するだけなので何の手間もかからない。

Windows 版 Emacs の入手先

以下に解凍展開する。
c:\Program Files (x86)\emacs-27.1-x86_64
環境変数に Path を通す。

runemacs.exe で起動する。

ユーザーのホーム・ディレクトリに、.emacs.el を置く。またはホームディレクトリにできる .emacs.d フォルダ内に init.el を置くのが正当なのかな。

印刷

印刷のため ghostscript をダウンロード、インストールする。
Windows 版 ghostscript の入手先
gs9533w64.exe をダブルクリックする。

~/.emacs.d/init.el に以下を記述。

;;; 印刷
(setq ps-print-color-p t
        ps-lpr-command "C:/Program Files/gs/gs9.53.3/bin/gswin64c.exe"
        ps-multibyte-buffer 'non-latin-printer
        ps-lpr-switches '("-sDEVICE=mswinpr2" "-dNOPAUSE" "-dBATCH" "-dWINKANJI")
        ps-paper-type 'a4
        ps-font-size 11
        printer-name nil
        ps-printer-name nil
        ps-printer-name-option nil
        ps-print-header nil          ; ヘッダの非表示
        )

YaTeX のインストール

YaTeX の入手先
解凍してできたフォルダを、emacs の site-lisp フォルダにコピーする。フォルダ名を、yatex に変える。

~/.emacs.d/init.el に以下を追記。

(autoload 'yatex-mode "yatex" "Yet Another LaTeX mode" t)

;; YaTeX-mode
(setq auto-mode-alist
      (cons (cons "\\.tex$" 'yatex-mode) auto-mode-alist))

;; YaHtml-mode
(setq auto-mode-alist
      (cons (cons "\\.html$" 'yahtml-mode) auto-mode-alist))
(autoload 'yahtml-mode "yahtml" "Yet Another HTML mode" t)

(setq yahtml-www-browser "firefox") 
;;; firefox.exe の Path を環境変数に書いておくこと

;; Html 編集では自動改行をオフにする(Emacs 全体の設定で自動改行にしている場合)
(setq yahtml-mode-hook
      '(lambda () (auto-fill-mode -1)))

(setq yahtml-kanji-code 3)      ; EUCにする(任意)

日本語入力

日本語入力には何も設定しなくても「Google 日本語入力」がすぐに使える。始めは mozc-emacs-helper が必要かと思ったが、無くてもOK。ただし、変換候補メニューが出るようにするには window をマウスで少しドラッグする必要がある。

~/.emacs.d/init.el のその他の設定

;;ミニバッファのコマンドライン
(setq command-line-default-directory "~/")

;;ウィンドウ分割せず起動する場合は以下が必要
(setq default-directory "~/") 

;;; 一行が 70 字以上になった時には自動改行する
(setq fill-column 70)
(setq text-mode-hook 'turn-on-auto-fill)
(setq default-major-mode 'text-mode)

;; バックアップファイルを作らない
(setq make-backup-files nil)

;;; ステータスラインに時間を表示する
(setq display-time-24hr-format t)
(setq display-time-format "%m/%d(%a) %R")
(setq display-time-day-and-date t)
(setq display-time-interval 30)
(display-time)

;;; Window を分割しないで Emacs を起動する
(custom-set-variables
 '(inhibit-startup-screen t))


Mew

インストール

Windows 版 Mew の入手先
MEW68W2.ZIP を任意の場所で解凍展開する。

mew.ini を書き換える。

[Make]
Full=yes
#CONTRIBS=mew-browse.el
BINS=mewencode.exe mewl.exe mewest cmew smew cmew.exe smew.exe
INFOS=mew.info mew.ja.info
#ADDSRCS=
#BINDIR=
#ELISPDIR=
#INFOPATH=
#OBJS=
#SRCS=
#TEMPFILE=
#ADDBINS=
BINDIR=c:\Program Files (x86)\emacs-27.1-x86_64\bin
ELISPDIR=c:\Program Files (x86)\emacs-27.1-x86_64\share\emacs\site-lisp\mew
INFOPATH=c:\Program Files (x86)\emacs-27.1-x86_64\share\info

環境変数に以下を追加する。

変数: emacs_dir
値: c:\Program Files (x86)\emacs-27.1-x86_64

mew.exe を管理者権限で実行すると、インストールはエラーで終了してしまう。
mew.log を見ると以下の場所でコンパイル(バイト・コンパイル)が失敗している。

Compiling sources...
C:\Program Files (x86)\emacs-27.1-x86_64\bin\emacs.exe -batch -q -no-site-file -l ./temp.el -f mew-compile
system() failed.(1)

原因はわからないが、.elc ファイルさえ作ればインストールが進みそうだ。しかし、いっぱいある .el ファイルを一つずつバイト・コンパイルするのは大変だ。

そこで、この失敗したコマンドを単独で端末から実行してみた。
環境変数に emacs のコマンドパスを追加しておく。

変数: Path
値: C:\Program Files (x86)\emacs-27.1-x86_64\bin

管理者権限でコマンド・プロンプトまたは Windows PowerShell を起動。mew-6.8 フォルダに移動して以下のコマンドを打つ。(以下のmew-6.8 フォルダの場所は一 例です。)

> D:\Temp\mew-6.8> emacs.exe -batch -q -no-site-file -l ./temp.el -f mew-compile

これで、mew-6.8 内に .elc ファイルが全て作られる。

ここで、もう一度、管理者権限で mew.exe を実行する。これで mew のインストールは終わる。必要なファイルは、emacs の指定した場所にすべてコピーされる。

~/.emacs.d/init.el に以下を追記。

;;; Mew の起動設定
(autoload 'mew "mew" nil t)
(autoload 'mew-send "mew" nil t)

ユーザーのホーム・ディレクトリに、.mew.el を置く。インストールのときに解凍したフォルダ内に dot.mew というファイルがあるのでそれをリネームして使えばいい。

Mew の起動時に猫を出すためには、.mew.el の冒頭に以下を記述。

(setq mew-icon-directory "c:/Program Files (x86)/emacs-27.1-x86_64/share/emacs/27.1/site-lisp/mew/etc")

印刷

Mew から印刷する設定。~/.emacs.d/init.el での設定を前提にして、.mew.el に以下の通り記述する。

;;印刷設定
;; ps-print
(setq ps-multibyte-buffer 'non-latin-printer)

(setq mew-print-function (function ps-print-buffer)) ;;# で印刷

ただし、この設定では、メール自体が改行していないばあい、長い行が紙の外にはみ出てしまうという問題が残る。gswin64c のコマンド・オプションで何とかできないかと思ったがダメだった。そこで gswin64c.exe を使わず、ak2pr を使う設定にしてみることにした。

ak2pr のインストール ak2pr の入手先、またはこちら
適当な場所に解凍して、環境変数に Path を通しておく。ak2pr のマニュアルに従ってプリンターを設定する。

ak2pr を使う場合、mew ファイルの文字コードを Shift_JIS に変換しないと文字化けする。そのため、nkf をインストールしておかねばならない。nkfwin32 の入手 とインストール。これも Path を通しておく。

;;印刷設定
;; ps-print (setq ps-multibyte-buffer 'non-latin-printer) ;;(setq mew-print-function (function ps-print-buffer)) ;;# で gswin64c.exe 印刷の場合 (setq-default lpr-command "ak2pr") (setq-default lpr-switches '("-T Mail")) ;; タイトル指定 (setq print-command-format "nkfwin32 -s") ;; Shift_JIS に変換 (defun print-region (begin end) (interactive "r") (shell-command-on-region begin end print-command-format)) (defun print-buffer () (interactive) (print-region (point-min) (point-max))) (setq print-function (function print-buffer)) ;;# で ak2pr 印刷

これで一応、文字がはみ出すことなく印刷できるようになる。ただし、デフォルトだとページのタイトル(メールのファイル名)が文字化けで無意味な英字になるが、気になるときは上の init.el の設定のようにタイトルを英字で任意の言葉に指定しておけばいい。これで印刷は解決。

検索

Windows 版 Hyperestraier の入手。適当な場所に解凍して、Path を環境変数に登録しておく。

検索に HyperEstraier を使おうとしたが、インデックス作成のため kM と打ってもうまく行かない。”searching program: permission denied, mewest” というメッセージが出て終わり。

コマンドラインから

> find $HOME/Mail -type f -regex ".*/[0-9]*" | estcmd gather -cl -fm -cm -xl $HOME/Mail/casket -

と打つと、~/Mail/casket/ が作られたように見えるが、Mew からは、k/ でキーワード入れても何もヒットしない。Hyperestraier の代わりに、Windows Desktop Search を使ってみたが、これも空振り。kM でインデックスさえできていないっぽい(コマンドが完了しない)。外部の検索ツールは使わずに、/ で検索する方法を試すと、英字キーワードならできるが日本語では全くダメ。いろいろ試してみたが、原因も解決策も手がかりなし。

というところで、仕方ないので Cygwin をインストールしてみることにした。Cygwin サイトから setup-x86_64.exe をダウンロード。setup-x86_64.exe をダブルクリックして適当にインストール。

環境変数に以下を記述しておく。

変数: Path
値: C:\cygwin64\bin

Cygwin のターミナル mintty を起動して、mewest と打つと以下の通り、あっさりとインデックスの作成に成功する。要するに、mewest はシェルスクリプトなので、Windows 環境ではデフォルトではコマンドとして使えないということだね。Cygwin は bash.exe を備えているのでシェルスクリプトが使える。

これで、Mew の k/ で Hyperestraier による検索が可能になった。ただし、kM は効かないので、インデックスの更新は Cygwin ターミナルから mewest コマンドを打つしかない。それでは面倒なので、以下のバッチ・ファイルを作って対処した。

mewest.bat

c:\cygwin64\bin\bash -i mewest

このファイルを c:\Program Files (x86)\emacs-27.1-x86_64\bin に置く。これで Mew から kM と打てばインデックスの作成ができるようになる。

[補足]ここまで Cygwin を使う方法で書いてきたが、ネットで調べてみると、「Windows の機能の有効化または無効化」で「Linux 用の Windows サブシステム」を有効化すれば、bash がコマンドプロンプトやパワーシェルで使えるようになる、という記事があった。bash コマンドは C:\Windows\System32\bash.exe にある。これだと Cygwin がなくてもシェルスクリプトが実行できてインデックスの作成ができるはずだ。
そこで mewest.bat を以下に変えて実行してみた。

c:\Windows\System32\bash -i mewest

しかし、パワーシェルから mewest と打つと失敗。Linux ? Windows ??? とか何とかいう文字化けメッセージが出て終わり。Mew から kM と打ってもインデックス作成が出来ないまま止まってしまう。よって、この方法ではダメだということが分かった。やはり Cygwin を使うべきという結論。

その他

Mew から Windows のアプリを起動したい場合は、環境変数に Path を通しておくこと。例えば、PDF を Acrobat Reader で表示したいときなど。.mew.el に以下を記述。

;; pdf を acrobat reader で開く
(setq mew-prog-pdf "AcroRd32.exe")