From: Hidetoshi NAGAI Date: 2013-01-08T09:53:43+09:00 Subject: [ruby-list:49123] Re: Ruby/Tk カーソル位置の移動方法について 永井@知能.九工大です. From: masa masa Subject: [ruby-list:49119] Ruby/Tk カーソル位置の移動方法について Date: Mon, 7 Jan 2013 21:21:25 +0900 Message-ID: > 現在Ruby/Tkを利用して簡易エディタを作成しています。 > 下記3、4の処理(カーソル位置の移動)が実装できずに困っております。 > > カーソル位置の移動方法やサンプル等についてご教授願います。 > (英語のサイトでも構いません。) > > > 実装したい機能 > > 1. Ruby/TkのTextウィジェットを利用して読み込んだテキストファイルを表示(実装済) > > 2. 検索ボタンを押すことによるTextウィジェット内の文字列の検索(実装済) > > 3. 次ボタンを押すことにより、カーソル位置を検索した文字列へ移動。(未実装) > > 4. 次ボタンを押すことにより、カーソル位置を次の検索した文字列へ移動。(未実装) > (文字列の移動は上から下へ) 検索結果をどのように保持しているかはわかりませんが, テキストウィジェット (仮に t と置きます) の上での 移動したい位置 (仮に pos と置きます) はわかっているものとします. # 「次」の位置の指定方法は検索結果の保持方法に依存しますので, # 答えようがありません. カーソル位置の移動はテキストウィジェットの挿入位置移動に等しいので, t.set_insert(pos) で OK です. ただし,それだけではテキストの表示範囲外となっても表示は変化しません. カーソル位置をテキストの表示範囲内に持ってくるなら, t.see('insert') を実行してください. このとき,カーソル位置がすでに表示範囲内であれば何も変わりませんが, 表示外であった場合にはカーソル位置を表示範囲内に持ってこようとするはずです. この表示範囲内に持ってくるルールには今一つすっきりしないところがあって, 「この指定をすると必ずこうなる」とは言いづらいのですが, 条件によっては指定位置が表示範囲の先頭行に来ることがあります. 「先頭行になると検索位置の直前の確認がやりづらいので嫌だ」ということであれば, t.set_insert(pos).see('insert - 2 lines').see('insert') くらいを実行する手もあるかもしれません. -- 永井 秀利 (nagai@ai.kyutech.ac.jp) 九州工業大学大学院情報工学研究院知能情報工学研究系知能情報メディア部門助教