[xyzzy:08990] Re: 複数行の検索・置換とスクロール時の選択状態維持など
- Subject: [xyzzy:08990] Re: 複数行の検索・置換とスクロール時の選択状態維持など
- From: AKABA Nobuyuki <chiyu@xxxxxxxx>
こんばんは。赤羽伸之といいます。
あまり役にたたないメールになりましたが、送信します。
μさん writes:
> 2.カーソルのある位置や選択状態が、画面をスクロールして
> も維持されるようなモードを追加できませんでしょうか?
>
> スクリプトを書けばなんとかなりますか?
これは、ワープロソフトのように、
PageUpキーやPageDownキーで表示領域を移動しても、
カーソルの位置は変化しない、という
現象のことですよね??
これを少し変形して、
PageUpキーやPageDownキーを押して表示を移動しても、
あるコマンドを実行すれば、
元いた場所に戻れる(ジャンプできる)、
ということであれば、
スクリプトを書けば
できるかも??と思いました。
1. バッファーローカル変数(たとえば my-position)を用意する。
初期値はnilにしておく。
2. カーソル位置を変数my-positionに代入する関数を用意する。
たとえば
(defun set-my-position ()
(if (not my-position) ;;;my-positionがnilならば
(setq my-position (point)))) ;;;現在位置を代入
こんな感じで。
3. カーソル位置をmy-positionに設定するコマンドを用意する。
つまり、元の位置(最初の位置)に戻るための関数というわけです。
たとえば
(defun goto-my-position ()
(interacrive)
(if my-position ;;;my-positionがnilでなければ
(progn (goto-char my-position) ;;その位置に移動する
(setq my-position nil))));;my-positionをクリアする
こんな感じで。
4. C-vやM-v など、画面が移動する関数では、必ず
2.の関数(set-my-position)を呼び出すようにする。
(マウスでスクロールバーをドラッグした時も含む)
5. 3で定義した関数(goto-my-position)を呼びだすと
元いた位置にジャンプする(戻れる)。
6. 文字の入力の時は、元いた位置(my-positionの値)は
変化しないといけない。よって、(setq my-position nil)を
入力時には呼び出さないといけない。
C-nやC-bなどの時も同様。
同様にすれば、選択状態を復元することも可能ではないか、と
思います。
問題は、4や6で、どうやって関数を呼び出せばいいのか、
(hookをかければいいのか) だと思います。
それ以前に、そもそもこのアルゴリズムでいいのか??という
不安もありますが。
すみません、実際に試していなくて、
想像で書きました。