[emacs] 二分移動
二分移動コマンドを書いてみました。行内を二分探索の要領で移動します。
ctrl+U ctrl+U ctrl+U ctrl+Fとかよく打つ人にお勧めです。
defvarとか使い方よくわかってないのでまずいところあったら教えてくださると嬉しいです。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 二分移動 (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)