目次へ戻る §15へ戻る §17へ進む

16. Meadow 2.10

2005/12/28 - 2006/1/23, 2009/1/30 (鈴)

§6§8 では Meadow 1.15 と Meadow 2.00 を取り上げました。 ここでは 2005年12月現在の現行バージョンである Meadow 2.10 を取り上げます。 以前のバージョンから無理にでも移行すべき深刻な理由はありません (それどころか,ソースが公開されているのですから, 有形無形のコストを度外視すれば永遠に使い続けることもできます) が,旧バージョンに特にこだわりがないならば,Meadow 2.10 を使うべきでしょう。 これは最新の安定版である GNU Emacs 21.4 をベースにしています。目立った問題点は特にありません。

ちなみに基本的な日本語マニュアルとしては, GNU Emacs の主著者 R. M. Stallman 氏による旧 Emacs 18 版マニュアルを和訳した http://flex.ee.uec.ac.jp/texi/emacs-jp/emacs-jp_toc.html があります。 Emacs の基本仕様は昔からほとんど変わりませんから今でも有用な資料です (ただし,C 言語モードのカスタマイズ方法などの細部は現在と異なります。 多国語環境の機能が入る以前の版ですから,その方面の記述もありません)。 そもそも Emacs とは何か? というレベルからの, 読みやすく実務的な入門記事としては, http://www.linux.or.jp/JF/JFdocs/Emacs-Beginner-HOWTO.html などがあります。

今の GNU Emacs には (もちろん Meadow にも) 自習用の日本語チュートリアルが標準で付属しています。開始するには メニューバーから Help → Emacs Tutorial を選んでください。 本章の設定下では,C-h の動作を伝統的な backspace に一致させる一方, C-c h に help-command を割り当てていますから, チュートリアル中の C-hC-c h に読み替えてください。 本章の設定下では,C-c h t (コントロールを押しながら c, ただの h, ただの t) と打鍵してもチュートリアルを開始できます。

なお,一般的なテキストエディタとして使うためには これだけ覚えておけば十二分だろう,という範囲を独断と偏見で Emacs 主要キー操作便覧 にまとめました。 適宜内容を加除し,縮小印刷して手もとに置くなどして,お使いください。 起動オプションについては,-nw オプションを除き, meadow でも本来のオプション (§10.2) が概ね利用できます。

2006.1/23 追記: .emacs ファイルから prefer-coding-system の呼出しを削除しました。こうしても Meadow では特に不都合はありません。 むしろ文字コードの自動判別が正しく働きます。 .emacs ファイルを読み書きするための入門資料として, Emacs Lisp てほどき (PDF ファイル) を挙げておきます。

16.1 Meadow の導入

Meadow に関しては,まず http://www.meadowy.org/meadow/ を参照してください。 配布ファイルは ftp://ftp.ring.gr.jp/pub/pc/meadow/ にあります。

下記のようにインストールします。 別バージョンと共存させたい場合は, インストール場所を適当に変更するとよいでしょう。 変更する場合は Meadow-2.10-i386.tar.gz を展開して得られる Meadow/INSTALL.Meadow.ja の注意書きを読んでください。

01:~$ cd c:
01:/cygdrive/c$ tar xzf ~/Desktop/Meadow-2.10-i386.tar.gz
01:/cygdrive/c$ cd Meadow
01:/cygdrive/c/Meadow$ unset HOME
01:/cygdrive/c/Meadow$ ./install.exe
Enter the directory which Meadow read .emacs file from.
If you do not specify, Meadow reads .emacs file in following directory.
[c:\Meadow]

ここで単に enter キーを打鍵します*1 わざわざ unset HOME をして,HOME ディレクトリを使わなせないのは, §6.1で述べたように Cygwin 本来の emacs との .emacs ファイルの衝突を避けるためです。

ただし,環境変数 CYGWIN を tty を含めるように設定している場合 (§10.1参照) は,install.exe を正常に実行できませんから, Windows のコマンドプロンプトから install.exe を実行するようにします。

16.2 フォントその他の設定

Meadow 2.0 以降のフォント設定に関しては SHINDOH 氏の http://www.fan.gr.jp/~ring/doc/font-setup.html が参考になります。 以下,§6.1 の旧設定をベースにこの設定を取り入れてみます。

まず, ftp://ftp.ring.gr.jp/pub/GNU/intlfonts/intlfonts-1.2.1-split/16dots.tar.gz を入手します。 さしあたり Meadow 専用に使いますから,C:/Meadow/ に展開します。 C:/Meadow/intlfonts-1.2.1 が作られます。 .emacs はこのディレクトリを参照しますから, 別の場所に展開した場合は,.emacs の記述も変更します。

01:/cygdrive/c/Meadow$ tar xzf ~/Desktop/16dots.tar.gz

次に http://www.fan.gr.jp/~ring/doc/font-setup.html から font-setup.el を get して C:/Meadow/site-lisp/ に置きます ("ver.2.00 向け" と題されていますが,Meadow 2.10 でも使えます)。 便宜のため MIYASHITA 氏,SHIRAI 氏の Mule-UCS などを共に含めた site-lisp.tar.gz を用意しました。 次のように展開します。

