[Date Prev] [Date Index] [Date Next]
[Thread Prev] [Thread Index] [Thread Next]

[xyzzy:05572] RE: はじめまして&質問です



 田家さん、こんばんは。御返事ありがとうございます。

:(defun wz-yank-selection ()
:  (interactive)
:  (case old-selection-type
: (3 (if overwrite-mode
:     (overwrite-rectangle)
:   (yank-rectangle)))
: (t (yank-selection))))

 最初、「矩形(通常)コピー」の意味がよく判らなかったのですが、一
つ前のブロックを覚えておいて、行ペーストか矩形ペーストかを自動判定
しているんですね(他の方への注:Vz/Wz ではブロック/矩形ブロック 
は同じバッファに入り、コピー・ペーストとも同じキーで行います)。
 キーが一つで済むというのは大変魅力的だったのですが、私はやはり
 ring にしたいのと、region を反転させてそれにいろんなコマンドを使う
方が判りやすそう(Vz/Wz 風で)という考えにとりつかれてしまい、こん
な感じにしてみました。

;; 行ブロック開始・終了
(defun vz-block ()
  (interactive)
  (point-to-register 'z) ; ←カーソル位置の保存方法が判らなかったので
  (goto-bol) (set-mark-command )  ; 行頭にマーカーを設置し、
  (jump-to-register 'z)
  (start-selection-as-line)  ; 同時に selection-as-line する 
)

;; 矩形ブロック開始・終了
(defun vz-kukeiblock ()
  (interactive)
  (set-mark-command)  ; マーカーを設置し、
  (case (get-selection-type)  ; 同時に selection-as-region する 
    (1 (set-selection-type 3))
    (3 (stop-selection))
    (t (start-selection 3))
  )
)

;; カット
(defun vz-cut ()
  (interactive)
  (case (get-selection-type)
    (1 (progn      ; 行ブロック
         (selection-start-end (start end) (kill-region start end) )
         (copy-region-to-clipboard (point)
           (progn (exchange-point-and-mark)(point)))
       )
    )
;;  (2 (selection-start-end (start end) ← ここも作らないとまずい
;;          (kill-rectangle start end) ))  ; Win 風矩形
    (3 (progn  ; 矩形ブロック
         (copy-rectangle-selection-to-clipboard)
         (kill-rectangle (point) (progn (exchange-point-and-mark)(point)))
       )
    )
    (t  (progn ; selection が無い→1行削除
           (copy-region-to-clipboard (progn (goto-bol) (point))
             (progn (forward-line 1) (goto-bol) (point)))
           (previous-line 1)
           (kill-region (progn (goto-bol) (point))
              (progn (forward-line 1) (goto-bol) (point)))
         )
     )
   )
)

 たった30行程度なのにすごく時間がかかった (T_T)。それに矩形ペース
トが別のキーになってしまう。でも、自前で作ったものはやはり愛着がわ
くので、もうちょっとこれで頑張ってみようと思います。


 ところで、これを作っている間に二点ほど判らない点が出てきましたの
で、どなたか教えてください。

(1) 作っている途中に以下のような感じで範囲選択の判断をしてみたので
すが、こうすると、selection が「Vz風矩形(普通の箱形)」だとコピー
がされず、「Win風?矩形」だと Vz 風矩形の領域をコピーするようです。
 これはどこが違っているのでしょう?

;; コピー … selection の状況に従ってコピーを実行する
(defun vz-copy-region ()
  (interactive)
  (case (get-selection-type)
    (1 (selection-start-end (start end)
          (copy-region-as-kill start end) ))  ; 行ブロック
    (2 (selection-start-end (start end)
          (copy-rectangle start end) ))  ; Win 風?矩形
    (3 (selection-start-end (start end)
          (copy-rectangle start end) ))  ; Vz 風矩形
    (t (message "no selection"))  ; selection が無い
  )
)

(2) *sync-kill-ring-with-clipboard* という変数を発見し、名前からして
「クリップボードと kill-ring を同期させるかどうか」みたいだったので
「t」にしてみたのですが、クリップボードには何の変化もないようでした。
これは何の変数なのでしょうか?

 以上です。よろしくお願いします。

渡辺俊彦
nca02212@xxxxxxxxxxx

Index Home