FineView Software Labs





Delphi の外部エディタに xyzzy を登録

[ツール| ツールの設定...] をクリックし、ツールオプションダイアログで [追加] をクリック。ツールプロパティダイアログに以下のように入力。 (Delphi 2007 の場合)
--------------------------------------------------
タイトル: &xyzzy
実行時引数: $EDNAME -g $ROW
--------------------------------------------------

xyzzy をシェルモードで起動させるショートカットの作り方

デスクトップにxyzzyのショートカットを作成し、[プロパティ]を以下のように編集する。

例) Borland C++ Compiler のプロジェクトフォルダをシェルモードで開く
--------------------------------------------------
リンク先: c:\_utils\xyzzy\xyzzy.exe -e "(shell)"
作業フォルダ: c:\borland\bcc55\Projects
--------------------------------------------------
※ c:\_utils\ のところは適当に置き換える必要あり。


Borland C++ Compiler と 文字コード と xyzzy

Borland C++ Compiler でコンパイルできるソースコードは、文字コード: SJIS、 改行コード: CRLF のテキスト形式である必要がある。 ネットからダウンロードしてきたコードをコンパイルするときは、 文字コードや改行コードに注意を払う必要がある。 これを怠ると・・不可解なエラーに悩まされることに。

で、xyzzy での文字コードと改行コードの変換方法。

■ 文字コードの変更(カレントバッファに対して)
C-x C-k f とタイプし、ミニバッファの Encoding: で文字コードを指定する。

■ 改行コードの変更(カレントバッファに対して)
C-x C-k n とタイプすると、CRLF → CR → LF → CRLF の順に改行コードが切り替わる。

参考HP)
xyzzy の音 - 文字/改行コード - HIE no Page

補足1)文字コードの変更後は、save-buffer で保存する必要がある。 ただ、保存済みのテキストの場合は保存されないので(保存処理のキャンセルが働くため)、 なんらかの編集を加えてから保存する。

補足2)EUCを使っている場合でも、 使用している文字によってエラーが出たり出なかったりする。 エラーの種類も様々。コメント内だからエラーが回避されるということもない。


xyzzy で 文字コードの自動判定を100%成功させる方法

xyzzy には、ファイルオープン時に文字コードを自動判定してくれる機能がある。

ただ、文字数の少ないテキストだと判定に十分な情報が得られず SJIS となってしまうことも。 (→ これは当然な結果で、xyzzy が悪いわけじゃない。)

この場合、ちょっとした混乱を招くことがある。 例えば、UTF8 で保存したファイルを再編集しているつもりで、実は SJIS で編集していた!っということになる。 気づくのが遅れると、その後の修正作業が大変なことになる。

そこで、SJIS 以外のテキストを編集するときは、次の「おまじない」を適当な位置に埋め込んであげる。
<!-- @@ -->

これで SJIS/EUC/UTF8N の自動判定は100%成功するようになる。

※ 全角@マーク2個。

ファイルを開く(or 保存する)ときに文字コードを指定したい - xyzzy

関連付けや、C-x C-f (find-file)でファイルを開いていると滅多にお世話にならない ファイルオープンダイアログ。 ただ、このファイルオープンダイアログには、 文字コードを指定して開く(or 保存する)機能が用意されている。

ということで、ファイルオープンダイアログを使用して文字コードを 指定する方法。

編集対象のファイルを期待しない文字コードで開いてしまっている場合は、 一旦、kill-buffer し、「ファイル|開く...」 でファイルオープンダイアログを表示させる。 ダイアログで、目的の文字コードや改行コードを指定してあげれば Okay。 指定した文字コードは現在開こうとしているファイルに対してのみ適用される。

Firefox の「ページのソース」で xyzzy を起動したい

1) ロケーションバーで、about:config とタイプ。
(Ctrl+l でロケーションバーにフォーカス移動 & 全選択)

2) 設定は2箇所
view_source.editor.external true
view_source.editor.path c:\_utils\xyzzy\xyzzy.exe

editor.external を true にし、path に外部エディタのパスを指定する。

参考HP)
Firefoxの「ページのソース」表示を任意のエディタに設定する | That's Life "気になるニュースとブックレビュー"


特殊文字をエスケープキャラクタに変換して貼り付ける - xyzzy lisp

