Squeak3.9-final-7067 を自分好みにするためのメモ


Squeak-dev をほとんど追っかけていないせいもあって、知らないうちにファイナルになっていた 3.9 。いろいろと(おそらくたいした理由があってかなくてか…w)変えられてしまって気にくわないところもいくつかありますが、ちょっといじったかんじ、まあ 3.8 やそれ以前のバージョンに固執しつづけるほどの不都合もなく使えるようです(まだ分かりませんが…)。ということで、現在使用中の 3.8 ベースの SqueakPlugin-dev-527 に代わるメインの環境に耐えうる、オレ仕様にするための作業を行なったので、その手順を書いておきます。趣味に走っていますが、なにか参考になることがあればさいわいです。


仮想イメージとチェンジセットの入手

仮想マシンSqueak VM)は動作させる環境用のものを別途入手。


日本語を使えるようにする

abee さんに負けず劣らず again 機能(cmd/alt + j。後述。)が大好きな私としては、この機能を使いたいがためだけに Squeak をエディタ代わりに起動することもあるので、日本語が扱えることは比較的重要です。


いろいろと警告されますが、umejava さんが SqueakMap に登録してくださっている Japanese Environment Installer でインストールすることが可能なようなので、とりあえずはこれを使わせていただきます。

  • デスクトップメニュー → open... → SqueakMap Package Loader
  • Japanese Environment Installer → (黄ボタンメニューより)install
    • 警告に対して Yes


日本語のメニューは、ちょっと自分の手にはなじまない(…と、キーボードでメニュー項目を選択したいときもある。後述。)ので、インストール後に開く ReadMe.txt に記載のふたつの式を do it (alt/cmd + d) して、メニューだけ英語に戻します。

Locale switchToID: (LocaleID isoLanguage: 'en').
Locale currentPlatform: (Locale isoLanguage: 'ja')


これでメニューは英語のまま、データや必要な際の表示には日本語を扱えるようになります。たとえば、404 Blog Not Found:perl, python & ruby - chr() vs. Unicode の例は次のような具合に。

Character leadingChar: JapaneseEnvironment leadingChar code: 16r3B1   " => $α "
Character leadingChar: JapaneseEnvironment leadingChar code: 16r5F3E  " => $弾 "

$a と $𪚲 はなぜか文字化けします。Unicode に詳しくないので、これで良いのか悪いのかはわかりませんが、今のところは普通に普通の文字が扱えればいいので深くは追求していません(^_^;)。個人的には、漢数字電卓のときに苦労した、$× や $÷ のコピペでの問題(環境内でコピーしたものがペースト時に文字化けする)がなくなったのは嬉しいですね。ありがとうございます。


TrueType フォントを入れる

動的な Squeak 関連のプレゼンをするときは、パワポで…なんてぜったい考えられないので、そのときのために TrueType フォントも入れておきます。私は Win XP に付いてくる MSMINCHO.TTC、MSGOTHIC.TTC から MS明朝P とMSゴシックP(いずれもプロポーショナル版)を抜き出して使っています。


.ttc ファイルからのグリフデータの抽出には TTCFontSet class >> #newTextStyleFromTTFile: を起動して使いますが、デフォルトではMS明朝、MSゴシック(固定幅版)になってしまうので、とりあえず次のチェンジセットをファイルイン。


これで、プロポーショナル版を読み込み時のポップアップで選ぶ(MSMINCHO.TTC では font2、MSGOTHIC.TTC では font3)ことができるようになります。

TTCFontReader encodingTag: JapaneseEnvironment leadingChar.
TTCFontSet newTextStyleFromTTFile: 'C:\WINDOWS\Fonts\MSMINCHO.TTC'.
TTCFontSet newTextStyleFromTTFile: 'C:\WINDOWS\Fonts\MSGOTHIC.TTC'

フラップを整える

左下のナビゲータタブはなにかと便利なので出しておきたいのですが、日本語環境のインストール後、なぜか flaps... メニューにも現われなくなります。そこで、次の手順でフラップの再構築をしてから呼び出します。

  • Preferences の #showProjectNavigator をオン
    • デスクトップメニュー → appearance... → preferences... → morphic → #showProjectNavigator → オン
    • あるいは Preferences enableGently: #showProjectNavigator を do it (alt/cmd + d) 。
  • 現在のフラップを破棄&再構築後、ナビゲータを表示
    • デスクトップメニュー → flaps... → destroy all shared flaps → Yes
    • 改めて、flaps... → install default shared flaps
    • 改めて、flaps... → Navigator → オン


Preference Browser なるものが新たに登場した(デスクトップメニュー → Preferences & Services → 1. Preference Browser)ので、この Preferences ウインドウは近々引退でしょうか。


ペイントツールの使用色履歴パレットに基本色をあらかじめ入れておく

| recentColors |
recentColors := PaintBoxMorph classPool at: #RecentColors.
#(white black yellow magenta cyan blue green red)
   doWithIndex: [:colorSym :idx | recentColors at: idx put: (Color perform: colorSym)]

