とりあえず、覚書です。 ヴァージョンの違いで挙動が異なることもあります。ごめんなさい。
メニューバーから[Mule]⇒[Set Language Environment]とたどって
(あるいはC-x C-m l)日本語環境や韓国語環境に変更してもいいのですが、
これだと一つ不都合があります。
日本語環境の場合は、この関数は
Clipboardエンコーディングをshift_jis-dosにちゃんと変更してくれるのですが、
韓国語環境の場合は、この関数は
clipboardエンコーディングの設定をしてくれません。
韓国語環境の時は、euc-kr-dosに変更された方がいろいろと便利です。
そこで、自分は各種コーディングシステムの変更をするための 関数を作って、メニューバーに登録しています。 (.emacsファイルに記述する。)
Meadowの(Emacsの)設定ファイルは、 ホームディレクトリ内の".emacs"というファイルであり、 .emacsはiso-2022-7bitコードで保存します。
先ず、メニューバーから、"Files"−>"Open File..." をマウスで
クリックしてください。すると、画面の下段に、例えば
Find file: C:\Meadow\1.10\bin/
と表示されると思います(カーソルが行の最後にある)。
ここで、BackSpaceキーを使って"C:\Meadow\1.00\bin/"を削除して、
かわりに"C:/home/.emacs"と入力して、エンターキーを押してください。
(注意: Windowsではディレクトリの区切り文字は"\"ですが、
Meadowでは"/"を使用できます。また、円記号"¥"(の半角)と
バックスラッシュ"\"(の半角)は同じ"記号"です。)
もちろん、ホームディレクトリが"C:\home"でない方は、自分の ホームディレクトリ内に".emacs"ファイルを置かなければなりません。 適宜変更してください。 (もしもホームディレクトリが"C:\chiyu"だったら、 "C:/chiyu/.emacs"となるわけです。)
新しい画面が現れたので、ここに以下の内容を記入します。 マウスを使ってコピー&ペーストすればいいと思います。 ちなみに、";"(セミコロン)で始まる行はコメント行です。
;;; -*- mode: lisp-interaction; syntax: elisp -*- ;日本語環境の設定 (set-language-environment "Japanese") ;各言語の設定を簡単に切り替える項目をメニューバーに追加する (setq menu-bar-lang-menu (make-sparse-keymap "Lang")) (define-key global-map [menu-bar lang] (cons "Lang" menu-bar-lang-menu)) (setq menu-bar-final-items (cons 'lang menu-bar-final-items)) (define-key menu-bar-lang-menu [japanese] '("Japanese" . set-frame-japanese)) (define-key menu-bar-lang-menu [korean] '("Korean" . set-frame-korean)) (define-key menu-bar-lang-menu [Latin-1] '("Latin-1" . set-frame-latin-1)) (defun set-frame-japanese () (interactive) (set-language-environment "Japanese") (setq mule-retrieval-coding-system 'sjis-dos) ;W3で使う(後述) (set-input-method "MW32-IME") ;以下、日本語入力にWindowsのIMEを使う場合。 (toggle-input-method) (setq-default mw32-ime-mode-line-state-indicator "[--]") (setq mw32-ime-mode-line-state-indicator-list '("[--]" "[あ]" "[--]")) (mw32-ime-initialize) ) (defun set-frame-korean () (interactive) (set-language-environment "Korean") (setq mule-retrieval-coding-system 'euc-korea-dos) ;W3で使う(後述) (set-clipboard-coding-system 'euc-korea-dos) (set-input-method "korean-hangul") ;以下はquailの設定。なくても良いが、動作が少し異なる。 (toggle-input-method) ) (defun set-frame-latin-1 () (interactive) (set-language-environment "latin-1") (setq mule-retrieval-coding-system 'latin-1-dos) ;W3で使う(後述) (set-clipboard-coding-system 'latin-1-dos) (set-input-method "latin-1-postfix") (toggle-input-method) ) ;上で作成した関数を使って日本語環境を指定 (set-frame-japanese) ;矢印キーで下がった時、新しい行を作らない。 (setq next-line-add-newlines nil)
最後に、この設定ファイルを保存しなければなりませんが、 iso-2022-7bitで保存しなければなりません。 メニューバーから、"Mule"−>"Set Coding System"−>"Buffer File" を選択して、画面の下にカーソルが移動するので、そこで "iso-2022-7bit"と入力してエンターキーを押してください。 そうすると、下から2行目の黒い行の左が"[--]J"に変化したと思います。
"S"はShift-JISコードで保存するよ、という意味で、 "E"はEUCコードで保存するよ、という意味で、 "J"はiso-2022-7bitコードで保存するよ、という意味です。 そして、"K"がEUC-KOREAで保存するよ、という意味です。
それでは保存しましょう。 メニューバーから、"Files"−>"Save Buffer"をクリックします。
そして、Meadowを終了して、またMeadowを起動してください。 メニューバーから"Lang"−>"Korean"などで環境を変更できます。
ハングル入力にkWnnなどの市販IMEを使う場合は
日本語の設定を参考にして、set-input-method以下の部分を
変更します。
その場合、(set-keyboard-coding-system 'euc-korea)
が必要です。
使う時は、KS入力の方のIMEに変更することを忘れずに。
Meadowではユニコードクリップボード(CF_UNICODETEXT)にアクセスできません。
(すくなくともver.1.14では。)
(2008.10.14追記 Meadow3の最新版をソースからbuildすると、
ユニコードクリップボードを使ってコピーアンドペイストできるのだそうです。)
Microsoft Internet Explorerなどは通常はユニコードクリップボードを使います。 Meadowはユニコードクリップボードを使えないので、Internet Explorerは テキストクリップボード(CF_TEXT)を使って文字列をやりとりするわけですが、 この時Shift-JIS<=>Unicode という変換をします(日本語Windowsの場合)。 この変換をされるので、Meadowとの間でハングルのコピーアンドペイストができません。
そこで、Meadowの側でユニコードクリップボードに 何らかの手段で文字列を設定できれば、Internet Explorerと 文字化けせずにコピーアンドペイストできる、ことになります。
ここでは、Windows用ソフトであるUniKonv、もしくはxyzzyを利用して ユニコードクリップボードにアクセスする方法を紹介します。 最善の方法ではないかもしれませんが、参考になれば幸いです。
(注意:UniKonvはWindows95ではUTF-8コードに対応していません。)
その1。上の設定で、set-frame-koreanの中で
(set-clipboard-coding-system 'euc-korea-dos)をしているので、後はUniKonvを起動して、codepageを韓国語にして、 Internet Explorerとコピーアンドペイストをする。 (clipboard-coding-systemの指定でUTF-8コードを使うようにすることもできます。)
その2。UniKonvは終了しておく。コピーアンドペイストする時に
MeadowからコマンドラインでUniKonvを起動するための設定をしておく。
use-unikonv.lzhの中には
use-unikonv.el が入っています。
(setq use-unikonv-command "c:/programs/UNIKO120/UNIKONV.EXE") (setq use-unikonv-codepage "65001") ;utf-8用のコードページ (setq use-unikonv-coding-system 'utf-8-dos) (load "use-unikonv")
use-xyzzy.lzhの中には
(setq xyzzy-command "c:/programs/xyzzy/xyzzy.exe") (load "use-xyzzy")
クリップボードにアクセスする度にxyzzyが起動し、そして終了します。 それだけ時間がかかるわけですが、そのかわりInternet Explorerなどの Unicode clipboardを使うアプリケーションとの間でコピーアンドペイストが 可能になります。
これは、私は試していないのですが、 http://www.tom.sfc.keio.ac.jp/~sakai/hiki/?MeadowUnicodeClipboard 酒井 政裕さんという方が「MeadowでUnicodeをクリップボードとやり取りする」という 内容を書かれています。
Mule-UCSは文字コードのエンコード/デコードをするためのパッケージです。 サンプルとして、ユニコード用の設定と、中国語のBIG5⇔CNS変換用の設定が 入っています。以下では、ユニコードの設定についての話です。
ユニコードファイルを読みこむ時、Muleの扱える文字に変換します。 ということは、たとえば、ユニコード番号\x3042の文字「あ」は、 JIS X 0208の「あ」に変換するのか、それともKS C 5601(KS X 1001)の「あ」 に変換するのか、はたまたGB 2312の「あ」に変換するのか、 これがMule-UCSのどこかに指定されているわけです。 (別の例だと、ギリシア文字をShift-JISの(JIS X 0208の)中の全角文字に 変換するのか、それともiso-8859-7の中の文字(半角文字)に変換するのか、 を指定する。)
この「変換時の文字集合の優先順位」を変更する関数が un-define-change-charset-order です。 (これは、README.Unicodeというファイルの中の「Simple dynamic modification functions.」 という項目の中に説明があります。)
デフォルトで 変数 unicode-basic-translation-charset-order-list の 順番で変換されますので、このリストの順番を変更したリストを作成して、 un-define-change-charset-order関数に渡せば、変更できるわけです。
たとえば、デフォルトではutf8ファイル内の「イ尓」は JIS X 0212で表示されます。また、ギリシア文字の「α」は iso-8859-7で表示されます。ここで、
(un-define-change-charset-order '(ascii japanese-jisx0208 korean-ksc5601 chinese-gb2312 chinese-big5-1 chinese-big5-2 latin-iso8859-1 latin-iso8859-2 latin-iso8859-3 latin-iso8859-4 cyrillic-iso8859-5 greek-iso8859-7 hebrew-iso8859-8 latin-iso8859-9 ipa japanese-jisx0212 chinese-cns11643-1 chinese-cns11643-2 chinese-cns11643-3 chinese-cns11643-4 chinese-cns11643-5 chinese-cns11643-6 chinese-cns11643-7 latin-jisx0201 katakana-jisx0201 thai-tis620 ethiopic indian-is13194 chinese-sisheng vietnamese-viscii-lower vietnamese-viscii-upper mule-unicode-0100-24ff mule-unicode-2500-33ff mule-unicode-e000-ffff))を評価すると、 utf8ファイル内の「イ尓」はGB 2312で表示されますし、 「α」はJIS X 0208で表示されるようになります。
M-x insert-ucs-character <Enter> ?\xac00 <Enter>でユニコード番号0xAC00(16進数)の文字が入力できます。 (「?\xac00」のかわりに10進数で「44032」としてもよい。)
ところで、ユニコードと既存文字集合とのマッピングは 個々のアプリケーションで微妙に異なります。 日本語の場合なのですが、 「鈴木朝子と高橋誠の部屋」という ホームページの中の、「WWWページ作成について」の中の「Windows98上でのMeadowの動かし方」 では、Microsoft Internet Explorer風のマッピングにする方法が載っています。 (ujisx0208.elを修正する。)
というか、SEMI/FLIM/APELでの設定です。 だから、Semi-gnusだけでなく、Cmailなどでも有効だと思います。 (Mewなどにも同様の設定項目があると思います。)
Meadow1.14の場合、小関さんのページ (http://www.netlaputa.ne.jp/~kose/Emacs/Meadow/index.html) で紹介してあるT-gnusを使っている方も多いかと思いますが、 T-gnusもSemi-gnusの仲間です。
デフォルトのままで日本語と韓国語の混ざったメールを送ると、 おそらく相手から「読めないよ」と言われると思います。 iso-2022-jp-2という文字コードで送られるからです。
iso-2022-jp-2 は電子メール用の正式な文字コードのひとつです。 ただし、対応しているメールソフトはほとんど皆無といっていいでしょう。 (相手がMeadowやEmacs上で動くメールソフトを使っていれば、 多分読めるはずですが。)
韓国語のメールを書いたつもりが、一箇所日本の漢字が混ざっていたため、 KSコードではなくてiso-2022-jp-2コードで送信されてしまった、 という間違いは、よくある間違いです。
下の「韓国語メールをutf-8で送りたい。」を参考にして、 iso-2022-jp-2のかわりにutf-8に設定しておけば、 文字化けの危険が少し減ると思います。
デフォルトのままでハングルメールを送信しても、 特に問題ないと思います。
デフォルトでは、EUC-KRをBase64エンコーディングしたもので
送信されます。
これは、
この方式は、Base64エンコーディングを使うので、
ちょっと不便というか、文字化けを起す可能性も
なきにしもあらず、というか…。
以下の2つの方法もお試しください。
(3つの方法とも、電子メールの約束事には
ちゃんと適合しています。念のため。)
自分はこれを指定しています。
この場合、charsets-mime-charset-alistの値を変更する必要はありません。 (defaultのeuc-krのままでいい、という意味です。) ただし、8bitで送る、という設定が必要です。 (この設定をしないと、7bitで送るという設定になるので、 semi/mime-edit.el内のmime-charset-type-listの設定により、 base64エンコードされて送信されます。)
customize機能を使って設定するのが簡単です。
M-x customize-apropos えんたー
transfer-level えんたー
で、mime-transfer-levelという項目が表示されますので、
数字の「7」の部分を「8」に書きかえます。
その後で、
M-x custom-save えんたー
とします。
すると、.emacsファイルの末尾の custom-set-variables の部分に
mime-transfer-level を 8 に設定する、という記述が追加されます。
一部のメーラーではiso-2022-krは読めないらしいです。 よって、あまりお勧めいたしません。
c:/meadow/1.10/site-lisp/emu/mcs-e20.el
内のcharsets-mime-charset-alistというリストが、
作成したメールをどのMIME charsetで送るかを決めます。
先頭から順に見て行き、メールに使用される文字集合が
リスト要素のcar部分に含まれれば、cdr部分のcharsetを使います。
従って、これを変更すればEUC-KRじゃなくてiso-2022-krで
送れるわけです。
このmcs-e20.elを直接変更してもいいし、.gnus.elファイルに
(setq charsets-mime-charset-alist (cons (cons (list 'ascii 'korean-ksc5601) 'iso-2022-kr) charsets-mime-charset-alist)) (setq charsets-mime-charset-alist (cons (cons (list 'ascii) 'us-ascii) charsets-mime-charset-alist))と書いてもいいです。 (注意点としては、リストの先頭にasciiのみの場合を付け加えておかないと、 asciiメールでもcharsetがiso-2022-krになってしまいます。)
参考: semi/mime-edit.el内のmime-charset-type-listという リストも参考にしておいてください。 flim/eword-encode.el内のeword-charset-encoding-alistも 影響を与えるかもしれません(多分メールヘッダ内のSubjectの エンコードに関係する)。 昔いろいろと試してみたのですが、結果を忘れました。
Mule-UCSをインストールしていれば、utf-8が使えます。 この場合も、charsets-mime-charset-alistの値を変更すれば、 utf-8で送信できるようになります。いろいろ工夫してみてください。
日本語(JISコード)と韓国語(KSコード)が混ざったメールは、 デフォルトではiso-2022-jp-2コードで送信されます。 これは一般に文字化けしてしまうので(相手もMeadowを 使っていれば文字化けしないはずですが)、 それでは困るので、ここは iso-2022-jp-2をutf-8に変更しておきましょう。
c:/meadow/1.10/site-lisp/emu/mcs-e20.el 内のcharsets-mime-charset-alistというリストが、 作成したメールをどのMIME charsetで送るかを決めますので、 その中のcharsets-mime-charset-alistという変数の中の 「iso-2022-jp-2」の文字列を「utf-8」に 変更します。その後で、mcs-e20.elをbyte-compileし直します。 これで、このcharsets-mime-charset-alistの記述とおり、 JapaneseとKoreanの混ざったメールはutf-8メールになります。
受け取ったメールのヘッダーにcharsetは何、と書いてありますが、 それとMeadow(mule, Emacs)で使用している文字集合名とを 対応づけるわけです。
;;ks_c_5601-1987 (setq mime-charset-coding-system-alist (cons '(ks_c_5601-1987 . euc-korea) mime-charset-coding-system-alist))この変数は、meadow/1.14/site-lisp/eum/mcs-20.elの中で定義されています。 このリストに追加するわけです。
なお、日本語のメールを読む時に、次の設定も便利かもしれません。 本文はiso-2022-jpで書かれているのに、ヘッダーに
Content-Type: text/plain; charset="iso-8859-1"と間違った情報が書かれたメールが送られることがあります。 この場合、
(setq mime-charset-coding-system-alist (cons '(iso-8859-1 . iso-latin-1-with-esc) mime-charset-coding-system-alist))とすると、読めるようになります。
(setq default-mime-charset 'korean-iso-8bit-with-esc)これは、/meadow/1.14/site-lisp/emu/mcs-20.elの中で定義されています。 どのcharsetが使われているのかが不明の時、この値が使われます。 (だから、他の言語のメールでも生8bitのヘッダーがあるのであれば、 この方法はあまりよくありませんね。その場合の対応策は、私は まだ知りません。)
もしもeuc-korea(korean-iso-8bitと同じ)に設定していると、非MIMEなiso-2022-jpメールが 文字化けします。でもkorea-iso-8bit-with-escだと文字化けしません。 (iso-2022-jpには日本語を示すescape文字が入っているからです。)
ごめんなさい。自分はよくしりません。 とうか、自分の場合は、直接charset部分を書き換えてしまいます。
Semi-gnusのメーリングリストに質問すれば、多分解決策を 教えてもらえると思います。
M-x calendar でカレンダーが表示されますが、
カーソル位置の陰暦を知りたい時は、
p C (小文字のp の後で 大文字のC)
でエコーエリアに表示されます。
しかし、defaultでは、この陰暦は中国(北京)での陰暦です。 中国と日本(韓国)との間には1時間の時差があります。 そこで、新月になるのが夜中の12時ごろの場合、 日本と中国とで陰暦が一日ずれることがあるのだそうです。 (例えば、1997年の陰暦1月1日)
.emacsに以下の設定で、これを日本(韓国)の陰暦が表示されるように 変更できるようです。なお、陰暦機能の定義は C:/meadow/1.14/lisp/calendar/cal-china.el の中にあります。
;chinese-calendar (add-hook 'calendar-load-hook (lambda () (setq chinese-calendar-location-name "Akashi" ;これで正しい? chinese-calendar-time-zone 540 ;9時間 x 60分, 世界標準時との差 chinese-calendar-standard-time-zone-name "JST" chinese-year-cache nil ;中国の陰暦が数年分保存されているので、それを削除 chinese-calendar-celestial-stem ;以下は、お好みでどうぞ。 ["甲" "乙" "丙" "丁" "戊" "己" "庚" "辛" "壬" "癸"] chinese-calendar-terrestrial-branch ["子" "丑" "寅" "卯" "辰" "巳" "午" "未" "申" "酉" "戌" "亥"])))これで、うまくいっているように見えます。
M (大文字のM)を押して満月とか新月とかの日を表示させると、 旧暦の一日や十五日が西暦の何日かを予測するのに役立ちます。
おまけ、として以前書いていましたが、
副作用が大きいので、以下の記述は削除します。
(月名を変更すると、たとえば diaryファイルの日付フォーマットが
変ってしまい、うまく動作しなくなりました。)
(setq calendar-day-name-array
["日曜日" "月曜日" "火曜日" "水曜日" "木曜日" "金曜日" "土曜日"])
(setq calendar-month-name-array
["1gatu" "2gatu" "3gatu" "4gatu" "5gatu" "6gatu"
"7gatu" "8gatu" "9gatu" "10gatu" "11gatu" "12gatu"])
とすると、月名や曜日名が少しは見やすくなるかもしれません、が
いろいろ副作用もあることがわかり、勧めないことにしました。
Meadowの中のdot.emacs.jaファイルを参考にしてください。
Meadowの中のdot.emacs.jaファイルには notepadを使った印刷方法が載っています。 これを、xyzzyエディターを使った方法に書きかえてみます。
まず、notepadの部分をxyzzy.exeの絶対パスで書きかえます。
次に、 (coding-system-for-write 'iso-2022-7bit)
とします。
最後に、(call-process "c:/programs/xyzzy/xyzzy.exe" nil nil nil "-q" "-p" tmpfile)
のようにします。以上です。
これは、PostScriptファイルを作成して、これを PostScriptプリンタで印刷するか、もしくは Ghostscriptを使って一般のプリンタで印刷する方法です。
例えば、次を参照のこと。
自分は、次のようにして使っています。 つまり、いちいちPostScriptファイルを作成して、GSViewで表示して、 確認できた後でプリンタで印刷、という手順です。
また、ヘッダーの内容の変更や、紙の大きさの指定は、 customizeを使用しています。
BDFフォントを使う場合、PSファイルの中に字形が 埋め込まれるので、フォントのことを気にせずに PSファイルをそのまま印刷すれば良いわけです。
自分は.emacsに次のような設定をしています。 (もちろん、BDFフォントの場所は、それぞれの環境に 合せて適宜修正してください。)
;; BDFフォントを使う設定 (setq ps-multibyte-buffer 'bdf-font) ;; BDF ファイルをインストールしてある場所 (setq bdf-directory-list '("c:/meadow/intlfonts-1.2/Asian" "c:/meadow/intlfonts-1.2/Chinese" "c:/meadow/intlfonts-1.2/Chinese.BIG" ;;;以下、一部省略 "c:/meadow/intlfonts-1.2/Misc"))
GhostscriptでハングルのTrueTypeフォントを使う設定は、 「 ハングル覚え書き−−−ソフトウェア編その2」のghostscriptの項 を参考にしてください。 さらに、CIDFnmapに次の設定を書いてください。 (もしくは、ps-mule-font-info-database-psの値を変更して、 別のフォント名を使うようにする)
/Munhwa-Regular /HYSMyeongJo-Medium ; /Munhwa-Bold /HYRGoThic-Medium ;
さて、Meadowのlispディレクトリの中にあるps-mule.elを読むと、
(setq ps-multibyte-buffer 'non-latin-printer)だけでよさそうなのですが、実際にやってみると、以下の設定にしないと ハングルが表示されませんでした。
(setq ps-multibyte-buffer 'non-latin-printer) (setq ps-mule-font-info-database-ps '((katakana-jisx0201 (normal builtin "Ryumin-Light.Katakana" ps-mule-encode-7bit 1) (bold builtin "GothicBBB-Medium.Katakana" ps-mule-encode-7bit 1) (bold-italic builtin "GothicBBB-Medium.Katakana" ps-mule-encode-7bit 1)) (latin-jisx0201 (normal builtin "Ryumin-Light.Hankaku" ps-mule-encode-7bit 1) (bold builtin "GothicBBB-Medium.Hankaku" ps-mule-encode-7bit 1)) (japanese-jisx0208 (normal builtin "Ryumin-Light-H" ps-mule-encode-7bit 2) (bold builtin "GothicBBB-Medium-H" ps-mule-encode-7bit 2)) (korean-ksc5601 ;; *** 7bitを8bitに変更した。*** (normal builtin "Munhwa-Regular-KSC-EUC-H" ps-mule-encode-8bit 2) (bold builtin " Munhwa-Bold-KSC-EUC-H" ps-mule-encode-8bit 2)) ))
上の方法だと、TrueTypeフォントの設定をしていない言語の文字は 文字化けします。日本語とハングルと英語以外の文字は BDFフォントを使うには、別の設定が必要です。
下の設定で、省略部分は、ps-mule.elの中の ps-mule-font-info-database-bdf の値を参考にして書いてください。
;;;日本語とハングルをtruetypeフォントで、残りをbdfフォントで印刷する設定 (setq ps-multibyte-buffer nil) (setq ps-mule-font-info-database-default '((latin-iso8859-1 (normal nil nil iso-latin-1)) (katakana-jisx0201 (normal builtin "Ryumin-Light.Katakana" ps-mule-encode-7bit 1) (bold builtin "GothicBBB-Medium.Katakana" ps-mule-encode-7bit 1) (bold-italic builtin "GothicBBB-Medium.Katakana" ps-mule-encode-7bit 1)) (latin-jisx0201 (normal builtin "Ryumin-Light.Hankaku" ps-mule-encode-7bit 1) (bold builtin "GothicBBB-Medium.Hankaku" ps-mule-encode-7bit 1)) (japanese-jisx0208 (normal builtin "Ryumin-Light-H" ps-mule-encode-7bit 2) (bold builtin "GothicBBB-Medium-H" ps-mule-encode-7bit 2)) (korean-ksc5601 ;;7bitを8bitに変更した。 (normal builtin "Munhwa-Regular-KSC-EUC-H" ps-mule-encode-8bit 2) (bold builtin " Munhwa-Bold-KSC-EUC-H" ps-mule-encode-8bit 2)) (latin-iso8859-2 (normal bdf ("lt2-24-etl.bdf" "etl24-latin2.bdf") iso-latin-2 1)) (latin-iso8859-3 (normal bdf ("lt3-24-etl.bdf" "etl24-latin3.bdf") iso-latin-3 1)) (latin-iso8859-4 (normal bdf ("lt4-24-etl.bdf" "etl24-latin4.bdf") iso-latin-4 1)) (thai-tis620 (normal bdf ("thai24.bdf" "thai-24.bdf") thai-tis620 1)) ;;;;以下、一部省略 ))
これまた、Meadow1.14の場合、小関さんのページ (http://www.netlaputa.ne.jp/~kose/Emacs/Meadow/index.html) で紹介してあるW3のパッケージを使っていると仮定します。
文字化けする場合、C-u g (C-u M-x w3-reload-document) で 文字コードを指定して再読み込みできます。
" "という記述(実体参照)があると、W3は Latin-1の"no-break space"という空白文字(行末でも改行しない空白)に 変換します。これは一見当然の仕様のように見えますが、 文章の再利用時に問題を起こします。特に、Semi-gnusはHTMLメールの 表示にW3を利用しますので、返信を書く時がそうです。
つまり、Latin-1のno-break spaceが含まれるため、 Semi-gnusは(Apelパッケージは?)ISO-2022-JP-2でエンコードして しまうのです(日本語やハングル使用時)。 (とりあえず、charsets-mime-charset-alist を変更して ISO-2022-JP-2をUTF-8に変更しておく方が安全かも??)
このno-break spaceへの対処法として、 " "を半角spaceに対応づける、という方法もあります。 (その定義は、w3-vars.elの中の w3-html-entities というassociation listです。) しかし、メールの送信時にno-break space を普通の半角spaceに変換する、 という手もあります。 Nana-gnus(Semi-gnus)の場合、meassage-send-hookに設定を記述すればいいです。
(add-hook 'message-send-hook (function (lambda () (let (nbsp_string) (setq nbsp_string (char-to-string (make-char 'latin-iso8859-1 160))) (goto-char (point-min)) (while (search-forward nbsp_string nil t) (replace-match " "))))))を.emacsかまたは.gnus.elに書いておきます。
mule-sysdp.elの中を覗いてみると、いろいろと多言語用の設定がされています。
w3-mime-charset-coding-alistという変数は、HTMLファイルの先頭の
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">といった文字集合(文字エンコーディング?)の指定を有効にするためのものです。 というわけで、早速、
("utf-8" . ,(mule-coding-system-version 'utf-8)) ("ks_c_5601-1987" . ,(mule-coding-system-version 'euc-kr '*euc-korea*))という記述を追加して(bytecompileして)みました。 (w3-mode-hookで設定する、という方法もあります。)
w3-url-domain-language-environment-alist と w3-url-domain-coding-alist、 どちらが優先されるのかまだ確かめていませんが、とにかく、 URLのドメインがjpだったら日本語ページとみなす、といった感じの機能です。 まだ確かめていませんが、metaタグのcharsetが記述されていない場合、 問題を起こしそうなので、この変数はnilにした方がいいのかもしれません。 (もちろん、場合によりけりですが。)
W3を使って、フォームの送信をする場合(掲示板に投稿したり、検索したりとか)、
使用文字コードを指定しないといけません。
これは、mule-sysdp.elの中のmule-retrieval-coding-systemという
変数に設定します。
日本語の場合は(setq mule-retrieval-coding-system 'sjis-dos)
韓国語の場合は(setq mule-retrieval-coding-system 'euc-korea-dos)
でよいでしょう。
....と書いていたら、問題点が一つ出てきました。
mule-sysdp.elの中では、defconst という関数を使ってこの
mule-retrieval-coding-system の設定をしています。
これだと、せっかく.emacsで設定した値が、
w3起動時に上書きされてしまいます。
w3-mode-hookで指定する、という方法が正道だと思いますが、
mule-sysdp.el内の
(defconst mule-retrieval-coding-system
以下3行をcomment outするのも一つの方法です。
(もちろん、上のように、.emacsファイル内でsetqしておくこと。)
(defconst をdefvar に書き換える、という方法もあります。
これだと、.emacsで既にsetqしている場合、上書きしません。)
Microsoft Internet Explorer 4以上や Netscape Navigator 4以上では、 numeric character references(数値文字参照、例えば A で ASCIIコード65(10進数表記)の文字である"A"を表わす)使用時に、 UNICODE番号を使用できます。 さらに、Internet Explorerでは、エンコードが日本語の時でも ハングルを同時表示できます。
上のMule-UCSを使って、この"UNICODEによる数値文字参照"を 利用できます。 mule-sysdp.elの中の mule-make-iso-character という関数定義を 一部変更します。 そして、w3-parse.elの中でこの関数を呼ぶ部分も修正します。
まずはmule-sysdp.elでの変更部分は次のとおり。
(originalのmule-make-iso-characterという関数は
character を返しますが、下の変更の結果、stringを返すようになります。)
(defun mule-make-iso-character (char) (if (<= char 127) char (case mule-sysdep-version (2.3 (make-character lc-ltn1 char)) (2.4 (make-char charset-latin-iso8859-1 char)) (3.0 (make-char 'latin-iso8859-1 char)) ((4.0 4.1) (if default-enable-multibyte-characters ; (make-char 'latin-iso8859-1 char) ;;;この部分を (if (not (ucs-to-char char)) ;;;以下3行のように変更する (concat "" (number-to-string char) "\;");;; (char-to-string (ucs-to-char char)));;;ここまで char)) (xemacs char) (otherwise char))))
次に、w3-parse.elでの変更部分は次のとおり。
(上の変更によりmule-make-iso-character関数の戻り値が変ったため。)
;;; General entity references and numeric character references.
という行のすぐ下です。
(let ((html-entities w3-html-entities)) (while html-entities (put (car (car html-entities)) 'html-entity-expansion (cons 'CDATA (if (integerp (cdr (car html-entities))) ; (char-to-string ;;;ここと ; (mule-make-iso-character (cdr (car html-entities))));;;ここを (mule-make-iso-character (cdr (car html-entities)));;;この1行に変える (cdr (car html-entities))))) (setq html-entities (cdr html-entities))))
最初自分は、mule-make-iso-characterという関数の定義を変更するだけでいいと 書いていました。しかし、これでは問題が発生することがわかったので、 上のようにw3-parse.elも変更することにしました。 ucs-to-muleという関数は、変換に失敗するとnilを返すので、これを char-to-stringやinsertに渡すとエラーになるからです。
注意: KS完成型コードに入っていないハングルは、IEでは表示できても、Muleでは扱えません。
w3mというテキストブラウザがあります。 これは、cygwinでコンパイルすれば、Windowsでも動きます。
このw3mをEmacs(Meadow)から動かすためのEmacs-lispプログラムが 「emacs-w3m」です。
詳しくは、あちこちのホームページなどを参考にしてください。
w3mには、多言語対応版などもありますが、 標準のw3mで十分のようです。 (多言語対応版のw3mは、UNIXの仮想端末上でハングルとかを 表示させるためのものだと思います、多分。)
標準のw3mを使っても、Meadow上ではハングルは表示されます。
麥谷邦夫さん作成のjitai.elというプログラムを利用して、 JISコードの漢字をKSコードの漢字に変換できます。 韓国人に日本語の電子メールを送るのに便利です。
このjitai.elはmule上で動く「日-繁-簡」コード変換のプログラムです。
東洋學研究者のための電腦四寶 道 氣 社
http://www.zinbun.kyoto-u.ac.jp/~dokisha/
から入手できます。
また、JIS⇒KS用のファイルである jitai-j2k.elが必要です。 これは、jitai-j2k.lzh の中に入っています。 これは、freewareの"hrks"というcode converterを使用して作りました。 (ただし、KSコードで複数読みのある漢字は、UnicodeのCJK互換漢字を使わないように 手作業で変更しています。) "jistogb"などと同様に"jistoks*"の設定を.emacsに書きこんでください。
jitai.elは、もともとMule2.3用なので、
そのままではMeadowでは動きません。
しかし、jitai.el内で以下の置換を行なえば、Meadow1.00(Emacs20?)でも
使用できるようになりました。
また、jitai.elにはどうも、次のような不具合があるみたいです。
(私が持っているのは Last modified at 20/11/1995 のものです。)
複数候補があるけれども確認をしない場合がうまく動かないみたいなのです。
だけど、もしも私の勘違いだったら、本当にごめんなさい。
jitai-convertという関数の定義の中で、
以下の変更をすると、とりあえずうまく動くみたいです。
("jistoks*"を使う場合は関係ありませんが。)
(if (setq seiji (aref convert-table (+ (* (if (< msb base-offset) 0 (- msb base-offset)) 94) (- lsb 161)))) (progn (if (listp seiji) (if (< msb 176) (if jitai-confirm-nonhanzi (select (char-to-string char) seiji) ;changed by chiyu (progn ;changed by chiyu (if (listp seiji) ;changed by chiyu (setq seiji (car seiji))) ;changed by chiyu (delete-char -1) ;changed by chiyu (insert seiji))) ;changed by chiyu (if jitai-confirm (select (char-to-string char) seiji) ;changed by chiyu (progn ;changed by chiyu (if (listp seiji) ;changed by chiyu (setq seiji (car seiji))) ;changed by chiyu (delete-char -1) ;changed by chiyu (insert seiji)))) ;changed by chiyu (progn (if (listp seiji) (setq seiji (car seiji)))
この変更のためのパッチ(jitai.patch)も、一緒にjitai-j2k.lzhの中に 入れています。
cygwinのgrepはコード変換をしないので、 euc-krなファイルは検索できますが、 JUNETやiso-2022-krなファイルも一緒に検索するのは うまくいきません。
lvは、NARITA Tomioさん作成の多言語less/code converter/grepです。
http://www.ff.iij4u.or.jp/~nrt/lv/
から入手可能です。
UNIX用ですが、MS-DOSでも一部動きます。
MS-DOSの場合、LSI C-86 Compiler 用のMakefileが付いていますが、
cygwinB20.1でもmakeできるみたいです。
(cygwinB19だと、libraryが足りないみたいで、makeできませんでした。)
lv -g -Ak <検索ハングル文字列> *
で、euc-kr、iso-2022-kr、junetで書かれたハングルファイルを
検索できます。
(-Aekとすると、出力がEUC-KRになるが、Meadowで使う場合、
-Akとしておくと、junetコードで書かれた日韓混在文で日本語も表示できる。)
従って、MeadowのM-x grepで使うには、
lv -g -n -Ak <検索ハングル文字列> *
とすればいいわけです。(-e オプションは使えないです。)
もしもうまくいかなければ、Meadowのメニューバーから
[Mule]→[Set language Environment]→[Korean]
を選択したら、うまくいくかもしれません。
(プログラムに渡るハングル文字列の文字コードが
正しく設定されるはずです。)
hrtoolとは、昔、日本語しか使えないパソコン通信上で
ハングルをやりとりするために開発された各種の方法
(HR形式やAN(アンニョン倶楽部)形式など)を
支援するツール群のことです。
詳しくは、
オルカランドのハングル工房
を参考にしてください。
簡単にいうと、HR形式は(実際の発音ではなくて)文字をローマ字化する一方法であり、
AN形式は、いわゆるShift-KSコードを区切文字と共にShift-JISの中に
挿入するものです。
で、元々のhrtoolはMS-DOS用なのですが、これを
GCC(GNU C Compiler)でコンパイルするためのpatchとmakefileを
千田俊太郎さんが公開されています。
さらに千田さんは、これをMeadowから利用するためのhrtool.elも
公開されています。
現在ではあまり使われていない形式ですが、Meadow上で 簡単に読めるのは、便利です。
OTFパッケージはpLaTeXでOpenTypeフォントを使うためのパッケージです。 (CID番号を指定して使う。) そして、おまけとして、Unicode番号を指定して中国語(簡体字・繁体字)、韓国語の フォント(グリフ)を表示させることができます。
Unicode番号を指定するのは面倒なので、ハングルをUnicode番号に変換する Emacs Lispを作ってみました。 (Mule-UCSパッケージが必要です。)
(2006年3月10日追記:
http://www.ceres.dti.ne.jp/~i-yasuda/tex/utf82tex.html
にあるように、 安田 功 さん作成のutf8toutfを使うと、EmacsからOTFパッケージを使うのが
便利になるようです。)
(せっかくなので、以前私が作ったEmacs Lispもそのまま載せておきます。)
mule2otf.zip
たとえば、test.texに日韓混在文を書いて、
M-x ks2utfk-buffer
とすると、ハングルがUnicode番号に変換されます。
M-x utfk2ks-buffer
とすると、元のハングルに戻ります。
これをpLaTeXで処理して、さらにdvipdfmxで処理すると、 PDFファイルができて、Acrobat Readerで表示できます。 (詳しくは、「日本語版Windows上でハングルを扱う−−−ソフトウェア編その2」 を参考にしてください。)
KS完成型コードに無い現代ハングルを入力するために、 字母を並べて{{:と:}}で囲む、という表記を使用しています。
\UTFK{}で文字化けする記号があるようです。 その場合は、代りに\UTFM{}を使うと、文字化けしないかもしれません。
kTeXとは、pLaTeX2eで日本語と同時にハングルを扱うためのマクロ及びフォント集です。 「日本語版Windows上でハングルを扱う−−−ソフトウェア編その2」 と「日本語版Windows上でハングルを扱う−−−日韓混在文編」 も参考にしてください。
自分にはローマ字表記がなじめなかったので、ハングルをローマ字に変換する
Emacs-LISPマクロを作ってみました。
hg2ktex.lzh
たとえば、test.texに日韓混在文を書いて、
M-x hg2ktex-hg-k
とすると、test-k.texというファイルが出来るので、
これをplatexにかけます。
この時、ローマ字としては、初声の"イウン"を'x'で表記するようにしました。
よって、.texファイルのプリアンブルには、
\usepackage{hangul}
\zeroisx
が必要になります。
Meadow(Emacs)からMP3ファイルの演奏を制御できます。 mpg123という、コマンドラインからMP3ファイルを演奏する プログラム(のWindows版)を利用します。
広瀬雄二さんのホームページ
http://www.gentei.org/~yuuji/
から、「そふとうぇあ」⇒「mpg123 mode」とリンクをたどった所に、
説明があります。
この説明どおりに各種ファイルを入手して、インストールすれば
使えるようになります。
mpg123.exe と mixer.exe は「mpg123のへや」というページ
(ほりかわ たくろー さん作成)から入手しますが、
mixer.exeへのリンクがちょっとわかりにくかったです(自分には)。
(setq mpg123-system-type 'freebsd)
と書いてある行の、すぐ上のリンクです。
残念ながら、id3elには、exeファイルがついていません。
C言語によるソースファイルから自分でmakeしないといけません。
(例えばCygwin B20.1でmakeできました。)
自分でmakeできない人は、身近な人に相談してみてください。
で、ここからが「Meadowでハングルを使う」という話です。
(問題点もあるのですが。)
このid3elがあれば、MP3ファイルのID3タグ
(曲名とか歌手名とかが記述されている)を編集できます。
編集したID3タグをsaveする時は、id3*codingという変数に
指定された文字コードを使います。
ということは、iso-2022-7bitなどの多言語用文字コードを使えば、
日本語の歌手名と韓国語の歌手名を、同時に表示できるわけです。
たとえば、
(setq id3*coding 'iso-2022-7bit)
とします。
音楽CDからMP3ファイルを作成するためのソフトはいろいろあります
(自分はRealJukeboxを使っています。http://www.real.com)。
MP3ファイルにした後、Meadow上でID3タグを変更するわけです。
これでうまくいく、と思ったら...、問題発生。
どうもID3タグでは、文字数(byte数)に制限があるみたいです。
長いタイトルは、全部入らないみたいです。
そして、iso-2022-7bitコードだと、エスケープシーケンスが付くので、
byte数を多めに消費してしまいます。
また、emacs-muleコードのハングルでID3タグを書いていたら、
日本語環境では文字化けする場合がありました。
(Latin-1環境とかchinese環境とかでは文字化けしていないのに。)
utf-8でも、文字化けする場合がありました。
ID3タグをEUC-KR(KSコード)で書いておいて、
韓国歌謡MP3ファイルを格納したディレクトリをmpg123-modeで
開く時は自動的にKorean-environmentになる、
というのもいいかも。
どうすればそんなhookがかけられるか、考えてみます。
(せっかくMeadow上でMP3ファイルが聞けるのだから、
やっぱりハングルを表示させてみたいのです。)
なお、手動でkorean-environmentに変更した後で
そのディレクトリをmpg123-modeで開けば、
EUC-KRコードのタイトルはちゃんと表示されます。
(逆にjapanese-environmentにした後でmpg123-modeにすれば、
指定したディレクトリ内のMP3ファイルは、
タイトルがShift-JISコードとみなされます。)
コマンドラインで動かすプログラムを、Meadowのshellモードで動かす、 という場合を想定しています。 この時、引数や結果表示にハングルを使うためには??
C-x C-m p で入力コードと出力コードを変更できます。 ここでeuc-krだとかutf-8だとか、指定すればいいわけです。
M-x rename-buffer しておけば、shellモードのバッファを複数使うことが できるので、それぞれ別々の文字コードを指定することも可能です。
Perl5.6はUTF-8に対応しているし、Perl5.8ではCodePage指定もできるそうなので、 結果表示(出力)にUTF-8を指定したい、なんてことも可能だと思います。 ただし、ファイル名は日本語Windowsの制約を受けるので、 ファイル名にハングルを使うことは、できないと思います。 (ひょっとして、WindowsXPなら可能なのでしょうか?)