目次へ戻る §23へ戻る §25へ進む

24. Cygwin 1.7.9 と NTEmacs JP 22.2

2011.6.13 (鈴)

24.1 はじめに

本章では執筆時現在の現行版である Cygwin 1.7.9 に対する設定をまとめます。 高機能な端末プログラム mintty 0.9.8 とテキスト・エディタ NTEmacs JP 22.2 の設定も説明します。 NTEmacs の設定では C#, Groovy, Ruby, Scala, Vala の各言語の編集モードを用意します。

今朝早く (日本時間2011年6月13日朝4時) Cygwin のパッケージとして mintty-0.9.9-1 がアナウンスされました ([ANNOUNCEMENT] Updated: mintty-0.9.9-1)。 本章の内容はそのまま適用できます。

24.2 フォルダへのリンクと bash と mintty の設定

Cygwin をインストールして最初に「スタート」メニューの Cygwin Bash Shell またはデスクトップ上の Cygwin アイコンから bash のコマンド プロンプトを開始したら, このページの先頭にある設定補助スクリプト setup.tar.bz2 を展開し,ホーム・ディレクトリで setup.sh を実行してください。

setup.sh はカレント・ディレクトリにシンボリック・リンクをそれぞれ Document ⇒ Windows「ドキュメント」フォルダ, Desktop ⇒ で同「デスクトップ」フォルダ, Public ⇒ 同「パブリック」または「共有ドキュメント」フォルダ のように作ります。

注: 小さな単一ファイル setup.sh をわざわざアーカイブ・ファイルに収めたのは,ファイルの実行パーミッションで悩まないようにするためです。

次に同じくこのページの先頭にある設定ファイル集 dots-23-06-01.tar.bz2 をホーム・ディレクトリで展開してください。 .bashrc ファイルなどが上書き,または新規作成されます。

終わったらいったんコマンド プロンプトを終了してください。

次に Cygwin Bash Shell を開始すると,黒地に白の画面に水色と緑のプロンプト 01:~$ が現れます。

もしも追加の端末プログラムとして mintty をインストールしてあるならば, 開始すると白地に黒の半透明の画面に青と赤のプロンプト 01:~$ が現れます。

mintty は Cygwin の setup.exe の "Select Packages" 画面で Shells カテゴリの下にある "mintty: Terminal emulator with native Windows look and feel" の項目を選んでインストールできます。

プロンプト 01:~$ 0 は直前のコマンド終了コードです。 1 はシェルの入れ子深さです。 ~ は現在のディレクトリです。

ディレクトリにはいましがた作成したシンボリック・リンクと設定ファイルがあるはずです。 setup.sh はもう不要ですから消してかまいません。

設定省略時の環境変数 LANG の値は C.UTF-8 ですから コマンドのメッセージは英語で表示されますが,端末が対応しているならば UTF-8 で日本語 (および他の言語) の入出力ができます。

端末が対応しているならば と断った理由は,例えば英語版 Windows で日本語 IME と日本語フォントを有効にしていても,コントロールパネルで "Language for non-Unicode programs" を日本語に設定しないとコマンド プロンプトで日本語の入出力ができないからです。 この場合でも mintty ならば日本語入出力ができます

端末が日本語を表示できるかどうかは LANGja_JP.UTF-8 にして date コマンドを実行するなどして確認できます。

実用上さしあたり問題ないと思いますが,現在の mintty 0.9.8 には最初の日本語 IME 入力が離れて表示される不具合がある模様です (Windows XP/7 とも)。

設定ファイル集の .minttyrc ファイルでは Windows XP を考慮して mintty のフォントに MS 明朝 を指定しています。 しかし,Windows 7 などで Consolas フォントが使える場合はそれを使ったほうが見やすいでしょう。

mintty の画面上で右クリックしてコンテキスト メニューを出し,"Options..." からの設定画面で選択できます。

24.2.1Windows コマンドに対する注意

Cygwin はコマンド プロンプトに対していわゆる W 系コンソール API を使い,UTF-8 を UTF-16 と相互変換して入出力します。 コマンド プロンプトは,日本語 Windows の文字コードが Shift JIS のままで,同 API 経由で Unicode 文字を取り扱うことができます (日本語 Windows のコマンド プロンプトの既定のフォントが代表的な Unicode 文字を表示できることもこれを助けます)

したがって Cygwin 上のプログラムはごく自然に UTF-8 テキストをコンソール入出力することができます。 Cygwin 上のプログラムから Windows ネイティブのコマンドを起動した場合も問題ありません。 仮にそれらが A 系 API 経由で Shift JIS テキストを入出力したとしても文字化けは起こりません。

一方,mintty にはこういった2系統の機構がありませんから,同じような感覚で bash から Windows ネイティブのコマンドを実行すると,Shift JIS による表示が文字化けします。 注意してください。

もしもそれが非対話的コマンドならば,nkf 等を使って net share | nkf などとして しのぐことはできます。

ちなみにコマンド プロンプト上であっても net share | head などとすると文字化けします。 ネイティブ・コマンドの Shift JIS のバイト出力がパイプを通して Cygwin に取り込まれた先で UTF-8 のバイト列と誤解釈されるからです。 mintty での文字化けの発生と同じ原理です。