ソースコードをホームページにアップする際に必要となる 特殊文字(<, >, &, ")のエスケープ。

普段、[Shift]+[Insert] や、C-y を利用している場面で、以下の lisp を 使うと エスケープした状態で貼り付けることができる。

clipboard からの貼り付け
[Shift]+[Insert] → M-x escape-paste-from-clipboard
ミニバッファ上でのタイプ: es[spc]p[enter][enter]

region からの貼り付け
C-y → M-x escape-yank
ミニバッファ上でのタイプ: es[spc]y[enter][enter]

;; HTML用特殊文字をエスケープさせる
;; Special character → Escape character
(defun escape-htmlsc (from to)
  (interactive "r")
  (save-excursion
    (save-restriction
      (narrow-to-region from to)
      ; & // 最初に & をリプレイス
      (beginning-of-buffer)
      (perform-replace "&" "&amp;" nil t nil t)
      ; <
      (beginning-of-buffer)
      (perform-replace "<" "&lt;" nil t nil t)
      ; >
      (beginning-of-buffer)
      (perform-replace ">" "&gt;" nil t nil t)
      ; "
      (beginning-of-buffer)
      (perform-replace "\"" "&quot;" nil t nil t)
      )))

;; HTML用特殊文字をエスケープさせてペースト(clipboard 用)
(defun escape-paste-from-clipboard ()
  (interactive)
  (set-mark-command)
  (copy-region-as-kill (mark) (point))
  (narrow-to-region (mark) (point))
  (paste-from-clipboard)
  (escape-htmlsc (mark) (point))
  (beginning-of-buffer)
  (widen)
  )

;; HTML用特殊文字をエスケープさせてペースト(region 用)
(defun escape-yank ()
  (interactive)
  (set-mark-command)
  (yank)
  (copy-region-as-kill (mark) (point))
  (narrow-to-region (mark) (point))
  (escape-htmlsc (mark) (point))
  (beginning-of-buffer)
  (widen)
  )
■ 使い方
1) ~/.xyzzy または、siteinit.l に上記コードをコピーペースト
( siteinit.l を編集した場合は、xyzzy.w* を削除し再ダンプすること)
2) 適当にCソースなどをクリップボードへコピーし
3) xyzzy 上で、M-x escape-paste-from-clipboard を実行する

自由に使ってください。(’▽、’)ノ 改良自由。改悪も。

参考HP)
特定のchar をhtml の 正規な表現にする - しょぼしょぼすくりぷと xyzzy
ubulog: emacsでHTMLメタ文字をエスケープ
[elisp]<や>を&lt;や&gt;に置換 - 橋本詳解


ノートパッド(メモ帳)の Unicode

ノートパッドの Unicode への対応状況に関するメモ。( Windows XP )

あいうえお
と入力したテキストを各文字コードで保存し、バイナリを表示させてみる。
文字コード: ANSI
82 A0 82 A2 82 A4 82 A6 82 A8
→ SJIS (Shift JIS)

文字コード: Unicode
FF FE 42 30 44 30 46 30 48 30 4A 30
→ UTF16 Little endian BOM付き

文字コード: Unicode big endian
FE FF 30 42 30 44 30 46 30 48 30 4A
→ UTF16 Big endian BOM付き

文字コード: UTF-8
EF BB BF E3 81 82 E3 81 84 E3 81 86 E3 81 88 E3 81 8A
→ UTF8 BOM付き
赤字は、BOM(Byte Order Mark)。 Unicode で保存した場合、全て BOM 付きとなる。

参考HP)
Unicode - wiki
UTF-8 - wiki
UTF-16 - wiki
バイトオーダーマーク - wiki


コマンドプロンプト と Unicode

コマンドプロンプトは、SJIS と UTF16 Little endian に対応している。( Windows XP )
cmd_unicode.png
デフォルトコードページ(cp932)における文字の表示テスト。


コマンドプロンプト と UTF8

フォントの扱いに関するコマンドプロンプトのバグ的仕様:

a) ひとつのフォントを複数のコードページで使うことができない。 仮に複数のコードページに対して指定するとそのフォントは無効になってしまう。
例)
0 Lucida Console
437 Lucida Console // ← レジストリで、cp437 にも Lucida Console を指定
このように複数のコードページに対して指定した場合、Lucida Console は無効になる。 (→ プロパティのフォント一覧から Lucida Console が消える。)
この仕様のため、「MS ゴシック」を cp932 とそれ以外のコードページの両方で使用したくてもできない。

