summaryrefslogtreecommitdiff
path: root/lisp/calculator.el
diff options
context:
space:
mode:
authorStefan Monnier <monnier@iro.umontreal.ca>2015-12-07 09:09:13 -0500
committerStefan Monnier <monnier@iro.umontreal.ca>2015-12-07 09:09:13 -0500
commit6148555ee5a3d0139ae517803718b3e0357933c7 (patch)
treef95ca0894ea3230723580d738bc8e083c9b85dab /lisp/calculator.el
parent8f725564b6b546c9660551327cecb97c5a362e13 (diff)
downloademacs-6148555ee5a3d0139ae517803718b3e0357933c7.tar.gz
* lisp/calculator.el (calculator-define-key): Undo last change
Make map argument mandatory instead (bug#22106). (calculator-add-operators): Pass the argument that's not optional any more.
Diffstat (limited to 'lisp/calculator.el')
-rw-r--r--lisp/calculator.el67
1 files changed, 34 insertions, 33 deletions
diff --git a/lisp/calculator.el b/lisp/calculator.el
index 1d3715b75b8..4f1ad76f280 100644
--- a/lisp/calculator.el
+++ b/lisp/calculator.el
@@ -379,6 +379,39 @@ Used for repeating operations in calculator-repR/L.")
;;;---------------------------------------------------------------------
;;; Key bindings
+(defun calculator-define-key (key cmd map)
+ ;; Arranges for unbound alphabetic keys to be used as their un/shifted
+ ;; versions if those are bound (mimics the usual Emacs global bindings).
+ ;; FIXME: We should adjust Emacs's native "fallback to unshifted binding"
+ ;; such that it can also be used here, rather than having to use a hack like
+ ;; this one.
+ (let* ((key (if (stringp key) (kbd key) key))
+ (omap (keymap-parent map)))
+ (define-key map key cmd)
+ ;; "other" map, used for case-flipped bindings
+ (unless omap
+ (setq omap (make-sparse-keymap))
+ (suppress-keymap omap t)
+ (set-keymap-parent map omap))
+ (let ((m omap))
+ ;; Bind all case-flipped versions.
+ (dotimes (i (length key))
+ (let* ((c (aref key i))
+ (k (vector c))
+ (b (lookup-key m k))
+ (defkey (lambda (x)
+ (define-key m k x)
+ (when (and (characterp c)
+ (or (<= ?A c ?Z) (<= ?a c ?z)))
+ (define-key m (vector (logxor 32 c)) x)))))
+ (cond ((= i (1- (length key)))
+ ;; Prefer longer sequences.
+ (unless (keymapp b) (funcall defkey cmd)))
+ ((keymapp b) (setq m b))
+ (t (let ((sub (make-sparse-keymap)))
+ (funcall defkey sub)
+ (setq m sub)))))))))
+
(defvar calculator-mode-map
(let ((map (make-sparse-keymap)))
(suppress-keymap map t)
@@ -562,38 +595,6 @@ Used for repeating operations in calculator-repR/L.")
map)
"The calculator key map.")
-(defun calculator-define-key (key cmd &optional map)
- ;; Arranges for unbound alphabetic keys to be used as their un/shifted
- ;; versions if those are bound (mimics the usual Emacs global
- ;; bindings).
- (let* ((key (if (stringp key) (kbd key) key))
- (map (or map calculator-mode-map))
- (omap (keymap-parent map)))
- (define-key map key cmd)
- ;; "other" map, used for case-flipped bindings
- (unless omap
- (setq omap (make-sparse-keymap))
- (suppress-keymap omap t)
- (set-keymap-parent map omap))
- (let ((m omap))
- ;; Bind all case-flipped versions.
- (dotimes (i (length key))
- (let* ((c (aref key i))
- (k (vector c))
- (b (lookup-key m k))
- (defkey (lambda (x)
- (define-key m k x)
- (when (and (characterp c)
- (or (<= ?A c ?Z) (<= ?a c ?z)))
- (define-key m (vector (logxor 32 c)) x)))))
- (cond ((= i (1- (length key)))
- ;; Prefer longer sequences.
- (unless (keymapp b) (funcall defkey cmd)))
- ((keymapp b) (setq m b))
- (t (let ((sub (make-sparse-keymap)))
- (funcall defkey sub)
- (setq m sub)))))))))
-
;;;---------------------------------------------------------------------
;;; Startup and mode stuff
@@ -801,7 +802,7 @@ Adds MORE-OPS to `calculator-operator', called initially to handle
(let ((added-ops nil))
(dolist (op more-ops)
(unless (eq (car op) 'nobind)
- (calculator-define-key (car op) 'calculator-op))
+ (calculator-define-key (car op) 'calculator-op calculator-mode-map))
(push (if (eq (car op) 'nobind) (cdr op) op)
added-ops))
;; added-ops come first, but in correct order