第44回
■
■SqueakではじめるSmalltalk入門 第44回
■
本連載では、名前は知っていてもなかなか触れる機会のないSmalltalkについて、最近話題のSqueakシステムを使って紹介しています。今回は、簡易ファイラであるファイル・リストに備え付けのテキストエディタ機能についてです。
ファイル・リストは、Finderなどの一般的なファイラが持つディレクトリ・ブラウザ機能の他に、テキストエディタの機能を備えています。下の大きめのペインはそのためのもので、選択したファイルの内容は即座にこのペインに表示されます。選択したファイルがテキストファイルなら、その内容の確認はもちろん、編集して保存することも可能です。編集後の内容を保存するには、下のペインの黄ボタンメニューから「了解」(英語メニューではaccept)を選択します。キーボードショートカットはcmd+Sです。
Macのアプリと違い、ファイル・リストは保存の際、常に重ね書きの確認をとりにきます。重ね書きでよいときは、ポップアップから「overwrite that file」を選びます。名前を変えて保存したいときは「choose another name」のほうを選びます。改めて、a FillInTheBlank(入力欄オブジェクト)を使って保存先を訊ねてくるので、そこで適当なファイル名を入力して「了解」します。
[fig.A]重ね書きの確認ポップアップ
なお、ポップアップの「cancel」やファイル名入力欄の「取消」を選んだとき、エラー(ノーティファイア)が表示されますがこれは無視して(閉じてしまって)構いません。
大きなファイルは、とりあえず最初の5000バイトだけが表示されます。下のペインの黄ボタンメニューから「get entire file」を選択することで、強制的に全体を読み込むことが可能です。ただ、ファイル・リストのテキストエディタ機能はあまり凝ったしくみにはなっていません。むやみに巨大なファイルを読み込もうとすると、なにかと支障をきたすことがあるので注意してください。もっとも、このファイル・リストに限らず、Squeakシステム自体、大きなサイズの情報を扱うことは苦手なのですが…。
開こうとするファイルがテキストではなくバイナリ形式の場合は、ちょうど、Macでテキストエディタを使ってバイナリファイルを強制的に開いたときと同じ状態になります。その内容は意味をなしませんが、黄ボタンメニューから「view as hex」を選んで表示モードを十六進表記に切り替えることで、ある程度の対応は可能です。ただ、モード切り換え後は編集結果を保存できないなどの制約がありますから、あくまでオマケ的な機能だと割り切ったほうがよいでしょう。
ファイル・リストは、上のペインにあるディレクトリブラウザの機能を切り離して、下のペインだけ、つまりテキストエディタとしてのみ機能させることも可能です。じつは、これまで何度か出てきた
(FileList fileNamed: 'test.txt') edit
という式は、test.txtというファイルを、このテキストエディタ“モード”のファイル・リストで開くためのものでした。ファイルストリームへのeditの送信によって起動するメソッドの定義は次のようになっています。
FileStream >> edit
FileList openEditorOn: self editString: nil.
これと同じことは、デスクトップメニューの「開く…」→「ファイル...」でポップアップからファイル名でファイルを選んで開く作業でもできます。
テキストエディタモードで動くファイル・リストのウインドウの見た目は、ワークスペースのそれにたいへんよく似ています。これは、両者がまったく同じクラスに属するGUIオブジェクト(ウインドウ、テキスト編集枠)により構成されているためで、まあ当然といえばそれまでです。ただ、それぞれの“中核”にある(つまりMVCでいうところの「モデル」として働く)オブジェクトが別物であるため、その振る舞いには違いが生じるカラクリになっています。目に付きやすい所では、たとえば、両者では黄ボタンメニューの内容が異なります。
[fig.B]同じGUIオブジェクトでもモデルが違えば振る舞いも違ってくる
さて。最後に、もともとの話題であった日本語ファイルについて。残念ながらNihongo7では、日本語ファイルのファイル・リストでの扱いにはちょっとした問題があります。普通に開いただけでは、ファイルの内容が文字化けしてしまうのです。たとえば、第42回で作ったシフトJISのファイル「ShiftJisExample.txt」(もしくは、Macのテキストエディタで作成した適当な日本語テキストファイル)を「開く…」→「ファイル...」や次の式で開こうとしても文字化けしてしまい、その内容は正しく表示されません。
(FileStream fileNamed: 'ShiftJisExample.txt') edit
Nihongo6まではきちんと表示されていたのですが、多言語化機構の公式英語版への取り込みに際して行なわれた仕様見直しの影響で、ファイル・リストの表示には常にa Latin1TextConverterが使われるようになってしまったのがこの文字化けの原因です。黄ボタンメニューの表示モードの切り換え「view as encoded text」で適切な文字コードを選択することで、とりあえずこの問題は回避できます。
[fig.C]文字コードの切り換え
ただ、ファイルを開くたび、文字コードをいちいち切り換えるのは面倒ですし、十六進表示モードへの切り換え時同様、編集後の保存ができないなど、使い勝手の面での不満も残ります。そこで次回は、.txtまたは.textという拡張子のファイルを開いたときだけは、デフォルトのa Latin1TextConverterの代わりにa ShiftJISTextConverterを使用してくれるように、ファイル・リストの機能をちょっとだけいじってみることにします。
このページを編集 (4748 bytes)
|
以下の 1 ページから参照されています。 |
This page has been visited 910 times.