X-Git-Url: http://git.chise.org/gitweb/?p=elisp%2Fegg.git;a=blobdiff_plain;f=menudiag.el;h=a8a57de3a8425daa1493e5c5c678cb6dba50f46c;hp=f9caf069a2a5ccfa6d71181ee3dab5835a344d53;hb=4f60a801e4c8a70a1eb7299c4fdd6f8c75f8528f;hpb=051cd863eb34b98b099d4c8ccfd4327b4de9564c diff --git a/menudiag.el b/menudiag.el index f9caf06..a8a57de 100644 --- a/menudiag.el +++ b/menudiag.el @@ -51,7 +51,11 @@ (defvar menudiag-mode-map (let ((map (make-keymap)) (ch 0)) - (while (< ch 127) + (while (< ch 27) + (define-key map (char-to-string ch) 'undefined) + (setq ch (1+ ch))) + (setq ch 28) + (while (< ch 255) (define-key map (char-to-string ch) 'undefined) (setq ch (1+ ch))) (setq ch ?0) @@ -68,6 +72,8 @@ (setq ch (1+ ch))) (define-key map "\C-a" 'menudiag-beginning-of-line) (define-key map "\C-e" 'menudiag-end-of-line) + (define-key map "\M-<" 'menudiag-beginning-of-items) + (define-key map "\M->" 'menudiag-end-of-items) (define-key map "\C-f" 'menudiag-forward-item) (define-key map "\C-b" 'menudiag-backward-item) (define-key map "\C-n" 'menudiag-next-line) @@ -77,8 +83,8 @@ (define-key map "\C-l" 'menudiag-redraw) (define-key map "\C-m" 'menudiag-select-this-item) (define-key map [return] 'menudiag-select-this-item) - (define-key map [left] 'menudiag-forward-item) - (define-key map [right] 'menudiag-backward-item) + (define-key map [left] 'menudiag-backward-item) + (define-key map [right] 'menudiag-forward-item) (define-key map [up] 'menudiag-previous-line) (define-key map [down] 'menudiag-next-line) (define-key map [menudiag-continuation] 'menudiag-follow-continuation) @@ -177,19 +183,39 @@ (mapconcat (function (lambda (item) (setq i (1+ i)) - (format " %x.%s" i (menudiag-item-string item)))) + (format " %c.%s" (menudiag-item-num-to-char i) + (menudiag-item-string item)))) item-list ""))) + +;; ITEM No --> Character +(defun menudiag-item-num-to-char (num) + (let ((char)) + (cond ((<= num 9) + (setq char (+ ?0 num))) + (t + (setq char (+ ?a (- num 10)))) + ) + char)) + +;; Character --> ITEM No +(defun menudiag-char-to-item-num (char) + (let ((num)) + (cond ((and (<= ?0 ch) (<= ch ?9)) + (setq num (- ch ?0))) + ((and (<= ?a ch) (<= ch ?z)) + (setq num (+ 10 (- ch ?a)))) + ((and (<= ?A ch) (<= ch ?Z)) + (setq num (+ 10 (- ch ?A)))) + (t (setq num 1000))) + num)) + + (defun menudiag-goto-item () (interactive) (let ((ch last-command-char) (n 0)) - (cond ((and (<= ?0 ch) (<= ch ?9)) - (setq n (- ch ?0))) - ((and (<= ?a ch) (<= ch ?z)) - (setq n (+ 10 (- ch ?a)))) - ((and (<= ?A ch) (<= ch ?Z)) - (setq n (+ 10 (- ch ?A))))) + (setq n (menudiag-char-to-item-num ch)) (if (>= n (length line)) (error "No such item") (menudiag-goto-item-internal n)))) @@ -204,6 +230,16 @@ (setq i (1+ i))) (goto-char p))) +(defun menudiag-beginning-of-items () + (interactive) + (menudiag-goto-line 0) + (menudiag-beginning-of-line)) + +(defun menudiag-end-of-items () + (interactive) + (menudiag-goto-line (1- (length selection-list))) + (menudiag-end-of-line)) + (defun menudiag-beginning-of-line () (interactive) (menudiag-goto-item-internal 0))