ペイントツールのバカデカいカラーパレットをなんとかする

いつのころからかバカデカくなって邪魔なカラーパレットを、元の使いやすいコンパクトなものに戻したいときは、次を評価します。

PaintBoxMorph classPool
   at: #ColorChart
   put: (ColorPickerMorph colorPaletteForDepth: 16 extent: 120@89)


あと、デカいまま使うにしても、枠が壊れていたりするのでそれ(+α)をフィックスするチェンジセットはこちら。

ワークスペースの accept と cancel が正常に動作するようにする細工

Morphic のワークスペースでは、いったん accept (alt/cmd + s) すると、cancel (alt/cmd + l) できなくなるというバグが長らく生き続けているので、これを機能拡張のかたちでフィックスしたものです。


ただ、ワークスペースには accept すると警告なしに閉じてしまえるようになる…という(他との整合性を優先した)仕様上の欠陥があるので、accept して一時保存したらすぐに return、delete などとして常に変更が加えられた状態(赤枠)にしておくことをお薦めします。まあ、閉じてしまってもガベコレされる前なら(もちろん accept してないと駄目ですが…)次のようにして救うことはできます。

| menu |
menu := MenuMorph new.
Workspace allInstancesDo: [:wksp |
   | contents |
   (contents := wksp contents) notEmpty ifTrue: [
      menu
         add: (contents first: (16 min: contents size))
         target: wksp
         selector: #spawn:
         argument: contents]].
menu popUpInWorld

本来は、各ワークスペース(のモデル)を管理するアプリがあってしかるべきなのでしょうが、まあおそらく、このワークスペースというものが作られた目的は、本当に“書き捨てのメモ帳”程度のものだったのでしょうね。


ファイルリストをエディタモードで使用時に choose another name... 後も引き続き編集可能にする細工

ファイルリストのエディタモードとは、ファイルストリーム(たとえば FileStream fileNamed: 'hoge.txt')に対する edit の送信や、デスクトップメニュー → open... → file...、あるいは、ファイルリストでファイルを閲覧時に spawn (alt/cmd + o) したときに起動することが可能な、ワークスペースのような1ペインのウインドウにファイルの内容のみを表示した状態を指します。内容を編集後、accept (alt/cmd + s) すると開いているファイルへの保存になるので、見た目が同じワークスペース(内容を仮想イメージ内でしか保持できない…)よりなにかと重宝します。

ただ、保存時に同名のファイルがあることになり必ず重ね書きの警告が出ることや、その際、ファイル名を変更(choose another name... を選択)すると、ペイン内容がディレクトリ内容表示に戻ってしまい、編集の続行ができなくなるという困ったことがあります。前者はたいした手間ではないのですが、後者は“エディタ”としては致命的なのでこれを修正して、編集を続行できるようにしたのが次のチェンジセットです。


併せて、ファイルリストのデフォルトのエンコードを .txt 時に限って UTF8 にする細工。本来ならファイルリストがファイルごとに判断する仕組みをしつらえてあげるのがスジなのですが面倒なので決め打ちで。

システムブラウザで新規メッセージカテゴリから、まぎらわしい ProtoObject の候補を排除する細工

システムブラウザで Object 直下にサブクラスを新たに定義したとき、メッセージカテゴリを追加(上段の第三ペインの黄ボタンメニュー → new category...)しようとするといくつかの候補が現れますが、これは本来リストアップされるべきでないカテゴリたちです。どうやら ProtoObject が新設されたときに生じたバグの模様。

