;;; -*- Mode:LISP; Package:LAMBDA; Readtable:ZL; Base:10 -*- ;;; Copyright LISP Machine, Inc. 1984, 1985, 1986 ;;; See filename "Copyright.Text" for ;;; licensing and release information. ;;; This here winnage, and a couple line change to LAM-GETSYL-RCH makes ;;; numeric typeout from LAM mouse sensitive. (DEFCONSTANT *SENSITIVE-ITEM-TYPE-ALIST* '((NUMBER FORCE-OBJECT-KBD-INPUT "Left: shove this number. Right: Menu" ("Into Kill Ring" :value FORCE-OBJECT-KILL-RING :documentation "put object into kill ring") ("LAM Describe" :value BLIP-LAM-DESCRIBE :documentation "As the :DESCRIBE command") ;; add _S command, etc. ))) (DEFFLAVOR SENSITIVE-LISP-LISTENER () (tv:notification-mixin tv:basic-mouse-sensitive-items TV:lisp-interactor) (:DOCUMENTATION :COMBINATION "Mouse Sensitive LISP window") (:DEFAULT-INIT-PLIST :SAVE-BITS T :ITEM-TYPE-ALIST *SENSITIVE-ITEM-TYPE-ALIST*)) (DEFUN RESET-ITEM-TYPE-ALIST () (send *standard-output* :set-item-type-alist *SENSITIVE-ITEM-TYPE-ALIST*)) (DEFUN HANDLE-TYPEOUT-EXECUTE (BLIP STREAM) (FUNCALL (CADR BLIP) (CADDR BLIP) STREAM)) (DEFUN FORCE-OBJECT-KBD-INPUT (OBJECT STREAM) (SEND STREAM :FORCE-KBD-INPUT (FORMAT NIL "~S" OBJECT))) (DEFUN FORCE-OBJECT-KILL-RING (OBJECT STREAM) STREAM (ZWEI:KILL-STRING (FORMAT NIL "~S" OBJECT))) (DEFUN BLIP-LAM-DESCRIBE (OBJECT STREAM) STREAM (LET ((LAM-LAST-VALUE-TYPED OBJECT)) (FUNCALL (GET 'DESCRIBE 'LAM-COLON-CMD) NIL))) (DEFMETHOD (SENSITIVE-LISP-LISTENER :PRINT) (EXP DEPTH ESCAPE) ESCAPE (COND ((NUMBERP EXP) (SEND SELF :ITEM 'NUMBER EXP "~S" EXP)) ('ELSE (SI:PRINT-OBJECT EXP DEPTH SELF)))) ;; ;;; Mouse-left selects the blinking item, mouse-right pops up a menu near it ;;; THIS IS A MODIFIED VERSION OF (BASIC-MOUSE-SENSITIVE-ITEMS :MOUSE-CLICK) ;;; WHICH HAD A BUG THAT YOU COULD NOT SELECT THE DAMN WINDOW WITH A MOUSE CLICK! (DEFMETHOD (SENSITIVE-LISP-LISTENER :MOUSE-CLICK) (BUTTON X Y &AUX ITEM) (COND ((SETQ ITEM (SEND SELF :MOUSE-SENSITIVE-ITEM X Y)) (LET ((ITEM-TYPE (ASSQ (TV:TYPEOUT-ITEM-TYPE ITEM) TV:ITEM-TYPE-ALIST))) (WHEN ITEM-TYPE (COND ((EQ BUTTON #/MOUSE-1-1) (SEND SELF :FORCE-KBD-INPUT (LIST ':TYPEOUT-EXECUTE (CADR ITEM-TYPE) (TV:TYPEOUT-ITEM-ITEM ITEM))) T) ((AND (EQ BUTTON #/MOUSE-3-1) (CDDDR ITEM-TYPE)) (PROCESS-RUN-FUNCTION "Menu Choose" #'TV:TYPEOUT-MENU-CHOOSE TV:MENU (CDDDR ITEM-TYPE) ITEM SELF ;; Compute a label for the menu. (OR (AND (CONSP (THIRD ITEM-TYPE)) (CADR (THIRD ITEM-TYPE)) (FUNCALL (CADR (THIRD ITEM-TYPE)) ITEM)) (AND (TYPEP (SECOND ITEM) 'INSTANCE) (OR (SEND (SECOND ITEM) :SEND-IF-HANDLES :STRING-FOR-PRINTING) (SEND (SECOND ITEM) :SEND-IF-HANDLES :NAME))))) T) (T (BEEP)))))) ('ELSE ;; AND HERE IS THE CODE FROM (:METHOD ESSENTIAL-MOUSE :MOUSE-CLICK) ;; ARGH!!!! (COND ((AND (= BUTTON #/MOUSE-1-1) (NOT (SEND (SEND SELF :ALIAS-FOR-SELECTED-WINDOWS) :SELF-OR-SUBSTITUTE-SELECTED-P)) (OPERATION-HANDLED-P SELF :SELECT)) ;paper over a bug (TV:MOUSE-SELECT SELF) T) (T (OR (SEND SELF :SEND-IF-HANDLES :FORCE-KBD-INPUT `(:MOUSE-BUTTON ,BUTTON ,SELF ,X ,Y)) (AND (= BUTTON #/MOUSE-3-1) (TV:MOUSE-CALL-SYSTEM-MENU) T) (BEEP))))))) (COMPILE-FLAVOR-METHODS SENSITIVE-LISP-LISTENER)