vieweditattachhistorytopchangessearchhelp

ウインドウ、メニューの扱い方 …とオブジェクト談義ちょっと

ではウインドウの操作の方法やメニューの出し方などについて説明しましょう。--sumim - 2002-11-21, 15:36:24

ちなみに、仮想イメージの内容は、終了時に保存しなければ、手を加える前の状態(すなわち、最後に保存操作をしたときの仮想イメージの状態。他のコンピュータ環境でいうところのサスペンドに似ています)からはじめられますので、保存する気がはなからなければ、思いっきりいじってしまって大丈夫です。--sumim - 2002-11-21, 15:40:14

なので、すでに画面に出ているウインドウを使って説明しましょう。--sumim - 2002-11-21, 15:40:46

External Image

まず、ウインドウのアクティべーションですが、Mac と同様、ウインドウの一部をクリックすることで行なえます。ただ、OS 9 とは違い、クリックする前からウインドウの各種ボタンはアクティブなので、機能を持った場所以外をクリックする必要があります。この操作でウインドウはアクティブ、つまり最前面に出てくるわけですが、タイプした文字を入力するためにはもうひとつ作業が必要になります。それはマウスポインタでウインドウのテキスト編集領域の中を指し示すという作業です。改めてクリックする必要はありませんし、こうしないと必ず入力できない…ということでもありません。が、マウスポインタが別の場所を指し示していると、注目しているウインドウへのテキストの入力はできないことがあります。これは、ウインドウがいくつかのペインに区切られているときも同様です。少々面倒ですが、入力したい場所を必ず指し示しておく習慣をつけておくほうがよいでしょう。これは、Smalltalk-80 時代のなごりです。当時は、マウスポインタが別の場所を示していると決して、文字入力はできませんでした。今は、それほど頻度は高くないのですが、そういう事例も起こりうるようですので、あれっ?と思ったらマウスポインタの場所を確認するようにしてみてください。--sumim - 2002-11-21, 15:49:09

入力したテキストが挿入ポインタの場所に挿入されること、delete キーで削除、上下左右のカーソルキーやマウスポインタでの直接クリック指定で挿入ポインタの位置が移動できること、始点から終点までのドラッグ、shfit-クリック、もしくは、shift-上下左右矢印キーで選択ができるところなどは、Mac とほぼ同じです。デモでも申し上げましたが、作った人が同じなので当たり前っちゃあ、当たり前ですね。--sumim - 2002-11-21, 15:57:59

ただちょっとずつ違うところもあります。たとえば、shfit-矢印キーによる選択の場合、Mac では、最初に挿入ポインタがあった場所を覚えていて、そこから後先の指定した場所まで選択されますが、Squeak では直前までに選択された領域を広げるように、つまり、←なら選択領域のひとつ前の文字を、→なら選択領域のひとつ後の文字を選択領域に新たに加えるように振る舞います。--sumim - 2002-11-21, 16:04:29

テキスト上でのポインタの移動などは了解です.一通り試してみました.なるほど,領域の拡大だけ気を付けていれば違和感はないです.--人狼 - 2002-11-21, 16:24:00

>保存する気がはなからなければ、思いっきりいじってしまって大丈夫
安心して(間違いを恐れずに)操作出来ますね.

>クリックする前からウインドウの各種ボタンはアクティブなので
OS Xのクローズボックスやらと同じ感じですね.

>改めてクリックする必要はありませんし
なるほど.確かにマウスポインタがタイトルバー(と,呼んで良いのでしょうか?)にある時は入力されませんね.
でも,キャレットを移動する場合はクリックが必要ですよね…例えば,あるテキストファイルを読み込んで表示しているウィンドウに,最初に文字入力する場合はキャレットがどこにあるかは,そのウィンドウ(を作っているオブジェクト)次第と言う事でしょうか? --人狼- 2002-11-21, 16:05:10

そうですね。挿入したい場所をきちんとクリックしてキャレットの表示を確認してから入力をはじめるのが確実だと思います(そうすれば、必然的にマウスポインタは入力欄付近にとどまるはずなので)。ポインタがきちんと領域に収まっていなくても入力できたりできなかったりするのは、新しい GUI フレームワークへの移行期における GUI 仕様の不徹底だと思ってあきらめています。--sumim

了解しました.幸いにも(?)私は文字入力する時はキャレットを指定してから,と言う癖がありますので問題ないです.--人狼 - 2002-11-21, 16:25:24

ダブルクリックによる単語の選択はしくみからして違います。ちなみに、Squeak にはダブルクリックという操作はありません(!?)。でも、ダブルクリックで単語の選択ができますよね? これはどうしてでしょう。--sumim - 2002-11-21, 16:06:22

あてずっぽうですが.


∴単語選択は「キャレット」と言うオブジェクトが実装している.

かな?--人狼 - 2002-11-21, 16:28:48

オッケーです。キャレットは実はオブジェクトとしては実装されていませんが、仕様としてはご考察どおりです。キャレットのクリックが Mac でいうところのダブルクリックとほぼ同じ働きをします。ですから、Squeak ではダブルクリックとして認知させるための間隔を指定する設定は必要ありません(笑)。何分後であろうと、キャレットをクリックすればそのキャレットが含まれる単語の選択になります。--sumim - 2002-11-21, 16:33:02

ニュアンスの問題かも知れませんが…
>キャレットは実はオブジェクトとしては実装されていません
≠キャレットはオブジェクトではない
なのでしょうか?「実装されていない」と言うところが,少し微妙な感じがしますが…

オブジェクトとして設計することもできるが、その必要性が感じられなかったのでそうはならなかった…と考えています。例としては悪いかも知れませんが、プログラミング言語としての Smalltalk において、変数がオブジェクトではない…というのと似たような状況だと思います。要は“設計”の問題です。--sumim

