emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

make calc-keypad-mode work


From: Colin Walters
Subject: make calc-keypad-mode work
Date: Sun, 11 Nov 2001 17:01:58 -0500
User-agent: Gnus/5.090004 (Oort Gnus v0.04) Emacs/21.1.50 (powerpc-debian-linux-gnu)

Here's a patch which should fix Debian bug #118927.

2001-11-11  Colin Walters  <address@hidden>

        * calc/calc-keypd.el (toplevel): Bind mouse buttons.
        (calc-do-keypad): Don't attempt to use nonexistent global
        mouse-map, use calc-keypad-map.
        (calc-keypad-x-left-click): Renamed to calc-keypad-left-click.
        (calc-keypad-left-click): Don't use mouse-map; update to new event
        interface.
        (calc-keypad-x-middle-click, calc-keypad-x-right-click): Ditto.
        (calc-keypad-press): Use `unread-command-events' instead of 
`unread-command-char'.

--- calc-keypd.el.~1.1.~        Tue Nov  6 13:59:06 2001
+++ calc-keypd.el       Sun Nov 11 16:53:25 2001
@@ -1,5 +1,5 @@
 ;; Calculator for GNU Emacs, part II [calc-keypd.el]
-;; Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
+;; Copyright (C) 1990, 1991, 1992, 1993, 2001 Free Software Foundation, Inc.
 ;; Written by Dave Gillespie, address@hidden
 
 ;; This file is part of GNU Emacs.
@@ -30,45 +30,42 @@
 
 
 
-;;; Pictorial interface to Calc using the X window system mouse.
+;;; Pictorial interface to Calc using a mouse.
 
 (defvar calc-keypad-buffer nil)
 (defvar calc-keypad-menu 0)
 (defvar calc-keypad-full-layout nil)
 (defvar calc-keypad-input nil)
 (defvar calc-keypad-prev-input nil)
-(defvar calc-keypad-prev-x-left-click nil)
-(defvar calc-keypad-prev-x-middle-click nil)
-(defvar calc-keypad-prev-x-right-click nil)
 (defvar calc-keypad-said-hello nil)
 
 (defvar calc-keypad-map nil)