24.3 NTEmacs JP の導入

テキスト・エディタ Emacs の Windows への移植のひとつ "NTEmacs 22BASE (日本語インライン変換 & 半透明)" の導入について説明します。 これは Cygwin に属するプログラムではありませんが,素のままでも Meadow より Cygwin との親和性が高いエディタです。

NTEmacs 22BASE (日本語インライン変換 & 半透明)

で解説され,

http://sourceforge.jp/projects/ntemacsjp/files/

で配布されている emacs_22.2_bin_20080327.exe を入手します。 7-Zip 自己解凍書庫になっています。 実行すると emacs というフォルダが展開されます。

Cygwin の /usr/local ディレクトリ (普通,その実体は C:\cygwin\usr\local フォルダ) に,この emacs フォルダを展開します。

Cygwin 上で /usr/local/bin に移動し,../emacs/22.2/bin/runemacs.exe へのシンボリック・リンク emacs を作ります。



解説ページの記述では, /usr/local/emacs/22.2/bin/runemacs.exe ではなく, /usr/local/emacs/22.2/bin/emacs.exe を実行するように指示しています。 Unix の再現としてはこれが妥当であり正統です。 Emacs プロセスが Unix コマンドとして出力したエラーが正しく端末に表示されますし, プロセスが終わるまでコマンドの制御は戻りません。 しかし,実際に使ってみると,emacs を開始するほとんどすべてのコマンド行で末尾に & を打ち込んでバックグラウンド・プロセスにしている自分に気付くことになります。 emacs -batch を使うなどの例外的な場合を除いて runemacs.exe を使うのが便利です。

24.3.1 Emacs 設定ファイル

dots-23-06-01.tar.bz2 を展開したとき emacs の設定ファイルが .emacs.d/ に置かれます。

csharp-mode.el
C# 言語の編集モードを定義します。 現在は http://code.google.com/p/csharpmode/ で維持・更新されています。 ただし,else キーワードのハイライトなど,いくつかのアラがあるため, ここでは,かつて http://mfgames.com/linux/csharp-mode で公開されていた古い 0.7.0 版を使っています。
groovy-mode.el
Groovy 言語の編集モードを定義します。 http://groovy.codehaus.org/Emacs+Plugin で配布されている Jeremy's groovy-mode.el です。
htmlize.el
編集バッファの表示イメージを HTML テキストに変換します (M-x htmlize-buffer)。 http://fly.srk.fer.hr/~hniksic/emacs/htmlize.el.cgi で配布されています。
init.el
起動時に読み込まれる初期設定ファイルです。昔の ~/.emacs に相当します。
remacs.el
ロードするとファイルを read only で読み込むようになります。 付録 第3節remacs エイリアスを参照してください。
ruby-mode.el
Ruby 言語の編集モードを定義します。 http://www.ruby-lang.org/ja/downloads/ で配布されている ruby 1.9.2-p180 に同梱されています。
scala-mode/
Scala 言語の編集モードを定義します。 http://www.scala-lang.org/downloads で配布されている scala-2.9.0.1.tgz に含まれる scala-2.9.0.1/misc/scala-tool-support/emacs/ のファイルです。
vala-mode.el
Vala 言語の編集モードを定義します。 http://live.gnome.org/Vala/Emacs で配布されています。 小惑星 131 ひいては北欧神話の予言の巫女の名をもつ Vala は,決定性のあるメモリ管理を行うネイティブなバイナリを生成する C# ライクな言語として今注目に値します。

また emacs.emacs.d/auto-save-list/ を自動的に作成します。

各設定ファイルは必要になるまでほとんど読み込まれませんから,emacs の起動は十分に軽いと思いますが,さらに軽量にするため,ファイルをあらかじめバイト・コンパイルすることができます。 例えば /usr/local/emacs/22.2/bin/emacs -batch -f batch-byte-compile csharp-mode.el とすると csharp-mode.elc が作られます。 たいていはコンパイル時に警告が発せられますから,一応目を通してください。 生成された *.elc*.el と同じように使用できます。

NTEmacs は Windows ネイティブのアプリケーションですから,それが生成するファイル (この場合は csharp-mode.elc) のファイル・パーミッション (-rwxr-xr-x など) は,生成場所のディレクトリ (この場合は ~/.emacs.d) のアクセス制御リストに依存して決まります。 14.5 節 を見てください。 付録 第1節 も見てください。

ライブラリを検索する load-path が通っていない等の理由でコンパイルに失敗した場合は,*.elc ファイルは生成されません。

24.4 おわりに

mintty ではなく Cygwin Bash Shell を開始して bash を使う場合は, 行編集でギリシャ文字等を正しく扱えるようにするために,C:\cygwin\Cygwin.batset LC_CTYPE=ja_JP.UTF-8 または set LANG=ja_JP.UTF-8 の行を差し入れてください (第 23.3 節 参照)。

本章では設定ファイルと NTEmacs の導入および当座の注意点を説明しました。 効率良く Cygwin を操作し,必要に応じてカスタマイズするためには設定の内容を理解する必要があります。 内容については 付録: 設定ファイル解説 を御覧ください。


ページの先頭へ戻る


Copyright (c) 2011 OKI Software Co., Ltd.