なるほど.オブジェクトにする必要が無かったので,オブジェクトにはしなかった,と言う事ですね.う〜ん,難しく考えすぎかもしれませんが,「ではキャレットは一体何?」と言ういやらしい謎が(^^;

いや。別にいやらしくはありませんよ(笑)。キャレットは、そうですね、編集中の文字列(これはオブジェクト)の注目点(当該オブジェクトの内部情報)とそこに描かれたピクセル(画面表示といううオブジェクトの内部状態の一部)とでも申しましょうか。複数のオブジェクトが協調して作り上げた“状態”ですね。--sumim

なるほど!状態ですね.すっきりしました.オブジェクトのステータスが目に見えると言う事なんですね.--人狼

Smalltalkをプログラミング言語として見る時には変数はオブジェクトではないのですね.プログラミング言語としてのSmalltalkに話しが及んだ時には苦労しそうです.--人狼

ともあれ,キャレットのクリックがMacにおけるテキストのダブルクリックと「ほぼ同じ」動作をすると言う事ですね.確かに5分放置しても単語が選択されました.--人狼 - 2002-11-21, 16:42:18

そうです(>ほぼ同じ)。では、続けましょう。キャレットのクリックによる選択機能は、実は単語の選択に限らず、いろいろなバリエーションを持っていてこれは、キャレットが置かれている場所によって区別されます。例えば、キャレットがパラグラフの文頭/文尾にあるときは、そのパラグラフ全体の選択になります。編集画面の最初の文字/最後の文字の直前/直後なら、その文章全体の選択(select all)になります。これは、キーボードショートカットの cmd-a と一緒です。--sumim - 2002-11-21, 16:56:26

[]、{}、()、<> などの括弧関係の特殊文字のひとつ内側にあるときは、対応する括弧で閉じたテキストの選択になります。このとき、cmd-[{< 、もしくは ctrl-9 (cmd-shift-数字は Mac OS では FKEY として予約されているため cmd-( は使えないのでその代わり)をタイプすることで、括弧を外したり再び付けたりができます。ちなみに、この括弧の追加機能は最初から括弧のないところで選択した普通の選択文字列に対しても働きます。--sumim - 2002-11-21, 17:01:08

選択機能は一通り試してみました.括弧関係の挙動も確認出来ました.

括弧を付けたりはずしたりは選択文字列に対して,またはキャレットの場所で行われますね.と,言う事は「選択文字列」と言うのはキャレットと大いなる関係がありそうです.--人狼 - 2002-11-21, 17:11:11

言われてみれば、確かに、編集中の文字列の選択部分の最初と最後が一致した場合にキャレットが表示される仕組み(内部的な処理)になっています。--sumim - 2002-11-21, 17:15:08

選択部分の最初と最後が一致した場合にキャレットが表示されるのですが.なるほど,興味深いです.--人狼 - 2002-11-21, 17:21:21

ウインドウの説明をしようと思っていたのですが、メニューコマンド(select all)とキーボードショートカットの話がでましたので、こちらを先にやっつけておきましょう。--sumim - 2002-11-21, 17:17:06

助かります.Macな人はキーボードショートカットが好きですから(苦笑)--人狼 - 2002-11-21, 17:21:52

選択した文字列に対するコマンドは、編集中のペイン内で黄ボタン押すことによって呼び出すことができる「黄ボタンメニュー」にあります。黄ボタンメニューはたいてい2面あって、黄ボタンメニューの more... を選択するか、黄ボタンを押すときに shfit キーをおしておくかでもう一つのメニュー「シフト黄ボタンメニュー」を呼び出せます。Mac では、メニューバーに整理されていますが、Smalltalk ではここにごちゃっとまとめられています。お馴染みの copy、cut、paste、undo、find... や、フォントやサイズの変更も全部ここにあります。項目に追記されている括弧内のアルファベットは、その項目がキーボードショートカットで実行できることを示しています。ちなみに大文字で示してある場合は cmd-shift-アルファベット というキーコンビネーションになります。--sumim - 2002-11-21, 17:22:23

External Image External Image

すでに書いたように、このメニューの内容は、Win の右クリックメニューや Mac のコンテキストメニューのように選択対象によって変化することはありませんが、ペインやそれが管理する情報の種類によって項目が追加されたり削除されることがあります。--sumim - 2002-11-21, 17:28:48

>選択対象によって変化することはありませんが、ペインやそれが管理する情報の種類によって項目が追加されたり削除されることがあります。
済みません,今一つイメージが掴めないのですが.具体的に実感出来るのは,どういった場合でしょうか?--人狼 - 2002-11-21, 17:31:56

今使っているのはペインがひとつのシンプルな Workspace というウインドウなのですが、これが、FileList や Browser、Inspector などといった別のウインドウになったときに実感できると思います。--sumim

了解いたしました.なるほど,確かにBrowserではペインによって,メニューの内容が変化します.「選択対象」によっては変化しないけれども,メニュー表示をしようとした「ペイン」(だけではないかも知れませんが)によって変化することがあるのですね.

「黄ボタンメニュー」ですね.more...でメニューの切り替えが出来るのですね.切り替えた後にmore...を選ぶと元に戻る.

シフト+黄ボタンメニューで最初からもう一つのメニューを最初から呼び出す事も出来る.この時もmore...の挙動は同じ.

ショートカットは試してみました.覚えるまでに,ちょっと時間がいりますが,代ジョブだと思います.--人狼 - 2002-11-21, 17:29:02

で、そのキーボードショートカットなのですが、実はここに書いてあるのはほんの一部でしかありません。実は、Squeak ではほぼすべてのアルファベットキーにキーボードショートカットが割り振られています。詳細は、help... → command-key help にあるのですが、分かりにくいものがあるのでこれを説明しましょう。あ、その前に黄ボタンメニューをさらっておいたほうがよさそうですね。図で、赤で示したものはおいおい説明しますので、まだ試さないでください。--sumim - 2002-11-21, 17:38:53

ん〜っと.あぁ,そうか.アプリケーションと言う概念が無いので,ショートカットはシステムワイドなのですね.

オブジェクトで独自のショートカットを定義するのは違反なのでしょうか?

そんなことはないですよ。ただデフォルトのものがかなり便利なのでそれをわざわざ置き換えてまで…というのが少ないだけだと思います。あとは、せっかく 50 個ちかく覚えたショートカットをほいほい変えられるのも困る…という本音もちらほら(笑)--sumim

デフォルトのショートカットが便利なのですね.了解です.
>わざわざ置き換えてまで
と,言うことはオブジェクトでショートカットを実装しようとすると,デフォルトのショートカットをオーバーライド出来ると言う事ですね.これは,ひょっとしてショートカットだけの話題ではなくて,オブジェクト(と,言うかクラス?)の親子関係の話しなのかしら?--人狼 - 2002-11-21, 17:47:45

ずばりそのとおりです。キーボードショートカットや黄ボタンメニューの内容や機能は(ってそれだけじゃなくてあらゆる機能が…ですが(^_^;))たぶんイメージしておられるように好きなものに置き換えての実装が可能です。--sumim - 2002-11-21, 17:50:06

と,言ってもヘルプを見る限りすべてのアルファベットに割り当てがありました.--人狼 - 2002-11-21, 17:42:28


なるほど.いや,なるほど.これは凄い事ですね!う〜ん,そうか.オブジェクトかぁ.目からうろこが沢山落ちました(^^;

さて,ちょっと話題からそれますが.(sumimさんが読まれたら消して頂いて結構です)
私は,家では何かと忙しいので(ネコの奴隷です),平日・会社にいる間しかゆっくりとSqueakを触れませんので,夜間および休日は休講として頂けると助かります.わがままを申し上げて済みません.--人狼 - 2002-11-21, 17:52:45

了解しました。ま、あえて休講ってことにしなくとも、当初申し上げたとおり、私が暇な時間に適当に書きためておいて、適当なところでレスポンスをお待ちする…という形式でゆきたいと思います。今回のようにたまたま二人ともオンラインのときには、こんなかんじでのやりとりも可…という具合で。たとえば、私はここでふらっと食事に行こうとしていましたから、お互いにすぐにレスがなくとも気にしないというふうでいきましょう。--sumim

了解しました.では,今日はここで失礼させて頂きます.家からも時間が許せば見に来ます.有り難うございました.--人狼 - 2002-11-21, 17:59:24

と,言うわけで赤意外の部分の黄メニューをさわってみました.
find...→検索
find again→現在の検索文字列で次を検索
set serach word→選択範囲を検索文字列とする
do again→不明
undo→直前の操作の取り消し
copy→選択範囲をコピー
cut→選択範囲を切り取り
paste→copy/cutされたものを貼り付け
paste...→定型句の貼り付け
accept→不明(ダイアログボックスでは,OKに相当?)
cancel→不明(ダイアログボックスでは,キャンセルに相当?)
set font...→フォントの選択(選択範囲)
set style...→スタイルの選択(全範囲)
set alignment...→配置の選択(選択パラグラフ?)
recognizer→不明.ウィンドウ内で描画出来て,その後にダイアログが出てきますが用途不明
spawn→不明.なにやら,ウィンドウの中がプレインテキストで表示されてるっぽ.だから「卵」なのかな?
definition of word→Scamper(WEBブラウザ?)が開いて,何やらアクセスしようとしていますが,会社のプロクシを超えられなかったみたい.
verify spelling of world→単語のスペルチェック.っぽいけど,やはりプロクシの壁でアクセス不可と言われてしまいました
translate it→単語の翻訳.っぽいけど,プロクシが(;_;)
choose language→A語からB語への翻訳(tarnslate itによる?)のAとBを決める
save contents to file...→ウィンドウの中をファイルに保存?(ファイルはどこに?→.imageの中?)今回はテキストだったけど,全てのオブジェクトが保存可能?
send contents to printer→ウィンドウの中を印刷するのかな?プリンタが無いので何もおきませんでした.
printer setup→プリンタの設定
と言う感じでした--人狼 - 2002-11-22, 10:11:51

おお。すばらしい! では、この順に補足を試みてみましょう。

do again ですが、これは Mac にはない考え方ですね。使いようによってはかなり便利です。たとえば、is を選択して was とタイプします(別の文字列のペーストでも構いません)。その直後に do again (cmd-j) すると、次の is が was に置き換わります。注意としては this の is も置き換わってしまうので、is のような短い単語ではしない、前後のスペースをうまく利用する…などの工夫が必要です。ちなみに cmd-shift-j 、つまり cmd-J ではすべてを一気に置き換えてくれます。replace all 的ですね。--sumim
- 2002-11-22, 12:20:24

accept はちょっと難しい概念です。その場、というか関わるオブジェクトに合わせていろいろな意味合いを持ちます。例えば、今使っている書き捨てのメモ帳である Workspace では「一時保存」的ニュアンスがあり、cancel で前回 accept した内容に戻すことができます。Browser では、この accept をトリガーにコンパイルとリンクの作業をします。FileList では、内容のファイルへの保存になります。すでに書かれているように、入力を促すダイアログボックスのようなもの(FillInTheBlank と呼ばれるオブジェクトです)では、Mac でいうところの OK と同じ役割りをします。まさに猿沢の池ですね。--sumim - 2002-11-22, 12:39:03

recognizer はアラン・ケイがむかし、Lisp の一種の Scheme で書いた手書き認識エンジンを Smalltalk に移植したものです。Graffiti ライクに動作します。基本的に学習させないと認識されません。答えが分からないと FillInTheBlank が現れるので、ジェスチャーに割り当てたい文字を入力して accept します。ウインドウ以外の場所をクリックすると機能を停止します。Xerox が Palm に対して起こしていた訴訟のそれとは違うようですが、こうした技術は 70 年代にすでに PARC ではよく知られたものだったようです。返すがえすも、すごい研究所でしたね。>PARC --sumim - 2002-11-22, 12:45:54

spawn は「卵」というよりは、(同類を)産み増やせ! というニュアンスです。Workspace では accept した内容をいまのウインドウに残し、編集中のテキストを含んだ別の Workspace を開きます。Workspace に限らず、多くのテキスト編集が可能な場所で cmd-o とすれば、編集中のテキストを含む Workspace を開くことができる機能…と覚えておくとよいでしょう。ちなみに、accept 同様、実行する場所によって若干機能が変わることがあります。--sumim - 2002-11-22, 12:51:26

save contents to file... は、通常、我々の考える Save As... に当たります。文字通り、Workspace の内容をプレーンテキスト形式(指定した名前に拡張子 .text を自動追加)で保存してくれます。指定されているフォント、サイズ、スタイルは保存されません。Workspace は「書き捨て」のメモなのでとっておかなければならない内容を書き留めておくのには向いていませんが、それでもメモを書いているうちに「ああ、これは取っておきたいな…」と思うことがままあります。そんなとき、いちいちファイラ(FileList)を開いて、コピペ…などとしなくてもよいようにこの機能があります。--sumim - 2002-11-22, 13:00:27

acceptsave contents to file... に絡めて、Workspace についてひとつ。 たしかに「書き捨て」メモの Workspace ですが、それにつけても“おバカ”な仕様が 70 年代から放置されて続けています。それは、accept するとウインドウを警告無しで消すことができる…というものです。たしかに仕組み上の理論的な美しさではこれが正解なのですが、使い勝手としては最低です。そこで、不用意にウインドウを閉じて内容を失ってしまわないように、気になるメモは accept 後に放置せず、なにかしらの編集作業(改行後、削除とか)をほどこしておくよう心がけるのがよいでしょう。不幸にもウインドウを消してしまった場合でも、
Workspace allInstances collect: [ :inst | inst contents ]
を inspect-it することで大抵、救うことができるはずです。--sumim
- 2002-11-22, 13:24:17

なるほど.確かにaccpetしたら簡単に閉じる事が出来てしまいました.う〜ん.確かに理論的には美しいですよね,dirty/not dirtyと言う判断は.でもいくら使い捨てとは言え,使い勝手としては厳しいですね.私は最初はスティッキーズのような物を想像していましたが,もっと,はっきりと「使い捨て」なのですね.accept後に放置しない,気を付けます.--人狼 - 2002-11-22, 13:43:06

do again(cmd-j)は,find and replaceなのですね.そして,Shift-cmd-jだとfind and replace allになるのですね.ただし,最初の一回のfind and replaceは手動ですね.--人狼 - 2002-11-22, 13:16:10

そうです。--sumim - 2002-11-22, 13:26:03

acceptは,今一つ判っていません.関わるオブジェクトで色々な意味を持つとは多態性(=ポリモーフィズム)と言う事でしょうか?猿沢の池だから,違うかな.猿沢の池は,手を打つ行為も,それを見る(聞く)立場によってとらえ方が違うって話しでしたよね.ポリモーフィズムとは違うかも.
ともあれ,Workspaceでcancelすると,前回acceptした状態に戻ると言う事ですが,Workspaceを一つ用意して,ばたばた文字を入力して accept.さらに文字を入力してcancelしてもacceptした状態にならないのは,なぜなんでしょう?--人狼 - 2002-11-22, 13:25:19

おお。失礼しました。これは仕様変更(いわゆるバグ?)というやつです(^_^;)。--sumim - 2002-11-22, 13:27:52

了解しました>仕様変更--人狼 - 2002-11-22, 13:39:15

recognizerはOKです.無垢な手書き認識エンジンで,自分のスタイルで文字を覚えていってくれるんですね.すごいです.これが70年代によく知られていたとは,本当にトンデモな研究所ですね>PARC--人狼 - 2002-11-22, 13:29:17

spawnは「産めよ増えよ」なんですね.
>テキスト編集が可能な場所で cmd-o とすれば、編集中のテキストを含む Workspace を開くことができる機能
なるほど.いや,これはいいなぁ.全選択→コピー→新規テキストにペーストなんてしなくても,ここまで一気に行けるとは便利です.よくやりますもの>テキストの二重化.--人狼 - 2002-11-22, 13:32:38

save contents to file...はSave As...なるほど.Workspaceの内容をプレーンテキスト形式で保存ですね.Workspaceは「書き捨て」のメモと言うのも覚えておかなくては.
おぉっ!確かにsave contents to file...したらFileListで見る事が出来ました.--人狼 - 2002-11-22, 13:37:10

save contents to file...の続きですが,これはWorkspaceなるモーフ(ですよね?)を構成する,文字列を扱うオブジェクト(こっちはモーフと言う自信がない)の保持している文字列(と,言うかバイト列かな?すなわちオブジェクトの保持する値であってオブジェクトではない.)をファイル化して保存する,と言う事ですね.なので,上で書いたように「オブジェクトを保存」ではない,と言う事ですよね?--人狼 - 2002-11-22, 13:48:39

そうです。オブジェクト自体ではなく、モーフの保持する情報の一部(この場合、テキスト情報)を保存する…という作業と言っても差し支えないでしょう。ただ、Workspace くらいになると、モーフの組み合わせというのは単なる見た目に過ぎなくて、それ以上の複雑な仕組みが別のところで動いていますので、無理にモーフと結びつける必要はないとは思いますが。--sumim - 2002-11-22, 14:03:49

spawnした Workspace においては accept/cancel 機能は正常に動作するようです。お試しください。--sumim - 2002-11-22, 14:04:56

あれ?私のやり方が悪いのでしょうか?
SpawnしたWorkspaceで適当に文字入力→acceptする→に適当に文字入力→cancelする.とした場合,キャレットがWorkspaceの先頭に移動するだけで,内容はcancel直前と変わらないです(^^;--人狼 - 2002-11-22, 14:13:11

>オブジェクトの情報の一部を保存する…
Workspaceにおいては「テキスト」「フォント」「スタイル」等々がオブジェクトの情報と言う事なのですよね.その中の「テキスト」だけを保存していると言う事ですね.
と,言う事はそもそもsave contents to file...とは「テキストを保存する」?ならば,Workspaceには限らないかな?Browserで試してみたら,下にあるペイン=テキストが表示されるところ)でだけ,このメニューが出てきました.
無理にモーフと結びつける必要がないのは了解しました.--人狼 - 2002-11-22, 14:10:22

オブジェクトを保存
実はオブジェクトを“生きたまま”(たとえばバイナリで)ファイルに保存する方法は(そのオブジェクトを含む仮想イメージごと保存する…を除いて)まだありません。その定義と保持する情報を書き下ろしたテキストファイルとして保存する…という手法が一般的なようですが、オブジェクトはたいてい別のオブジェクトと密接に関わっている(具体的には自分のインスタンス変数に別のオブジェクトを束縛している)ことが多いので、どこまで引き連れて出てゆくか…とかいろいろ難しい問題がありそうです。--sumim
- 2002-11-22, 14:14:38

あれ?私のやり方が悪いのでしょうか?
すみません。やっぱりダメみたいです。いったん accept すると cancel は機能しなくなるみたいです。そのうち直るかも知れませんし、ずっとこのままなのかもしれません(^_^;)。--sumim
- 2002-11-22, 14:20:04

なるほど.言われてみればオブジェクトの保存は難しい問題ですね.いや,浅学でした.
定義と保持する情報=クラス定義とインスタンスのステータスと言う事でしょうか?--人狼 - 2002-11-22, 14:20:16

そうです。--sumim

>やっぱりダメみたいです。
了解しました.--人狼 - 2002-11-22, 14:20:55

やっぱりダメ
フィックスしました。いったん仮想イメージを保存せずに終了して再起動後、これ(差し替え済み=後述参照)を FileList で File-in to New ボタンで file-in 。FileList を閉じて、仮想イメージを save します。これでパッチ当て作業は終わりです。 すでにある Workspace (Welcome to...)では最初に accept するまでは相変わらずですが、そのあとは cancel で最後に accept した内容に戻ります。コードを見た感じ仕様ではなくバグのようでした(^_^;)。--sumim
- 2002-11-22, 15:25:40

FileListの使い方なのですが(^^;
左上のペインで,ダウンロードしたファイルのあるフォルダを選択し,右上のペインでファイルを選択.(すると,下のペインにファイルの内容が表示されます)
この状態でFile-in to Newボタンを押すでよろしいのでしょうか?
何やら一瞬,白い横長のウィンドウらしき物が表示されて,すぐに消えてしまったのですが.
file-inと言う用語の意味を正確につかみかねています.
動作は確認出来ました.わざわざ有り難うございました.--人狼 - 2002-11-22, 15:43:08

ちなみに、このコードで私が手を入れたのは
textToAccept _ textMorph asText copy.
の、copy を追加しただけです(^_^;)。acceptにおける退避場所となるオブジェクトにエディタオブジェクトが編集中のテキスト(やはりオブジェクト…(笑))を知らせるときに、コピーを作らずに実際に編集しているテキストそのものを知らせてしまっていたのですね。したがって、いったん accept すると、退避場所が束縛しているのは編集中のテキストそのもの(つまり、常に最新の状態)になってしまい cancel しても、なにも起こらない…という状況でした。--sumim
- 2002-11-22, 15:27:38
 ここに書いた修正では他で不都合がでます。リンク先を差し替えた .cs を変わりに file in してください。--sumim

文法等がまだ判らないので,見た目だけですが(^^;
textToAcceptが退避場所(=acceptされた時点のオブジェクトを保持しておく)オブジェクト.
アンダースコア(_)は代入.
textMorphはWorkspaceで編集しているテキストオブジェクト.

copyが無いと,textToAccpetにはtextMorphが代入されてしまうので,textMorphにて編集すると,textToAcceptも同時(と,言うと語弊があるかもしれませんが)に変更される.なぜならtextToAcceptはtextMorphの事だから.

copyがあると,textMorphと言うオブジェクトの複製がtextToAccpetに代入されるので,別なオブジェクトとなる.

と言う事でしょうか?--人狼 - 2002-11-22, 15:48:25

ひょっとして,
textToAccept _ textMorph asText
のままだったとして,acceptした後に,どっかでtextToAcceptの内容を変化させるとWorkspaceの中も変わるって事なのでしょうか?--人狼 - 2002-11-22, 15:54:26

どっかでtextToAcceptの内容を変化させるとWorkspaceの中も変わる
表示などにはたいていオブジェクトそのものではなくそのコピーを使うので、なかなかそういう状況にはなりにくいのですが、たとえば、Inspector という“生きたままの”オブジェクトを“点検する”ためのツールは、その性格上、オブジェクトの“今の状況”を反映するしくみをもっています。なので、「Welcome to...」ウインドウを青クリック(cmd-クリック)してモーフとして選択し、でてきたハローボタン(ハローには後光/光輪状のものという意味があります)の右手の中央にある灰色の debug ハローボタンメニューから explorer morph を選択し、出てきたウインドウで、System Window → submorphs → 1. a PluggableTextMorph → model → contents を選択して黄ボタンメニューから inspect を選択してみてください。Inspector の self をクリックしたときに右側のペインに現れるのが当該ウインドウの内容なのですが、これは「Welcome to...」の最初の何文字かを変えたりすると、ほぼ同時に変わってゆくのが見てとれると思います。たぶんイメージしておられるのとちょっと違うかもしれませんが、こんなんでいかがでしょう?--sumim
- 2002-11-22, 16:37:39

>オブジェクトそのものではなくそのコピーを使う
のであれば,私が考えたような事は現実的には起こり得ないですね.

ご呈示頂いた事を試してみました.まさに,こんな感じです.私が危惧(と,言うと大袈裟ですが)していたのは,あるオブジェクト(この場合はテキスト)を操作すると,意図しないのに(正確には関係を忘れていた為に)別なオブジェクトまで操作されてしまう,と言う事です.まぁ,平たく言うとバグですから,そんな事を仕込んだ自分が悪いのですが(^^;--人狼 - 2002-11-22, 17:08:23

それにしても,以前お話を聞いた「必要であればソースを直して」をこんなに早く垣間見るとは思ってもいませんでした(^^;--人狼 - 2002-11-22, 16:32:40

まあ、こういう細かいバグはそれこそいっぱいあります…(^_^;)。VisualWorks などの商用 Smalltalk は別として、こと Squeak に関して関していえば30 年間、万年βバージョンってところでしょうか(笑)。気付いたところから直していくのもまた楽しみかと(ぉぃぉぃ。--sumim - 2002-11-22, 16:49:00

バグがある事の是非はおいておいても,「そこに達して,修正する事が開放されている」と言う事は非常に大いなる意味を持ちますよね.
そこに楽しみを見いだせる人でなくては,もしかしたら嵌まる事は出来なさそうな気がします.--人狼 - 2002-11-22, 17:10:51

textToAccpetに代入される
詳細はおいおいということで。ちょっと気になるのがこの表現です。変数はよく“箱”や“入れもの”のようにイメージされますが、Smalltalk に関していえばこれを踏襲するとちょっとやっかいなことになります。オブジェクトは変数に“入れる”のではなく、“束縛”“つなぎとめる”“名前を付けて参照できるようにする”程度に捉えておいていただけるとよろしいかと。正確な表現かどうか分かりませんが、ひらたくいうと、変数はオブジェクトの単なるポインタですね。--sumim
- 2002-11-22, 16:57:14

なのでくだんの式は、単に、textMorph (これも変数)で参照されるオブジェクトを参考に同等の情報を持つ Text クラスのインスタンスを作成し(asText)、それを以後、textToAccept と呼称する…というふうに読みます(こうやって書くと、そもそも asText の実装がおかしいからこういうことが起こった…ことが分かります…と自分で納得してみるテスト)。余談ですが、退避場所を提供するオブジェクトは model で参照されるオブジェクトで、そこへの格納は、
model perform: setTextSelector with: textToAccept
がやっています。まだなにも説明していないのでちんぷんかんぷんかも知れませんが、じきに詳しくやりたいと思います。--sumim
- 2002-11-22, 17:02:37

>オブジェクトは変数に“入れる”のではなく、“束縛”“つなぎとめる”“名前を付けて参照できるようにする”
単なるオブジェクト(と,言うかインスタンスでしょうか?)の名前と考えて良いのでしょうか?

>変数はオブジェクトの単なるポインタ
のポインタとはC言語で言うところのポインタではなくて,広義の「指し示す物」と言う解釈でよろしいのでしょうか?この解釈ですと,上で私が思っている「名前である」と矛盾しないように感じます.--人狼 - 2002-11-22, 17:20:31

>textMorph (これも変数)で参照されるオブジェクトを参考に同等の情報を持つ Text クラスのインスタンスを作成し(asText)
この考えだと,asTextで生成されたインスタンスはtextMorphで参照されるインスタンスのコピー物であるべき,と言う事ですよね.

>そもそも asText の実装がおかしい
と言うのはasTextで作られたインスタンスが,コピー物でないから,と言う事でしょうか?だから,わざわざcopyと付けなくてはならなかった…と.

とは言え,今の私に「では,コピー物でなければ,どういう関係?」と言われてもトントカイモなのですが(^^;--人狼 - 2002-11-22, 17:25:04

代入と作業は、右辺のリテラル式や、メッセージ式の返値として返ってくるインスタンスに名前を付ける作業…でいいと思います。ポインタも私は無学で C のことは知らないので“広義”ということで大目に見てやってください(^_^;)。textMorph で参照されるオブジェクト、すなわち TextMorph のインスタンスは、text というインスタンス変数に Text のインスタンスを束縛しています。TextMorph >> #asText のコードを見るとわかるのですが、単にこのオブジェクトを返しています。asなんたら というメッセージは先に述べたように「メッセージの受け手であるオブジェクトを参考にして同等の情報を持つ なんたら クラスのインスタンスを作成」するようにオブジェクトに指示するメッセージなので、複製を返すべきなのではないかなぁ…と思ったわけです。--sumim - 2002-11-22, 17:38:10



自ら大きく流れを逸脱してしまいました。Smalltalk のオブジェクト、すなわちインスタンスの話は奧が深いのでまた追々、詳しく。 黄ボタンメニューとショートカットの話に戻しましょう。--sumim - 2002-11-22, 18:14:02

accept (cmd-s)は一時保存、cancel (cmd-l)はそれへの復帰、spawn (cmd-o)は一時保存内容へ復帰させて、編集中のものをコンテンツにした Workspace を新しく開く…と。こんなところでしたね。--sumim - 2002-11-22, 18:19:23

オブジェクト(=インスタンス?と,なるとクラス(定義)もインスタンスなのか?)の話しは,確かに奥深そうです.と,言うかそこがキモですものね.いや,私も逸脱しつつ興味のままに質問してしまいました.済みません.

元に戻すとacceptとcancelとspawnを納得した,と言うところです. - 2002-11-22, 19:39:24

ちなみに cancel は cmd-. ではなく、cmd-l ですが、これは cmd-. が別の機能に割り当てられているからです。さらにちなむと、キーボードショートカットのほとんどは Apple Smalltalk 時代に追加されたものですので、Apple のセンスなのだと想像しています。実際、VisualWorks (Smalltalk の順当な進化版)のそれは、私にはピンと来ません。

cmd-. は、Squeak では、Mac でいうところの cmd-電源ボタン、そう、インタラプトと同じ役割りを持ちます。
 [true] whileTrue
といったたぐいの無限ループを表わすメッセージ式を不用意に評価してしまったときになど(普通しないって>われ(^_^;))制御が戻ってこなくなったら、cmd-. を押します。ノーティファイアと呼ばれるピンクのウインドウが現れますが、これについては追々ということで。ちなむと、こいつはエラーメッセージ以上の情報を含んでおり、これと、ここから呼び出すことのでできるデバッガを使いこなせるかどうかというのはひとつの指標となります>何の?(笑)。--sumim


helpのcommand-key helpで確認しました>cmd-l.cnd-.は見当たりませんでした.やばげなコマンドだからでしょうか(^^;私もそのうち,ピンと来るでしょうか(^^ゞ

無限ループは,気付かずにしこむ事が私の場合多いので(つーか,SE失格?)インタラプトは必須です.

ノーティファイアについては追々の説明を楽しみにしています.もちろん,デバッガも.

それにしても,先程のオブジェクトの件と言い,壮大なお話になりそうなのですが…私は大変有りがたいのですが,お手間をとらせているのが申し訳ないです.--人狼 - 2002-11-22, 20:24:49

いえいえ。--sumim

黄ボタンメニューは主要なものはよさそうなので、キーボードショートカットにいきましょう。先の help... → command-key help の内容のうちテキスト編集などに関係あって、まだ説明していないのは、次のものです。--sumim - 2002-11-22, 19:55:02

cmd-e, 直前に選択した文字列を、現在の選択文字列と交換する。(Exchange)
cmd-D, 直前に選択した文字列に、現在の選択文字列を置き換える。(Duplicate)

cmd-C, クリップボードバッファにあるテキストと編集中のテキストをパラグラフ単位で比較する。(Compare)
cmd-H, home キーと同じ。(Home)
cmd-M, 今、タイプした文字列を選択(iMmediate)。
cmd-L, 選択範囲に含まれるパラグラフの一斉字下げ。(Left)
cmd-R, 選択範囲に含まれるパラグラフの字下げの一斉一段取り消し。(Right)

cmd-S, 検索文字列に該当する最後の文字列を選択。該当するものがなければキャレットは不動。(Scan)
cmd-U, 編集中の文字列の LF を CR に置き換える。(convert Unix text to squeak one)
cmd-V, イニシャルと日時を挿入する。

cmd-X, 選択文字列をすべて小文字に。
cmd-Y, 選択文字列をすべて大文字に。
cmd-Z, 選択文字列の単語の最初の文字だけを大文字に。

cmd-y, キャレットの前後の文字を入れ替える
cmd-w / shift-delete, 単語削除。(delete Word)
  キャレットが表示されていないときに限り、cmd-w でウインドウを閉じる。

cmd-1, 小さいサイズ
cmd-2, 普通のサイズ
cmd-3, やや大きなサイズ
cmd-4, 大きなサイズ
cmd-5, 非常に大きなサイズ(ただし以上のいくつかはフォントによってはサポートされない)

cmd-6, 色指定、その他。その他の部分は後に。

cmd-7, ボールド
cmd-8, イタリック
cmd- -, アンダーライン
cmd-=, 取消線

cmd-9 / shift-cmd- -, 字間を狭く
cmd-shift- +, 字間を広く
cmd-0, cmd-6〜= での設定をキャンセル。

cmd-", 選択文字列を " でくくる。
cmd-', 選択文字列を ' でくくる。

cmd-retrun, 現在の行の字下げを保ったまま改行。
まあ、ちょっと遊んでくださいまし。お気づきとは思いますが、command-key help もただの Workspace ですのでその場で試せます。ちなみに、command-key help は動的に作られるものなので、めちゃくちゃにしても大丈夫です。--sumim
- 2002-11-22, 20:48:50

そうそう。これらのキーボードショートカットのうち、いくつかは JIS キーボードでは実行できません。あしからず。--sumim - 2002-11-22, 20:55:25

あと、cmd キーは使いませんが、
del, 直後の文字を削除。
shift-delete, 直前の単語を削除。
shift-del, 直後の単語を削除。
こんなのも。--sumim
- 2002-11-22, 20:56:29

おぉっ!command-key helpは動的に生成されるのですか.ではその場で色々と試せますね.今日はこれから色々といぢってみます(笑)

>いくつかは JIS キーボードでは実行できません
どれがJISキーボードで出来ないかもついでに実験君♪--人狼 - 2002-11-22, 21:00:47

Mac のワープロなどではメニューバーにば〜んっと用意される機能が、黄ボタンメニューにすらなくて、キーボードショートカットにしかないのが、昨今のビデオデッキにおける、リモコンにほとんど機能を割り振られていて本体だけでは留守録予約すらままならないのと似た様相を呈していますね(笑)。このおかげで、Squeak のテキスト編集/修飾機能は淡泊/非力…と勘違いしている人は多いようです。--sumim - 2002-11-22, 21:01:56

Smalltalk では…と一般化すると問題がありますが、少なくとも Squeak においてはテキスト編集関連の機能の呼び出し方法のメインはキーボードショートカットで、メニューはあくまでも初心者用/機能拡張用の補助なのだと考えておいたほうがよいと思います。--sumim - 2002-11-22, 21:06:47

追記:cmd-e、cmd-D はクリップボードバッファに影響を与えません。--sumim - 2002-11-22, 21:07:38

うぅ,そうですか.機能の呼び出しのメインはショートカットで,メニューはあくまでも補助なんですね.

Ad○beのソフトのように,ショートカット一覧を作らないと(^^;

ビデオデッキの例は大変判りやすいです.なにしろ,リモコンが壊れたおかげで使い物にならなくなったデッキがありますので(-.-)

リモコンだけで8千円って…安物のデッキが新品で買えるじゃん>S○NY--人狼 - 2002-11-22, 21:32:14

ショートカット一覧を作らないと(^^;
上の一覧に覚えやすいキーワードを振っておきました。--sumim
- 2002-11-22, 22:41:54

おはようございます.試してみました>ショートカット

>上の一覧に覚えやすいキーワードを振っておきました
有り難うございます.にゃるほど,です.

>いくつかは JIS キーボードでは実行できません
cmd-" cmd-' cmd-shift-+は確かにJISキーボードでは無理でした(^^;

cmd-Uは,改行コードを見なくてはならないので,結果の確認が出来ていません.他のショートカットは動作を確認しました.う〜ん,かなり機能豊富ですね.--人狼 - 2002-11-25, 09:34:06

おはようございます。cmd-U は、FileList などでファイルを開いたとき、改行がおかしくなっているとき、すなわち改行がないように見えるとき使うのが吉、のようです(ですから動作テストは、Jedit などで Unix タイプ改行の文書を作って FileList で開く…というふうに行なうとよろしいかと)。DOS タイプ改行の場合は、フォントによっては点線の縦棒が見えたりするのでこれを選択+削除して cmd-J します。--sumim - 2002-11-25, 10:27:09

う〜ん,かなり機能豊富ですね.
これはネガティブですか?(^_^;) ネガティブでしたら答えはこうです「あくまでショートカットなので使う必要を感じなければ無理して覚える必要はないと思います」 ポジティブなら「これは編集用だけで、プログラミング系の編集/ユーティリティものがこれにさらに(つまり空いているアルファベット大文字と小文字に)加わります!」 両者に共通したコメントは「いずれにせよ、すべてのシチュエーションで用いることができるので、身につけたものはそうそう無駄にはなりません」です(笑)。--sumim
- 2002-11-25, 10:35:59

cmd-Uは,そう言う時に使うのですね.他のプラットフォームとの行き来が前提にあるんでしょうか.いずれにせよ便利そうですね.cmd-Uとcmd-Jを試してみました.にゃるほど.

>これはネガティブですか?
ポジティブ+驚嘆です.おっしゃる事は理解できます.Squeakを使っている内に,自分にとって重要度の高い(または頻度の高い)ものから自然に覚えて行くでしょう,きっと.--人狼 - 2002-11-25, 10:44:11

では、ウインドウの扱い方に戻ります。ウインドウは、Win が Mac の頭越しに Smalltalk の影響を受けた関係で、Mac のよりはむしろ Win のもののほうが感覚的に近いと思います。まず、サイズボックスがないので上下左右四隅のどこにマウスポインタを置いても大きさを変えることができます。Win 同様、大きさを変えるタイミングはマウスカーソルの形が変わったときです。うまくゆかないときは、ウインドウの外側からゆっくりと近づけるとよいようです。ウインドウの移動はタイトルバーで行ないます。タイトルバーにはいくつかのパーツがありますが、そこを外してポイントするのは Mac や Win でのやりかたと同じです。場合によってはタイトルの部分が不感にっていることがあるので、このときはタイトル部分も外すようにします。タイトルバー左からクローズボタン、ウインドウメニューボタン、タイトル、ズームボタン、最小化ボタンです。クローズボタンやズームボタンは Mac のそれと同じ感覚で使えると思います。ただクローズボタンに関しては不要になったウインドウ(オブジェクト)の削除…という意味合いもあるので、クリックするときには必要な情報を含んでいないか要再確認です。最小化ボタンは、ウインドウをタイトルのみにする機能です。ウインドウシェードに似ていますが横幅も縮まる点で違います。また、最小化したときの場所を覚えているのでそこと行き来できます。Win の最小化のフレキシブルなもの…と考えるとよいでしょう。

ウインドウメニューボタンは、かつての青ボタンメニューのうち、タイトルバーにパーツ化機能化されなかったものをまとめたものです。このボタンが設けられたため、青ボタンには現在、別の役割りが割り振られています。具体的にはモーフ(morph)の選択、ハロー(Halo)ボタンの表示なのですが、これについてはモーフの説明のところで詳しく。


このウインドウメニューの内容を見ていただくと分かるように、ウインドウタイトルは Win、Mac と違い、意味があるかどうかは別にして自由に変えられます。特に、Workspace などのように、いつも同じ名前が割り振られるウインドウはこまめに名前を変えておくと、shift-デスクトップクリックで呼び出すことができるウインドウ一覧メニュー(Mac でいうところのウインドウメニューの“アプリケーション串刺し版”のイメージ)からウインドウを一発選択して前面に呼び出すときに便利です。--sumim

ウインドウタイトルは、ウインドウタイトルの shift-クリックでも変えることができますが、ウインドウメニューの change title... を使った方がなにかと無難なようです。--sumim

ウインドウメニューについては、先の危険なクローズボックスをなくして誤って消してしまうことを避けるための make unclosable や、黄ボタンメニューにもあった save contents to file...、ウインドウの色を変える window color... がありますので、試してみてください。--sumim - 2002-11-25, 10:58:38

ウインドウのリサイズ(四辺+四隅)と,移動はOKです.タイトルバーのボタンにしてもOKです.クローズボックスは要注意ですね.

確かにウインドウタイトルはおっしゃる通りです.Workspaceばかりだと,「どれだっけ?」になってしまいますので,あった方が助かります.

ウインドウメニューもほぼ試してみましたが「create textual references to dropped morphs」はわけわかなので,試してません.--人狼 - 2002-11-25, 11:30:55

「create textual references to dropped morphs」はわけわか
これはモーフ関係なので後回しにしましょう。--sumim
- 2002-11-25, 11:40:18

このページを編集 (47529 bytes)


Congratulations! 以下の 1 ページから参照されています。

This page has been visited 4077 times.