Annotation of 43BSDReno/contrib/emacs-18.55/lisp/sup-mouse.el, revision 1.1

1.1     ! root        1: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        !             2: ;;                                                                          ;;
        !             3: ;;     File:     sup-mouse.el                                               ;;
        !             4: ;;     Author:   Wolfgang Rupprecht                                         ;;
        !             5: ;;     Created:  Fri Nov 21 19:22:22 1986                                   ;;
        !             6: ;;     Contents: supdup mouse support for lisp machines                     ;;
        !             7: ;;                                                                          ;;
        !             8: ;;     (from code originally written by John Robinson@bbn for the bitgraph)  ;;
        !             9: ;;                                                                          ;;
        !            10: ;;     $Log$                                                                ;;
        !            11: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        !            12: 
        !            13: ;; GNU Emacs code for lambda/supdup mouse
        !            14: ;; Copyright (C) Free Software Foundation 1985, 1986
        !            15: 
        !            16: ;; This file is part of GNU Emacs.
        !            17: 
        !            18: ;; GNU Emacs is distributed in the hope that it will be useful,
        !            19: ;; but WITHOUT ANY WARRANTY.  No author or distributor
        !            20: ;; accepts responsibility to anyone for the consequences of using it
        !            21: ;; or for whether it serves any particular purpose or works at all,
        !            22: ;; unless he says so in writing.  Refer to the GNU Emacs General Public
        !            23: ;; License for full details.
        !            24: 
        !            25: ;; Everyone is granted permission to copy, modify and redistribute
        !            26: ;; GNU Emacs, but only under the conditions described in the
        !            27: ;; GNU Emacs General Public License.   A copy of this license is
        !            28: ;; supposed to have been given to you along with GNU Emacs so you
        !            29: ;; can know your rights and responsibilities.  It should be in a
        !            30: ;; file named COPYING.  Among other things, the copyright notice
        !            31: ;; and this notice must be preserved on all copies.
        !            32: 
        !            33: ;;;  User customization option:
        !            34: 
        !            35: (defvar sup-mouse-fast-select-window nil
        !            36:   "*Non-nil for mouse hits to select new window, then execute; else just select.")
        !            37: 
        !            38: (defconst mouse-left 0)
        !            39: (defconst mouse-center 1)
        !            40: (defconst mouse-right 2)
        !            41: 
        !            42: (defconst mouse-2left 4)
        !            43: (defconst mouse-2center 5)
        !            44: (defconst mouse-2right 6)
        !            45: 
        !            46: (defconst mouse-3left 8)
        !            47: (defconst mouse-3center 9)
        !            48: (defconst mouse-3right 10)
        !            49: 
        !            50: ;;;  Defuns:
        !            51: 
        !            52: (defun sup-mouse-report ()
        !            53:   "This function is called directly by the mouse, it parses and
        !            54: executes the mouse commands.
        !            55: 
        !            56:  L move point          *  |---- These apply for mouse click in a window.
        !            57: 2L delete word            |
        !            58: 3L copy word             | If sup-mouse-fast-select-window is nil,
        !            59:  C move point and yank *  | just selects that window.
        !            60: 2C yank pop              |
        !            61:  R set mark            *  |
        !            62: 2R delete region         |
        !            63: 3R copy region           |
        !            64: 
        !            65: on modeline                on \"scroll bar\"   in minibuffer
        !            66:  L scroll-up               line to top         execute-extended-command
        !            67:  C proportional goto-char   line to middle     mouse-help
        !            68:  R scroll-down             line to bottom      eval-expression"
        !            69:   
        !            70:   (interactive)
        !            71:   (let*
        !            72: ;; expect a string of <esc>:<buttons>;<x-pos>;<y-pos>c
        !            73:       ((buttons (sup-get-tty-num ?\;))
        !            74:        (x (sup-get-tty-num ?\;))
        !            75:        (y (sup-get-tty-num ?c))
        !            76:        (window (sup-pos-to-window x y))
        !            77:        (edges (window-edges window))
        !            78:        (old-window (selected-window))
        !            79:        (in-minibuf-p (eq y (1- (screen-height))))
        !            80:        (same-window-p (and (not in-minibuf-p) (eq window old-window)))
        !            81:        (in-modeline-p (eq y (1- (nth 3 edges))))
        !            82:        (in-scrollbar-p (>= x (1- (nth 2 edges)))))
        !            83:     (setq x (- x (nth 0 edges)))
        !            84:     (setq y (- y (nth 1 edges)))
        !            85: 
        !            86: ;    (error "mouse-hit %d %d %d" buttons x y) ;;;; debug
        !            87: 
        !            88:     (cond (in-modeline-p
        !            89:           (select-window window)
        !            90:           (cond ((= buttons mouse-left)
        !            91:                  (scroll-up))
        !            92:                 ((= buttons mouse-right)
        !            93:                  (scroll-down))
        !            94:                 ((= buttons mouse-center)
        !            95:                  (goto-char (/ (* x
        !            96:                                   (- (point-max) (point-min)))
        !            97:                                (1- (window-width))))
        !            98:                  (beginning-of-line)
        !            99:                  (what-cursor-position)))
        !           100:           (select-window old-window))
        !           101:          (in-scrollbar-p
        !           102:           (select-window window)
        !           103:           (scroll-up
        !           104:            (cond ((= buttons mouse-left)
        !           105:                   y)
        !           106:                  ((= buttons mouse-right)
        !           107:                   (+ y (- 2 (window-height))))
        !           108:                  ((= buttons mouse-center)
        !           109:                   (/ (+ 2 y y (- (window-height))) 2))
        !           110:                  (t
        !           111:                   0)))
        !           112:           (select-window old-window))
        !           113:          (same-window-p
        !           114:           (cond ((= buttons mouse-left)
        !           115:                  (sup-move-point-to-x-y x y))
        !           116:                 ((= buttons mouse-2left)
        !           117:                  (sup-move-point-to-x-y x y)
        !           118:                  (kill-word 1))
        !           119:                 ((= buttons mouse-3left)
        !           120:                  (sup-move-point-to-x-y x y)
        !           121:                  (save-excursion
        !           122:                    (copy-region-as-kill
        !           123:                     (point) (progn (forward-word 1) (point))))
        !           124:                  (setq this-command 'yank)
        !           125:                  )
        !           126:                 ((= buttons mouse-right)
        !           127:                  (push-mark)
        !           128:                  (sup-move-point-to-x-y x y)
        !           129:                  (exchange-point-and-mark))
        !           130:                 ((= buttons mouse-2right)
        !           131:                  (push-mark)
        !           132:                  (sup-move-point-to-x-y x y)
        !           133:                  (kill-region (mark) (point)))
        !           134:                 ((= buttons mouse-3right)
        !           135:                  (push-mark)
        !           136:                  (sup-move-point-to-x-y x y)
        !           137:                  (copy-region-as-kill (mark) (point))
        !           138:                  (setq this-command 'yank))
        !           139:                 ((= buttons mouse-center)
        !           140:                  (sup-move-point-to-x-y x y)
        !           141:                  (setq this-command 'yank)
        !           142:                  (yank))
        !           143:                 ((= buttons mouse-2center)
        !           144:                  (yank-pop 1))
        !           145:                 )
        !           146:           )
        !           147:          (in-minibuf-p
        !           148:           (cond ((= buttons mouse-right)
        !           149:                  (call-interactively 'eval-expression))
        !           150:                 ((= buttons mouse-left)
        !           151:                  (call-interactively 'execute-extended-command))
        !           152:                 ((= buttons mouse-center)
        !           153:                  (describe-function 'sup-mouse-report)); silly self help 
        !           154:                 ))
        !           155:          (t                            ;in another window
        !           156:           (select-window window)
        !           157:           (cond ((not sup-mouse-fast-select-window))
        !           158:                 ((= buttons mouse-left)
        !           159:                  (sup-move-point-to-x-y x y))
        !           160:                 ((= buttons mouse-right)
        !           161:                  (push-mark)
        !           162:                  (sup-move-point-to-x-y x y)
        !           163:                  (exchange-point-and-mark))
        !           164:                 ((= buttons mouse-center)
        !           165:                  (sup-move-point-to-x-y x y)
        !           166:                  (setq this-command 'yank)
        !           167:                  (yank))
        !           168:                 ))
        !           169:          )))
        !           170: 
        !           171: 
        !           172: (defun sup-get-tty-num (term-char)
        !           173:   "Read from terminal until TERM-CHAR is read, and return intervening number.
        !           174: Upon non-numeric not matching TERM-CHAR signal an error."
        !           175:   (let
        !           176:       ((num 0)
        !           177:        (char (read-char)))
        !           178:     (while (and (>= char ?0)
        !           179:                (<= char ?9))
        !           180:       (setq num (+ (* num 10) (- char ?0)))
        !           181:       (setq char (read-char)))
        !           182:     (or (eq term-char char)
        !           183:        (error "Invalid data format in mouse command"))
        !           184:     num))
        !           185: 
        !           186: (defun sup-move-point-to-x-y (x y)
        !           187:   "Position cursor in window coordinates.
        !           188: X and Y are 0-based character positions in the window."
        !           189:   (move-to-window-line y)
        !           190:   (move-to-column x)
        !           191:   )
        !           192: 
        !           193: (defun sup-pos-to-window (x y)
        !           194:   "Find window corresponding to screen coordinates.
        !           195: X and Y are 0-based character positions on the screen."
        !           196:   (let ((edges (window-edges))
        !           197:        (window nil))
        !           198:     (while (and (not (eq window (selected-window)))
        !           199:                (or (<  y (nth 1 edges))
        !           200:                    (>= y (nth 3 edges))
        !           201:                    (<  x (nth 0 edges))
        !           202:                    (>= x (nth 2 edges))))
        !           203:       (setq window (next-window window))
        !           204:       (setq edges (window-edges window))
        !           205:       )
        !           206:     (or window (selected-window))
        !           207:     )
        !           208:   )

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.