コメントアウト(alt/cmd + shift + ") などのショートカット禁止を解除

Win 環境では、皆さん、コメントアウトにショートカットを使っておられないのでしょうか…(Mac では正常に機能するようです。なお、以前書いたコメントアウトを外す方法は Mac で異常動作を引き起こすので撤回しました。ごめんなさい)。

  • ParagraphEditor class >> #initializeShiftCmdKeyShortcuts をブラウズ
  • '9[,''' do: [ :char | cmdMap at: (char asciiValue + 1) put: #shiftEnclose: ]. を探してレシーバに #($" ${ $<) を追加('9[,"{<''' というような感じに変更)。
  • accept (alt/cmd + s)
  • ParagraphEditor initialize を do it (alt/cmd + d)

again (alt/cmd + j) と find again (alt/cmd + g) を交互に使えるようにするための細工

again は、Smalltalk システム標準のテキストエディタに装備された古典的な(つまり、今はほとんど誰も使っていない…?)機能で、検索と置換の両方を“モードレス”(ほぼ…w)にこなす、画期的なキーボードショートカットです。適当な場所に文字をタイプして again するとその文字を検索、文字列が選択された状態で新しい文字列をタイプして入力、あるいはペーストしてから again すると、置き換えられた文字列を探して同じ置き換えを行なってくれます(これを応用して大文字小文字を区別する検索もおこなえます。ちなみに、全置換は again many (alt/cmd + shift + j)。


一方の find again (alt/cmd + g) は、その前に検索 find (alt/cmd + f)した文字列(あるいは、文字列を選択して set search string here (alt/cmd + h) で指定。ただし OS X では cmd + h は横取りされて使えません…)を改めて検索する、いたって普通の機能のはずなのですが、again と交互に使うとうまく機能しないバグがあります。これを修正して、ついでに alt/cmd + g で探して必要か判断して、必要なときだけ(いったん ← キーで選択を外してから、改めて) alt/cmd + j で置換きるよう細工したのが次のチェンジセットです。

アンダーバーのグリフを ← にする後ろ向きな対処

いろいろと議論はあるようですが、やっぱり := はタイプするときウザイので環境内では _ を代入に使いたいところなのですが、3.9 では _ のグリフが従来の ← から _ に変えられてしまっているようです。バカですか?(つか、ならば ^ の ↑ も直せよ…と小一時間)


で、これをグリフの再修正…という非常に卑屈なw方法で元に戻します。残念ながらレガシーなビットエディタは Morphic ではうまく動かなくなって久しいので(直してもいいんですが、これだけのためにやる気もしないので…)、同じくレガシーな MVC プロジェクトに移動してさっさと済ませます。

  • デスクトップメニュー → open... → mvc project... → enter(クリック)
  • デスクトップメニュー → open... → workspace
  • TextStyle defaultFont latin1 edit: $_ を do it (alt/cmd + d)
  • ビットエディタを適当な場所に配置
    • 念のため 黄ボタンメニュー → file out でグリフを保存
  • 矢印に編集
  • 黄ボタンメニューから accept
  • ビットエディタ終了
  • デスクトップメニュー → previous project...
    • 必要なら作業に用いた MVC プロジェクトをウインドウを閉じて破棄

http://squab.no-ip.com:8080/collab/uploads/61/assignarrow.png

ちなみにこのビットエディタや、その応用の一つとしてフォントグリフを編集する機能は、MacPaint のファットビットモードや ResEdit の同種の機能の元になったものでもあります。

新しいウインドウ内のペイン(枠)のマウス操作時の挙動がおかしいのを修正

これまでは、ペイン(ウインドウ内の枠)の境界にマウスポインタを合わせてドラッグすると、その縦または横の境界線を共有しているペインの幅を変えることができました。が、3.9 の新しい GUI ではスプリッタと呼ばれる境界線にそれ専用のハンドルが設置されていて、ハンドル付近でないとマウスポインタが移動用のものに変わらないという仕様になりました(プリファレンスの #showSplitterHandles をオフにして従来に近い方式に戻すこともできます)。

ところが、マウスポインタが変わらないだけでじつはドラッグすれば枠を移動することができたりするバグがあり、これがひじょーに気持ち悪かったのでフィックスしました。


ついでに、Mac OS 9 時代に使えていて、OS X では無しになったウインドウ枠をドラッグするとウインドウごとドラッグできる挙動が何かと便利だった(3.9 から、ウインドウ枠の境界線付近でのサイズ変更ができなくなった代わりに、枠のドラッグでの移動ができるようになった…つか、ただの a Morph の挙動なんですが…)ので、ペイン枠でもこれに準じた挙動をするよう細工してあります。


各種プリファレンス設定

  • 削除したモーフをゴミ箱に溜めない。
    • Preferences disableGently: #preserveTrash を do it (alt/cmd + d)
    • もしくは、デスクトップメニュー → help... → preferences... → morphic → preserveTrash → オフ
  • メニュー項目の enter キーで選択決定、と、タイプした文字を含むメニュー項目を選択できるように。
    • Preferences enableGently: #menuKeyboardControl
    • もしくは、デスクトップメニュー → help... → preferences... → menus → menuKeyboardControl→ オン


以上、ざっとですが今思いつく範囲で列挙してみました。なお、作業中、適当に区切りのよいところで、仮想イメージの保存(デスクトップメニュー → save as... )もお忘れなく。


あと、セットアップとは関係ありませんが、今回、作業中に発見、もしくは、思い出した、デスクトップをクリックしたあとに(デスクトップメニューがポップアップするがこれは無視して…)使える便利なキーショートカットたちを、普段よく使っているものを含めてメモ。

  • 最前面のウインドウを閉じる → alt/cmd + w
    • これは、どちらかというと次の「ワークスペースを開く」と取り違えないために…
  • ワークスペースを開く → alt/cmd + k
  • ブラウザを開く → alt/cmd + b
  • ファイルリストを開く → alt/cmd + shift + L
  • トランスクリプトを開く → alt/cmd + t
  • デュアルチェンジソーターを開く → alt/cmd + shift + C

トランスクリプト、ファイルリスト、チェンジソーターについては、すでに開いているものがあればそれを最前面に持ってきてくれるという点が気に入っています。