-(if calc-keypad-map
-    ()
-  (setq calc-keypad-map (make-sparse-keymap))
-  (define-key calc-keypad-map " " 'calc-keypad-press)
-  (define-key calc-keypad-map "\r" 'calc-keypad-press)
-  (define-key calc-keypad-map "\t" 'calc-keypad-menu)
-  (define-key calc-keypad-map "q" 'calc-keypad-off))
+(unless calc-keypad-map
+  (let ((map (make-sparse-keymap)))
+    (define-key map " " 'calc-keypad-press)
+    (define-key map (kbd "RET") 'calc-keypad-press)
+    (define-key map (kbd "TAB") 'calc-keypad-menu)
+    (define-key map "q" 'calc-keypad-off)
+    (define-key map [(mouse-3)] 'calc-keypad-right-click)
+    (define-key map [(mouse-2)] 'calc-keypad-middle-click)
+    (define-key map [(mouse-1)] 'calc-keypad-left-click)
+    (setq calc-keypad-map map)))
 
 (defun calc-do-keypad (&optional full-display interactive)
-  (if (string-match "^19" emacs-version)
-      (error "Sorry, calc-keypad not yet implemented for Emacs 19"))
   (calc-create-buffer)
   (let ((calcbuf (current-buffer)))
-    (or (and calc-keypad-buffer
-            (buffer-name calc-keypad-buffer))
-       (progn
-         (setq calc-keypad-buffer (get-buffer-create "*Calc Keypad*"))
-         (set-buffer calc-keypad-buffer)
-         (use-local-map calc-keypad-map)
-         (setq major-mode 'calc-keypad)
-         (setq mode-name "Calculator")
-         (put 'calc-keypad 'mode-class 'special)
-         (make-local-variable 'calc-main-buffer)
-         (setq calc-main-buffer calcbuf)
-         (calc-keypad-redraw)
-         (calc-trail-buffer)))
+    (unless (and calc-keypad-buffer
+                (buffer-name calc-keypad-buffer))
+      (setq calc-keypad-buffer (get-buffer-create "*Calc Keypad*"))
+      (set-buffer calc-keypad-buffer)
+      (use-local-map calc-keypad-map)
+      (setq major-mode 'calc-keypad)
+      (setq mode-name "Calculator")
+      (put 'calc-keypad 'mode-class 'special)
+      (make-local-variable 'calc-main-buffer)
+      (setq calc-main-buffer calcbuf)
+      (calc-keypad-redraw)
+      (calc-trail-buffer))
     (let ((width 29)
          (height 17)
          win old-win)
@@ -85,16 +82,7 @@
            (bury-buffer calc-keypad-buffer)
            (if (one-window-p)
                (switch-to-buffer (other-buffer))
-             (delete-window win))
-           (if (and calc-keypad-prev-x-left-click
-                    (eq (aref mouse-map 0) 'calc-keypad-x-right-click)
-                    (eq (aref mouse-map 1) 'calc-keypad-x-middle-click)
-                    (eq (aref mouse-map 2) 'calc-keypad-x-left-click))
-               (progn
-                 (aset mouse-map 0 calc-keypad-prev-x-right-click)
-                 (aset mouse-map 1 calc-keypad-prev-x-middle-click)
-                 (aset mouse-map 2 calc-keypad-prev-x-left-click)
-                 (setq calc-keypad-prev-x-left-click nil))))
+             (delete-window win)))
        (setq calc-was-keypad-mode t
              old-win (get-largest-window))
        (if (or (< (window-height old-win) (+ height 6))
@@ -126,24 +114,14 @@
          (split-window win (- (window-height win) height 1))
          (set-window-buffer win calcbuf))
        (select-window old-win)
-       (if (and (eq window-system 'x)
-                (not calc-keypad-prev-x-left-click))
-           (progn
-             (setq calc-keypad-prev-x-right-click (aref mouse-map 0)
-                   calc-keypad-prev-x-middle-click (aref mouse-map 1)
-                   calc-keypad-prev-x-left-click (aref mouse-map 2))
-             (aset mouse-map 0 'calc-keypad-x-right-click)
-             (aset mouse-map 1 'calc-keypad-x-middle-click)
-             (aset mouse-map 2 'calc-keypad-x-left-click)))
        (message "Welcome to GNU Emacs Calc!  Use the left and right mouse 
buttons.")
        (run-hooks 'calc-keypad-start-hook)
        (and calc-keypad-said-hello interactive
             (progn
               (sit-for 2)
               (message "")))
-       (setq calc-keypad-said-hello t))))
-  (setq calc-keypad-input nil)
-)
+       (setq calc-keypad-said-hello t)))
+    (setq calc-keypad-input nil)))
 
 (defun calc-keypad-off ()
   (interactive)
@@ -252,13 +230,13 @@
               (beep))
              ((and (> (minibuffer-depth) 0))
               (cond (isstring
-                     (setq unread-command-char (aref (car cmd) 0)))
+                     (push (aref (car cmd) 0) unread-command-events))
                     ((eq cmd 'calc-pop)
-                     (setq unread-command-char ?\177))
+                     (push ?\177 unread-command-events))
                     ((eq cmd 'calc-enter)
-                     (setq unread-command-char 13))
+                     (push 13 unread-command-events))
                     ((eq cmd 'calc-undo)
-                     (setq unread-command-char 7))
+                     (push 7 unread-command-events))
                     (t
                      (beep))))
              ((and input (string-match "STO\\|RCL" input))
@@ -368,54 +346,29 @@
       (calc-keypad-show-input)))
 )
 
-(defun calc-keypad-x-left-click (arg)
+(defun calc-keypad-left-click (event)
   "Handle a left-button mouse click in Calc Keypad window."
-  (let (coords)
-    (if (and calc-keypad-buffer
-            (buffer-name calc-keypad-buffer)
-            (get-buffer-window calc-keypad-buffer)
-            (setq coords (coordinates-in-window-p
-                          arg (get-buffer-window calc-keypad-buffer))))
-       (let ((win (selected-window)))
-         (unwind-protect
-             (progn
-               (x-mouse-set-point arg)
-               (calc-keypad-press))
-           (and (window-point win)
-                (select-window win))))
-      (funcall calc-keypad-prev-x-left-click arg)))
-)
+  (interactive "e")
+  (goto-char (posn-point (event-start event)))
+  (calc-keypad-press))
 
-(defun calc-keypad-x-right-click (arg)
+(defun calc-keypad-right-click (event)
   "Handle a right-button mouse click in Calc Keypad window."
-  (if (and calc-keypad-buffer
-          (buffer-name calc-keypad-buffer)
-          (get-buffer-window calc-keypad-buffer)
-          (coordinates-in-window-p
-           arg (get-buffer-window calc-keypad-buffer)))
-      (save-excursion
-       (set-buffer calc-keypad-buffer)
-       (calc-keypad-menu))
-    (funcall calc-keypad-prev-x-right-click arg))
-)
+  (interactive "e")
+  (save-excursion
+    (set-buffer calc-keypad-buffer)
+    (calc-keypad-menu)))
 
-(defun calc-keypad-x-middle-click (arg)
+(defun calc-keypad-middle-click (event)
   "Handle a middle-button mouse click in Calc Keypad window."
-  (if (and calc-keypad-buffer
-          (buffer-name calc-keypad-buffer)
-          (get-buffer-window calc-keypad-buffer)
-          (coordinates-in-window-p
-           arg (get-buffer-window calc-keypad-buffer)))
-      (save-excursion
-       (set-buffer calc-keypad-buffer)
-       (calc-keypad-menu-back))
-    (funcall calc-keypad-prev-x-middle-click arg))
-)
+  (interactive "e")
+  (with-current-buffer calc-keypad-buffer
+    (calc-keypad-menu-back)))
 
 (defun calc-keypad-menu ()
   (interactive)
-  (or (eq major-mode 'calc-keypad)
-      (error "Must be in *Calc Keypad* buffer for this command"))
+  (unless (eq major-mode 'calc-keypad)
+    (error "Must be in *Calc Keypad* buffer for this command"))
   (while (progn (setq calc-keypad-menu (% (1+ calc-keypad-menu)
                                          (length calc-keypad-menus)))
                (not (symbol-value (nth calc-keypad-menu calc-keypad-menus)))))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]