01:/cygdrive/c/Meadow$ cd site-lisp
01:/cygdrive/c/Meadow/site-lisp$ tar xzf ~/Desktop/site-lisp.tar.gz
01:/cygdrive/c/Meadow/site-lisp$ ls
Mule-UCS-0.85rc-lisp/  font-setup.el   remacs.el
csharp-mode.el         python-mode.el  subdirs.el
01:/cygdrive/c/Meadow/site-lisp$ 

csharp-mode.el については §11.2 を御覧ください。 python-mode.el については §15.4 で少し紹介しました。これは Python のソースに含まれています。 remacs.el については §6.4 を御覧ください。 自作の Emacs スクリプトの中で最古のものの一つです。

最後に下記のような .emacs を iso-2022-jp で作成して C:/Meadow/ に置きます。 ここでは視認性向上のため (特に「ば」と「ぱ」を区別しやすくするため) デフォルトフォントを MS 明朝にしています。 mw32-ime-mode-line-state-indicator-list で日本語 IME モードの文字を「び」にしているのは BeOS の二つの日本語入力メソッドの伝統のなごりです。 数年来の惰性で使っていますが,適宜「あ」なり何なりに変更してください。

;;; .emacs for Meadow
(set-language-environment "Japanese")
(require 'un-define nil t)     ; ftp://ftp.m17n.org/pub/mule/Mule-UCS/
;;
(when (require 'font-setup nil t)
  (setq font-setup-bdf-dir "C:/Meadow/intlfonts-1.2.1")
;;  (font-setup))
  (font-setup "MS 明朝" 17))
;;
(setq-default mw32-ime-mode-line-state-indicator "[--]")
(setq mw32-ime-mode-line-state-indicator-list '("[--]" "[び]" "[--]"))
(setq default-input-method "MW32-IME")
(mw32-ime-initialize)
;;
;;(set-cursor-type 'box)
(setq w32-hide-mouse-on-key t)
(setq w32-hide-mouse-timeout 5000)
(global-font-lock-mode t)
;;
(setq default-frame-alist
      (append '(;;(background-color . "white")
		;;(foreground-color . "black")
		(cursor-color . "DarkOrange")
		;;(width . 80)
		(height . 42)
		(top . 2)
		(left . 120))
	      default-frame-alist))
;;;
(require 'mw32script)
(mw32script-init)
;;;
(when window-system
  (tool-bar-mode 0)
  ;;(setq font-lock-support-mode 'lazy-lock-mode)
  ;;(set-face-foreground 'default "black")
  ;;(set-face-background 'default "#FCFCFC")
  (set-face-background 'mode-line "rgb:ee/ee/ee")
  (set-face-foreground font-lock-variable-name-face "black")
  (set-face-foreground font-lock-keyword-face "NavyBlue")
  (set-face-foreground font-lock-function-name-face "MediumBlue")
  (set-face-foreground font-lock-type-face "DeepSkyBlue4")
  (set-face-foreground font-lock-string-face "DarkGreen")
  (set-face-foreground font-lock-builtin-face "black")
  ;;(make-face-italic font-lock-variable-name-face)
  ;;(make-face-italic font-lock-comment-face)
  (make-face-bold font-lock-keyword-face)
  (make-face-bold font-lock-builtin-face)
  (make-face-bold font-lock-type-face))
;;;
(load-library "term/keyswap")
(global-set-key "\M-j" 'enlarge-window)
(global-set-key "\M-o" 'other-window)
(global-set-key "\C-co" 'overwrite-mode)
(global-set-key "\C-ch" 'help-command)
(global-set-key "\C-cg" 'goto-line)
(setq scroll-step 1			; Scroll a window by 1 line
      window-min-height 2)		; Allow 1-line windows 
;;(setq-default indent-tabs-mode nil)	; Indentation cannot insert tabs
(let ((hook (lambda () 
	      (c-set-style "user")
	      (setq case-fold-search nil))))
  (add-hook 'c-mode-hook   hook)
  (add-hook 'c++-mode-hook hook))
(add-hook 'csharp-mode-hook (lambda ()
			      (setq c-basic-offset 4
				    tab-width 4
				    indent-tabs-mode nil)))
(add-hook 'java-mode-hook (lambda ()
			    (setq tab-width 4
				  indent-tabs-mode nil)))
(autoload 'csharp-mode "csharp-mode" "C# editing mode." t)
(autoload 'python-mode "python-mode" "Python editing mode." t)
(nconc auto-mode-alist '(("\\.cs$" . csharp-mode)
			 ("\\.aspx$" . html-mode)
			 ("\\.pyw$" . python-mode)
			 ("\\.py$" . python-mode)))
;;

便宜のため dot-emacs.tar.gz を用意しました。 次のように展開します。

01:/cygdrive/c/Meadow$ tar xzf ~/Desktop/dot-emacs.tar.gz

Windows の スタート → すべてのプログラム → Meadow → Meadow2 で Meadow を起動できます。

カーソルが蜜柑色になっていれば,さしあたり .emacs ファイルが読み込まれていることが確認できます。 同ファイルの (cursor-color . "DarkOrange") の箇所の効果です。

フォントの設定に関しては C-c h h (コントロールを押しながら c, ただの h, ただの h) または M-x view-hello-file (Altを押しながら x, view-hello-file, Enter) で左図のように表示されるかどうかを確認します。

ところで, ここまでの Meadow の設定は,実は Cygwin から完全に独立しています。 Cygwin は Meadow 導入のためのディレクトリ移動や一覧, tar.gz ファイルの展開のための便利な道具として使っただけでした。 この時点で Cygwin を消してしまっても Meadow は何ら問題なく動作します。

次節では Meadow と Cygwin が相互に利益を得られるように両者を連携させます。

16.3 起動スクリプトとショートカットの作成

下記の内容のシェルスクリプト/usr/local/bin/meadow として置きます。 これはコマンド行引数 (ただしハイフンではじまるオプションを除く) を, Cygwin の Unix 風パス名から Windows のパス名に変換して Meadow に渡します。 つまり,Cygwin から meadow file... という形式で普通の Cygwin コマンドのように Meadow を利用できるようになります。 同じ名前のシェルスクリプトを §6.2 で Meadow 1.15 用に, §8.1 で Meadow 2.00 用に導入しました。 共存させたい場合は適当にファイル名を変更します。 これらの旧スクリプトに対し, 下記はクォートだけの空引数に対応できるように改良しています。

#!/bin/zsh -
unset HOME LANG
for ((i = 1; i <= $#; i++)); do
    a="$argv[i]"
    if [ -z "$a" ]; then
	argv[i]=()
	((i--))
    elif [ "$a[0]" != '-' ]; then 
	argv[i]=`cygpath -w "$a"`
    fi
done
exec C:/Meadow/bin/RunMW32.exe "$@"

2009/1/30 追記: 2008 年 12 月の zsh-4.3.9 では,配列の添え字を 0 から数えるのか 1 から数えるのかの既定値がこっそり変更されました。 コマンド行から Meadow にマイナス記号で始まるオプションを渡すには, 下記のように 0 を 1 に1箇所書き換える必要があります。

#!/bin/zsh -
unset HOME LANG
for ((i = 1; i <= $#; i++)); do
    a="$argv[i]"
    if [ -z "$a" ]; then
	argv[i]=()
	((i--))
    elif [ "$a[1]" != '-' ]; then 
	argv[i]=`cygpath -w "$a"`
    fi
done
exec C:/Meadow/bin/RunMW32.exe "$@"

もしも Cygwin 本来の GNU Emacs (§10) をさしあたり使うつもりがないならば, 下記のように meadow へのシンボリック リンクとして emacs を設けるとよいでしょう。 (指が無意識に emacs file と打鍵してしまうような人にお勧めです ;-)

01:/usr/local/bin/$ ln -s meadow emacs

次に,Windows から Cygwin を経由せずに Meadow を起動した場合でも, Cygwin の機能を利用できるように,下記のバッチ ファイル/usr/local/bin/meadow.bat として置きます。 バッチ ファイルですから,改行文字が \r\n になるように気をつけます。

PATH C:\cygwin\bin;C:\cygwin\usr\local\bin;%PATH%
set HOME=
set LANG=
C:/Meadow/bin/RunMW32.exe %1 %2 %3 %4 %5 %6 %7 %8 %9

このバッチ ファイルへのショートカットをデスクトップに下図のように作ります。 ここではアイコンとして, たまたま C:/Meadow/etc/icons/ にあるものを使いました。 好みに応じて適宜変更してください。 作業フォルダも,ここではマイ ドキュメントやデスクトップへのアクセスに 便利なように設定していますが,好みに応じて適宜変更してください。 実行時の大きさを「最小化」にするのは,バッチ ファイルに対する コンソール ウィンドウが一瞬ちらつくように現れるのを防ぐためです。


こうして作ったショートカットをダブルクリックしたり, あるいはショートカットにテキストファイルをドロップすることによって, Meadow を起動できます。 最大9個まで複数のテキストファイルを選択しドロップして, いちどに複数のファイルを開くこともできます。 1ウィンドウでの画面分割とバッファ切り替えがせせこましいと感じる場合は, Meadow のメニューバーの File → New Frame で別ウィンドウを設け, 同じくメニューバーの Buffers でバッファを選択すればよいでしょう。

このとき,Cygwin にパスを通していますから,シェルスクリプト /usr/local/bin/meadow 経由で起動した場合と同じく, 次の利点があります。


脚注

*1 このとき,下記のようにレジストリが設定されます (Cygwin の /proc からレジストリを閲覧できることは §3 で述べました)。

01:/proc/registry/HKEY_LOCAL_MACHINE/SOFTWARE/GNU/Meadow/2.10/Environment$ ls
BITMAPPATH  EMACSDOC       EMACSLOCKDIR  HOME      SHELL
EMACSDATA   EMACSLOADPATH  EMACSPATH     INFOPATH  TERM
目次へ戻る §15へ戻る §17へ進む

Copyright (c) 2005, 2006, 2009 Oki Software Co., Ltd.