;;; search-one-word.el --- move cursor direct by search work ;; -- v2.1 add quit key (C-g, ESC) ;; -- v2.0 using loop ;; -- v1.0 released 2017.12 ;;; Commentary: ;; ;; 詳細は下記参照 ;; https://www.inabamasaki.com/archives/2580 ;; ;; アイデアのネタ元: ;; http://dev.ariel-networks.com/wp/documents/aritcles/emacs/part16 ;;; Commands; ;; ;; M-x direct-search-forward-char ;; direct-search-backward-char ;; and you input char, cursor move to char. ;; ;; Repeat search. ;; you can search next word without quit. ;; if you repeat, simply type char. ;; or can use C-s (search and move forard-char) ;; C-r (search and move backward-char) ;; ;; Quit ;; type C-q. ;;; Code: (require 'cl-lib) (defvar last-search-char nil) ;;;###autoload (defun direct-search-forward-char () (interactive) (cl-loop (let ((char (read-key "Move to Char: "))) (cond ((member (string char) '("" "" "")) (cl-return) ) ((string= "" (string char)) (if last-search-char (progn (when (char-equal (char-after (point)) last-search-char) (forward-char)) (search-forward (string last-search-char) nil t) (backward-char)) (progn (let ((char (read-key "Move to Char: "))) (if (char-equal (char-after (point)) char) (forward-char)) (search-forward (string char) nil t) (backward-char) (setq last-search-char char)))) ) ((string= "" (string char)) (if last-search-char (search-backward (string last-search-char) nil t) (progn (let ((char (read-key "Move backward to Char: "))) (search-backward (string char) nil t) (setq last-search-char char)))) ) (t (when (char-equal (char-after (point)) char) (forward-char)) (search-forward (string char) nil t) (backward-char) (setq last-search-char char) ) )))) ;;;###autoload (defun direct-search-backward-char () (interactive) (cl-loop (let ((char (read-key "Move to Char: "))) (cond ((member (string char) '("" "" "")) (cl-return) ) ((string= "" (string char)) (if last-search-char (progn (when (char-equal (char-after (point)) last-search-char) (forward-char)) (search-forward (string last-search-char) nil t) (backward-char)) (progn (let ((char (read-key "Move to Char: "))) (if (char-equal (char-after (point)) char) (forward-char)) (search-forward (string char) nil t) (backward-char) (setq last-search-char char)))) ) ((string= "" (string char)) (if last-search-char (search-backward (string last-search-char) nil t) (progn (let ((char (read-key "Move backward to Char: "))) (search-backward (string char) nil t) (setq last-search-char char)))) ) (t (search-backward (string char) nil t) (setq last-search-char char) ) )))) (provide 'search-one-word) ;;; search-one-word.el ends here