Function: calculator-menu

calculator-menu is an interactive and byte-compiled function defined in calculator.el.gz.

Signature

(calculator-menu ARG1)

Documentation

Calculator menu.

Key Bindings

Source Code

;; Defined in /usr/src/emacs/lisp/calculator.el.gz
(defvar calculator-mode-map
  (let ((map (make-sparse-keymap)))
    (suppress-keymap map t)
    (dolist (x '((calculator-digit
                  "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "a" "b" "c"
                  "d" "f" "<kp-0>" "<kp-1>" "<kp-2>" "<kp-3>" "<kp-4>"
                  "<kp-5>" "<kp-6>" "<kp-7>" "<kp-8>" "<kp-9>")
                 (calculator-open-paren  "[")
                 (calculator-close-paren "]")
                 (calculator-op-or-exp   "+" "-"
                                         "<kp-add>" "<kp-subtract>")
                 (calculator-op          "<kp-divide>" "<kp-multiply>")
                 (calculator-decimal     "." "<kp-decimal>")
                 (calculator-exp         "e")
                 (calculator-dec/deg-mode "D")
                 (calculator-set-register "s")
                 (calculator-get-register "g")
                 (calculator-radix-mode        "H" "X" "O" "B")
                 (calculator-radix-input-mode  "iD" "iH" "iX" "iO" "iB")
                 (calculator-radix-output-mode "oD" "oH" "oX" "oO" "oB")
                 (calculator-rotate-displayer      "'")
                 (calculator-rotate-displayer-back "\"")
                 (calculator-displayer-prev        "{")
                 (calculator-displayer-next        "}")
                 (calculator-saved-up     "<up>" "C-p")
                 (calculator-saved-down   "<down>" "C-n")
                 (calculator-quit         "q" "C-g")
                 (calculator-enter        "<enter>" "<linefeed>"
                                          "<kp-enter>" "<return>"
                                          "RET" "LFD")
                 (calculator-save-on-list "SPC" "<space>")
                 (calculator-clear-saved  "C-c" "<C-delete>")
                 (calculator-save-and-quit "<C-return>" "<C-kp-enter>")
                 (calculator-paste        "<insert>" "<S-insert>"
                                          "<paste>" "<mouse-2>" "C-y")
                 (calculator-clear        "<delete>" "DEL" "C-d")
                 (calculator-help         "h" "?" "<f1>" "<help>")
                 (calculator-copy         "<C-insert>" "<copy>")
                 (calculator-backspace    "<backspace>")
                 ))
      ;; reverse the keys so earlier definitions come last -- makes the
      ;; more sensible bindings visible in the menu
      (dolist (k (reverse (cdr x)))
        (calculator-define-key k (car x) map)))
    (if calculator-bind-escape
      (progn (calculator-define-key "ESC" 'calculator-quit map)
             (calculator-define-key "<escape>" 'calculator-quit map))
      (calculator-define-key "ESC ESC ESC" 'calculator-quit map))
    ;; make C-h work in text-mode
    (unless window-system
      (calculator-define-key "C-h" 'calculator-backspace map))
    ;; set up a menu
    (when (and calculator-use-menu (not (boundp 'calculator-menu)))
      (let ((radix-selectors
             (mapcar (lambda (x)
                       `([,(nth 0 x)
                          (calculator-radix-mode ,(nth 2 x))
                          :style radio
                          :keys ,(nth 2 x)
                          :selected
                          (and
                           (eq calculator-input-radix ',(nth 1 x))
                           (eq calculator-output-radix ',(nth 1 x)))]
                         [,(concat (nth 0 x) " Input")
                          (calculator-radix-input-mode ,(nth 2 x))
                          :keys ,(concat "i" (downcase (nth 2 x)))
                          :style radio
                          :selected
                          (eq calculator-input-radix ',(nth 1 x))]
                         [,(concat (nth 0 x) " Output")
                          (calculator-radix-output-mode ,(nth 2 x))
                          :keys ,(concat "o" (downcase (nth 2 x)))
                          :style radio
                          :selected
                          (eq calculator-output-radix ',(nth 1 x))]))
                     '(("Decimal"     nil "D")
                       ("Binary"      bin "B")
                       ("Octal"       oct "O")
                       ("Hexadecimal" hex "H"))))
            (op (lambda (name key)
                  `[,name (calculator-op ,key) :keys ,key])))
        (easy-menu-define
          calculator-menu map "Calculator menu."
          `("Calculator"
            ["Help"
             (let ((last-command 'calculator-help)) (calculator-help))
             :keys "?"]
            "---"
            ["Copy"  calculator-copy]
            ["Paste" calculator-paste]
            "---"
            ["Electric mode"
             (progn (calculator-quit)
                    (setq calculator-restart-other-mode t)
                    (run-with-timer 0.1 nil (lambda () (message nil)))
                    ;; the message from the menu will be visible,
                    ;; couldn't make it go away...
                    (calculator))
             :active (not calculator-electric-mode)]
            ["Normal mode"
             (progn (setq calculator-restart-other-mode t)
                    (calculator-quit))
             :active calculator-electric-mode]
            "---"
            ("Functions"
             ,(funcall op "Repeat-right" ">")
             ,(funcall op "Repeat-left"  "<")
             "------General------"
             ,(funcall op "Reciprocal"   ";")
             ,(funcall op "Log"          "L")
             ,(funcall op "Square-root"  "Q")
             ,(funcall op "Factorial"    "!")
             "------Trigonometric------"
             ,(funcall op "Sinus"        "S")
             ,(funcall op "Cosine"       "C")
             ,(funcall op "Tangent"      "T")
             ,(funcall op "Inv-Sinus"    "IS")
             ,(funcall op "Inv-Cosine"   "IC")
             ,(funcall op "Inv-Tangent"  "IT")
             "------Bitwise------"
             ,(funcall op "Or"           "|")
             ,(funcall op "Xor"          "#")
             ,(funcall op "And"          "&")
             ,(funcall op "Not"          "~"))
            ("Saved List"
             ["Eval+Save"      calculator-save-on-list]
             ["Prev number"    calculator-saved-up]
             ["Next number"    calculator-saved-down]
             ["Delete current" calculator-clear
              :active (and calculator-display-fragile
                           calculator-saved-list
                           (= (car calculator-stack)
                              (nth calculator-saved-ptr
                                   calculator-saved-list)))]
             ["Delete all" calculator-clear-saved]
             "---"
             ,(funcall op "List-total"   "l")
             ,(funcall op "List-average" "v"))
            ("Registers"
             ["Get register" calculator-get-register]
             ["Set register" calculator-set-register])
            ("Modes"
             ["Radians"
              (progn
                (when (or calculator-input-radix calculator-output-radix)
                  (calculator-radix-mode "D"))
                (when calculator-deg (calculator-dec/deg-mode)))
              :keys "D"
              :style radio
              :selected (not (or calculator-input-radix
                                 calculator-output-radix
                                 calculator-deg))]
             ["Degrees"
              (progn
                (when (or calculator-input-radix calculator-output-radix)
                  (calculator-radix-mode "D"))
                (unless calculator-deg (calculator-dec/deg-mode)))
              :keys "D"
              :style radio
              :selected (and calculator-deg
                             (not (or calculator-input-radix
                                      calculator-output-radix)))]
             "---"
             ,@(mapcar 'car radix-selectors)
             ("Separate I/O"
              ,@(mapcar (lambda (x) (nth 1 x)) radix-selectors)
              "---"
              ,@(mapcar (lambda (x) (nth 2 x)) radix-selectors)))
            ("Decimal Display"
             ,@(mapcar (lambda (d)
                         (vector (cadr d)
                                 ;; Note: inserts actual object here
                                 `(calculator-rotate-displayer ',d)))
                       calculator-displayers)
             "---"
             ["Change Prev Display" calculator-displayer-prev]
             ["Change Next Display" calculator-displayer-next])
            "---"
            ["Copy+Quit" calculator-save-and-quit]
            ["Quit"      calculator-quit]))))
    map)
  "The calculator key map.")