プログラミンギング このページをアンテナに追加 RSSフィード

partix, caper, meshtoyのサポート掲示板は右下のリンク集からどうぞ。

2010-03-20

[] [emacs] 二分移動

二分移動コマンドを書いてみました。行内を二分探索の要領で移動します。


ctrl+U ctrl+U ctrl+U ctrl+Fとかよく打つ人にお勧めです。


defvarとか使い方よくわかってないのでまずいところあったら教えてくださると嬉しいです。


D


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 二分移動
(defvar binary-move-fence-beginning nil)
(defvar binary-move-fence-end nil)
(defvar binary-move-overlay nil)

(defun binary-move-set-overlay ()
  (if binary-move-overlay
      (move-overlay binary-move-overlay 
                    binary-move-fence-beginning binary-move-fence-end
                    (current-buffer))
    (progn
      (setq binary-move-overlay
            (make-overlay binary-move-fence-beginning 
                          binary-move-fence-end))
      (make-face 'binary-move-face)
      (set-face-background 'binary-move-face "LightSteelBlue1")
    )
    (overlay-put binary-move-overlay 'face 'binary-move-face))
  )

(defun binary-move-forward (arg)
  (interactive "p")
  (while (save-excursion (beginning-of-line) (looking-at "[ \t]*$"))
    (next-line))
  (dotimes (i arg)
    (if (or
         (eq last-command 'binary-move-forward)
         (eq last-command 'binary-move-backward))
        (setq binary-move-fence-beginning (point))
      (progn
        (setq binary-move-fence-beginning (point))
        (setq binary-move-fence-end (line-end-position))))
    (binary-move-set-overlay)
    (goto-char (/ (+ binary-move-fence-beginning 
                     binary-move-fence-end) 2))
    (if (= (1- arg) i) (sit-for 1.0))
    (move-overlay binary-move-overlay (point) (point))
    ))

(defun binary-move-backward (arg)
  (interactive "p")
  (while (save-excursion (beginning-of-line) (looking-at "[ \t]*$"))
    (previous-line)
    (end-of-line))
  (dotimes (i arg)
    (if (or
         (eq last-command 'binary-move-forward)
         (eq last-command 'binary-move-backward))
        (setq binary-move-fence-end (point))
      (progn
        (setq binary-move-fence-beginning (line-beginning-position))
        (setq binary-move-fence-end (point))))
    (binary-move-set-overlay)
    (goto-char (/ (+ binary-move-fence-beginning 
                     binary-move-fence-end) 2))
    (if (= (1- arg) i) (sit-for 1.0))
    (move-overlay binary-move-overlay (point) (point))
    ))

(global-set-key [?\C-\M-,]  'binary-move-backward)
(global-set-key [?\C-\M-.]  'binary-move-forward)


スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/jonigata/20100320/1269066375
Connection: close