b) a) の問題以前に「MS ゴシック」などの日本語フォントをUTF8用のフォントとして指定できない。 各コードページには、指定できるフォントと指定できないフォントが存在する。 詳細は不明。

[ 試してみたこと ]
MeiryoKe_Gothic, MeiryoKe_Console は、レジストリ932(cp932)に追加可能。 ただしレジストリ0 には追加できない。 MS 明朝(MS Mincho)は、932, 0 のいずれにも追加できない。 Monacoは、0 へ追加可能。但しWindows 7のみ。XPでは失敗。Vista未確認。

c) cp65001(UTF8)のフォント設定が失敗すると、cp932のフォント が引き続き使用される。

d) cp65001で英字以外のフォントを指定したとき部分再描画が正しく動作しない。
( Windows XP/Vista )
d-1) 文字出力時に文字の一部が欠けて表示される。
d-2) 部分再描画時に文字が重なって表示される。
→ なんらかの日本語フォントでの表示に成功している場合、 フォント名だけが設定され、文字幅の計算に必要なフォントサイズが 設定されていないように思える。
スクロールバーを操作(or リサイズ)して全体を再描画させれば、 正しく表示させることは可能。
Windows 7は、再描画処理に問題なし。

そのほかの仕様:
e) BOM 付きの UTF8 に対応していない。BOM付きの場合、先頭にゴミが表示される。

バグを回避しつつ、UTF8の日本語を正しく表示させる方法:
はじめに、デスクトップにコマンドプロンプトのショートカットを作成する。 ショートカットごとに設定が保存されるので、 設定がおかしくなった場合はショートカットの作成からやり直す。

コマンドプロンプトのデフォルトフォントは、各コードページとも 「ラスタフォント」になっている。
このままだた、UTF8で日本語は表示されないので、 cp932のフォントに「MS ゴシック」を指定し、 chcp 65001 で cp65001 へ遷移する。 (※ cp65001の状態でプロパティを確認するときは、 ダイアログを 常にキャンセルで閉じるようにする。 ← 重要)

おそらく、この段階で、Vista や、7 では UTF8 による日本語表示が できるようになっている。フォントのプロパティを表示させようとしたときに、「ポイントサイズは 5〜72 を 指定してください」といった警告が出ていれば、まず間違いなく OS はフォントの取得に 失敗していて、このとき cp932 のフォント(「MS ゴシック」)が cp65001 でも使用できるようになる。 (※ 警告に対して親切にポイントサイズを指定してはいけない。← 重要)

UTF8のテキストファイルを用意し、 type utf8n.txt などとして日本語が正しく表示されることを確認する。

問題は XP 。上記の方法で、日本語表示されない場合はレジストリを編集することになる。


上の手順の続き - XP向け レジストリの扱いは自己責任で
0) cp65001 のプロパティで敢えて Lucida Console を選択し、OK をクリック。 更に、「このウィンドウを起動したショートカットを変更する」にチェックを入れてOKをクリック。

1) コマンドプロンプトを閉じ、コマンドプロンプトのショートカットのプロパティをクリック。 オプションタグを開き、現在のコードページが未指定になっているときは 932 に戻す。 続いてフォントタグを開き、フォント「MS ゴシック」、サイズ 18 にしておく。

2) レジストリエディタを開きレジストリを編集する。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont
Lucida Console のキー名を 0 から、100.0 に変更。値はそのまま。
(キー名を数値以外にすると、ここで紹介している手順は成功しないので注意。)

3) コマンドプロンプトを起動。 chcp エンタで、現在のコードページが 932 であることを確認。 cp932のフォントが「MS ゴシック」であることも確認。 chcp 65001で、cp65001(UTF8) に遷移する。OSは、フォント Lucida Console を見つけられずに フォントの選択に失敗。「MS ゴシック」が引き継がれる。

4) type utf8n.txt などで、日本語が正しく表示されることを確認する。

5) レジストリで、Lucida Console のキー名を 0 に戻す。 (ここでレジストリを元に戻してもフォントの設定は、「MS ゴシック」のままとなる。)

6) UTF8専用のショートカットとするなら、ショートカットのプロパティを開き、 リンク先を次のように編集しておく。
%SystemRoot%\system32\cmd.exe /k chcp 65001


cmd_utf8_meiryo.png
UTF8で、MeiryoKe_Console を使用しているところ ( Windows XP )
@@は、xyzzyの自動判定を助けるために意図的に挿入。文字化けではない。