comparison lisp/mouse.el @ 793:e38acbeb1cae

[xemacs-hg @ 2002-03-29 04:46:17 by ben] lots o' fixes etc/ChangeLog: New file. Separated out all entries for etc/ into their own ChangeLog. Includes entries for the following files: etc/BABYL, etc/BETA, etc/CHARSETS, etc/DISTRIB, etc/Emacs.ad, etc/FTP, etc/GNUS-NEWS, etc/GOATS, etc/HELLO, etc/INSTALL, etc/MACHINES, etc/MAILINGLISTS, etc/MSDOS, etc/MYTHOLOGY, etc/NEWS, etc/OXYMORONS, etc/PACKAGES, etc/README, etc/TUTORIAL, etc/TUTORIAL.de, etc/TUTORIAL.ja, etc/TUTORIAL.ko, etc/TUTORIAL.se, etc/aliases.ksh, etc/altrasoft-logo.xpm, etc/check_cygwin_setup.sh, etc/custom/example-themes/europe-theme.el, etc/custom/example-themes/ex-custom-file, etc/custom/example-themes/example-theme.el, etc/e/eterm.ti, etc/edt-user.doc, etc/enriched.doc, etc/etags.1, etc/gnuserv.1, etc/gnuserv.README, etc/package-index.LATEST.gpg, etc/package-index.LATEST.pgp, etc/photos/jan.png, etc/recycle.xpm, etc/refcard.tex, etc/sample.Xdefaults, etc/sample.emacs, etc/sgml/CATALOG, etc/sgml/HTML32.dtd, etc/skk/SKK.tut.E, etc/smilies/Face_ase.xbm, etc/smilies/Face_ase2.xbm, etc/smilies/Face_ase3.xbm, etc/smilies/Face_smile.xbm, etc/smilies/Face_weep.xbm, etc/sounds, etc/toolbar, etc/toolbar/workshop-cap-up.xpm, etc/xemacs-ja.1, etc/xemacs.1, etc/yow.lines, etc\BETA, etc\NEWS, etc\README, etc\TUTORIAL, etc\TUTORIAL.de, etc\check_cygwin_setup.sh, etc\sample.init.el, etc\unicode\README, etc\unicode\mule-ucs\*, etc\unicode\other\* unicode/unicode-consortium/8859-16.TXT: New file. mule/english.el: Define this charset now, since a bug was fixed that formerly prevented it. mule/ethio-util.el: Fix compile errors involving Unicode `characters', which should be integers. Makefile.in.in: Always include gui.c, to fix compile error when TTY-only. EmacsFrame.c, abbrev.c, alloc.c, buffer.c, buffer.h, bytecode.c, bytecode.h, callint.c, callproc.c, casetab.c, casetab.h, charset.h, chartab.c, chartab.h, cmds.c, console-msw.c, console-msw.h, console-tty.c, console-x.c, console-x.h, console.c, console.h, data.c, database.c, device-gtk.c, device-msw.c, device-x.c, device.c, device.h, dialog-msw.c, doc.c, doprnt.c, dumper.c, dynarr.c, editfns.c, eldap.c, eldap.h, elhash.c, elhash.h, emacs.c, eval.c, event-Xt.c, event-gtk.c, event-msw.c, event-stream.c, event-tty.c, event-unixoid.c, events.c, events.h, extents.c, extents.h, faces.c, faces.h, file-coding.c, file-coding.h, fileio.c, filelock.c, fns.c, frame-gtk.c, frame-msw.c, frame-tty.c, frame-x.c, frame.c, frame.h, free-hook.c, general-slots.h, glyphs-eimage.c, glyphs-gtk.c, glyphs-msw.c, glyphs-widget.c, glyphs-x.c, glyphs.c, glyphs.h, gpmevent.c, gtk-xemacs.c, gui-msw.c, gui-x.c, gui-x.h, gui.c, gui.h, gutter.c, gutter.h, indent.c, input-method-xlib.c, insdel.c, keymap.c, keymap.h, lisp-disunion.h, lisp-union.h, lisp.h, lread.c, lrecord.h, lstream.c, lstream.h, marker.c, menubar-gtk.c, menubar-msw.c, menubar-x.c, menubar.c, minibuf.c, mule-canna.c, mule-ccl.c, mule-charset.c, mule-wnnfns.c, native-gtk-toolbar.c, objects-msw.c, objects-tty.c, objects-x.c, objects.c, objects.h, opaque.c, opaque.h, postgresql.c, postgresql.h, print.c, process-unix.c, process.c, process.h, rangetab.c, rangetab.h, redisplay-gtk.c, redisplay-msw.c, redisplay-output.c, redisplay-tty.c, redisplay-x.c, redisplay.c, scrollbar-gtk.c, scrollbar-msw.c, scrollbar-x.c, scrollbar.c, scrollbar.h, search.c, select-gtk.c, select-x.c, sound.c, specifier.c, specifier.h, strftime.c, symbols.c, symeval.h, syntax.h, text.c, text.h, toolbar-common.c, toolbar-msw.c, toolbar.c, toolbar.h, tooltalk.c, tooltalk.h, ui-gtk.c, ui-gtk.h, undo.c, vm-limit.c, window.c, window.h: Eliminate XSETFOO. Replace all usages with wrap_foo(). Make symbol->name a Lisp_Object, not Lisp_String *. Eliminate nearly all uses of Lisp_String * in favor of Lisp_Object, and correct macros so most of them favor Lisp_Object. Create new error-behavior ERROR_ME_DEBUG_WARN -- output warnings, but at level `debug' (usually ignored). Use it when instantiating specifiers, so problems can be debugged. Move log-warning-minimum-level into C so that we can optimize ERROR_ME_DEBUG_WARN. Fix warning levels consistent with new definitions. Add default_ and parent fields to char table; not yet implemented. New fun Dynarr_verify(); use for further error checking on Dynarrs. Rearrange code at top of lisp.h in conjunction with dynarr changes. Fix eifree(). Use Eistrings in various places (format_event_object(), where_is_to_char(), and callers thereof) to avoid fixed-size strings buffers. New fun write_eistring(). Reindent and fix GPM code to follow standards. Set default MS Windows font to Lucida Console (same size as Courier New but less interline spacing, so more lines fit). Increase default frame size on Windows to 50 lines. (If that's too big for the workspace, the frame will be shrunk as necessary.) Fix problem with text files with no newlines (). (Change `convert-eol' coding system to use `nil' for autodetect, consistent with make-coding-system.) Correct compile warnings in vm-limit.c. Fix handling of reverse-direction charsets to avoid errors when opening (e.g.) mule-ucs/lisp/reldata/uiso8859-6.el. Recode some object printing methods to use write_fmt_string() instead of a fixed buffer and sprintf. Turn on display of png comments as warnings (level `info'), now that they're unobtrusive. Revamped the sound documentation. Fixed bug in redisplay w.r.t. hscroll/truncation/continuation glyphs causing jumping up and down of the lines, since they're bigger than the line size. (It was seen most obviously when there's a horizontal scroll bar, e.g. do C-h a glyph or something like that.) The problem was that the glyph-contrib-p setting on glyphs was ignored even if it was set properly, which it wasn't until now.
author ben
date Fri, 29 Mar 2002 04:49:13 +0000
parents 2923009caf47
children e17beacca645
comparison
equal deleted inserted replaced
792:4e83fdb13eb9 793:e38acbeb1cae
1 ;;; mouse.el --- window system-independent mouse support. 1 ;;; mouse.el --- window system-independent mouse support.
2 2
3 ;; Copyright (C) 1988, 1992-4, 1997 Free Software Foundation, Inc. 3 ;; Copyright (C) 1988, 1992-4, 1997 Free Software Foundation, Inc.
4 ;; Copyright (C) 1995 Tinker Systems 4 ;; Copyright (C) 1995 Tinker Systems
5 ;; Copyright (C) 1995, 1996, 2000 Ben Wing. 5 ;; Copyright (C) 1995, 1996, 2000, 2002 Ben Wing.
6 6
7 ;; Maintainer: XEmacs Development Team 7 ;; Maintainer: XEmacs Development Team
8 ;; Keywords: mouse, dumped 8 ;; Keywords: mouse, dumped
9 9
10 ;; This file is part of XEmacs. 10 ;; This file is part of XEmacs.
43 43
44 (provide 'mouse) 44 (provide 'mouse)
45 45
46 (global-set-key 'button1 'mouse-track) 46 (global-set-key 'button1 'mouse-track)
47 (global-set-key '(shift button1) 'mouse-track-adjust) 47 (global-set-key '(shift button1) 'mouse-track-adjust)
48 (global-set-key '(meta button1) 'mouse-track-by-lines)
49 (global-set-key '(meta shift button1) 'mouse-track-adjust-by-lines)
48 (global-set-key '(control button1) 'mouse-track-insert) 50 (global-set-key '(control button1) 'mouse-track-insert)
49 (global-set-key '(control shift button1) 'mouse-track-delete-and-insert) 51 (global-set-key '(control shift button1) 'mouse-track-delete-and-insert)
50 (global-set-key '(meta button1) 'mouse-track-do-rectangle) 52 (global-set-key '(meta control button1) 'mouse-track-insert-by-lines)
53 (global-set-key '(meta shift control button1)
54 'mouse-track-delete-and-insert-by-lines)
51 (global-set-key 'button2 'mouse-track) 55 (global-set-key 'button2 'mouse-track)
56 (global-set-key '(meta button2) 'mouse-track-do-rectangle)
52 57
53 (defgroup mouse nil 58 (defgroup mouse nil
54 "Window system-independent mouse support." 59 "Window system-independent mouse support."
55 :group 'editing) 60 :group 'editing)
56 61
82 87
83 (defvar mouse-yank-function 'mouse-consolidated-yank 88 (defvar mouse-yank-function 'mouse-consolidated-yank
84 "Function that is called upon by `mouse-yank' to actually insert text.") 89 "Function that is called upon by `mouse-yank' to actually insert text.")
85 90
86 (defun mouse-consolidated-yank () 91 (defun mouse-consolidated-yank ()
87 "Insert the current selection or, if there is none under X insert 92 "Insert the current selection at point.
88 the X cutbuffer. A mark is pushed, so that the inserted text lies 93 \(Under X Windows, if there is none, insert the X cutbuffer.) A mark is
89 between point and mark." 94 pushed, so that the inserted text lies between point and mark. This is the
95 default value of `mouse-yank-function', and as such is called by
96 `mouse-yank' to do the actual work."
90 (interactive) 97 (interactive)
91 (if (and (not (console-on-window-system-p)) 98 (if (and (not (console-on-window-system-p))
92 (and (featurep 'gpm) 99 (and (featurep 'gpm)
93 (not (declare-boundp gpm-minor-mode)))) 100 (not (declare-boundp gpm-minor-mode))))
94 (yank) 101 (yank)
174 181
175 (defun mouse-yank (event) 182 (defun mouse-yank (event)
176 "Paste text with the mouse. 183 "Paste text with the mouse.
177 If the variable `mouse-yank-at-point' is nil, then pasting occurs at the 184 If the variable `mouse-yank-at-point' is nil, then pasting occurs at the
178 location of the click; otherwise, pasting occurs at the current cursor 185 location of the click; otherwise, pasting occurs at the current cursor
179 location." 186 location. This calls the value of the variable `mouse-yank-function'
187 (normally the function `mouse-consolidated-yank') to do the actual work.
188 This is normally called as a result of a click of button2 by
189 `default-mouse-track-click-hook'."
180 (interactive "e") 190 (interactive "e")
181 (and (not mouse-yank-at-point) 191 (and (not mouse-yank-at-point)
182 (mouse-set-point event)) 192 (mouse-set-point event))
183 (funcall mouse-yank-function)) 193 (funcall mouse-yank-function))
184 194
625 ;; attempting to debug a click-hook (which is pretty damn 635 ;; attempting to debug a click-hook (which is pretty damn
626 ;; difficult to do), this function may get called. 636 ;; difficult to do), this function may get called.
627 ) 637 )
628 638
629 (defun mouse-track (event &optional overriding-hooks) 639 (defun mouse-track (event &optional overriding-hooks)
630 "Generalized mouse-button handler. This should be bound to a mouse button. 640 "Generalized mouse-button handler.
631 The behavior of this function is customizable using various hooks and 641 This is the function that handles standard mouse behavior -- moving point
632 variables: see `mouse-track-click-hook', `mouse-track-drag-hook', 642 when clicked, selecting text when dragged, etc. -- and should be bound to a
643 mouse button (normally, button1 and button2).
644
645 This allows for overloading of different mouse strokes with different
646 commands. The behavior of this function is customizable using various
647 hooks and variables: see `mouse-track-click-hook', `mouse-track-drag-hook',
633 `mouse-track-drag-up-hook', `mouse-track-down-hook', `mouse-track-up-hook', 648 `mouse-track-drag-up-hook', `mouse-track-down-hook', `mouse-track-up-hook',
634 `mouse-track-cleanup-hook', `mouse-track-multi-click-time', 649 `mouse-track-cleanup-hook', `mouse-track-multi-click-time',
635 `mouse-track-scroll-delay', `mouse-track-x-threshold', and 650 `mouse-track-scroll-delay', `mouse-track-x-threshold', and
636 `mouse-track-y-threshold'. 651 `mouse-track-y-threshold'.
637 652
659 674
660 If you drag the mouse off the top or bottom of the window, you can select 675 If you drag the mouse off the top or bottom of the window, you can select
661 pieces of text which are larger than the visible part of the buffer; the 676 pieces of text which are larger than the visible part of the buffer; the
662 buffer will scroll as necessary. 677 buffer will scroll as necessary.
663 678
664 The selected text becomes the current X Selection. The point will be left 679 The point will be left at the position at which you released the button,
665 at the position at which you released the button, and the mark will be left 680 and the mark will be left at the initial click position.
666 at the initial click position." 681
682 Under X Windows, the selected text becomes the current X Selection, and can
683 be immediately inserted elsewhere using button2. Under MS Windows, this
684 also works, because the behavior is emulated."
667 (interactive "e") 685 (interactive "e")
668 (let ((mouse-down t) 686 (let ((mouse-down t)
669 (xthresh (eval mouse-track-x-threshold)) 687 (xthresh (eval mouse-track-x-threshold))
670 (ythresh (eval mouse-track-y-threshold)) 688 (ythresh (eval mouse-track-y-threshold))
671 (orig-x (event-x-pixel event)) 689 (orig-x (event-x-pixel event))
840 858
841 859
842 ;; This remembers the last position at which the user clicked, for the 860 ;; This remembers the last position at which the user clicked, for the
843 ;; benefit of mouse-track-adjust (for example, button1; scroll until the 861 ;; benefit of mouse-track-adjust (for example, button1; scroll until the
844 ;; position of the click is off the frame; then Sh-button1 to select the 862 ;; position of the click is off the frame; then Sh-button1 to select the
845 ;; new region. 863 ;; new region).
846 (defvar default-mouse-track-previous-point nil) 864 (defvar default-mouse-track-previous-point nil)
847 865
848 (defun default-mouse-track-set-point (event window) 866 (defun default-mouse-track-set-point (event window)
849 (if (default-mouse-track-set-point-in-window event window) 867 (if (default-mouse-track-set-point-in-window event window)
850 nil 868 nil
917 (not (default-mouse-track-point-at-opening-quote-p)))) 935 (not (default-mouse-track-point-at-opening-quote-p))))
918 (goto-char (scan-sexps (1+ (point)) -1)) 936 (goto-char (scan-sexps (1+ (point)) -1))
919 (default-mouse-track-beginning-of-word 937 (default-mouse-track-beginning-of-word
920 (default-mouse-track-symbolp type)))))) 938 (default-mouse-track-symbolp type))))))
921 ((eq type 'line) 939 ((eq type 'line)
922 (if forwardp (end-of-line) (beginning-of-line))) 940 (if forwardp
941 ;; Counter-kludge. If we are adjusting a line-oriented
942 ;; selection, default-mouse-track-return-dragged-selection
943 ;; fixed it to include the final newline. Unfortunately, that
944 ;; will cause us to add another line at the end (the wrong
945 ;; side of the selection) unless we take evasive action.
946 (unless (and default-mouse-track-adjust
947 (bolp))
948 (end-of-line))
949 (beginning-of-line)))
923 ((eq type 'buffer) 950 ((eq type 'buffer)
924 (if forwardp (end-of-buffer) (beginning-of-buffer))))) 951 (if forwardp (end-of-buffer) (beginning-of-buffer)))))
925 952
926 (defun default-mouse-track-next-move (min-anchor max-anchor extent) 953 (defun default-mouse-track-next-move (min-anchor max-anchor extent)
927 (let ((anchor (if (<= (point) min-anchor) max-anchor min-anchor))) 954 (let ((anchor (if (<= (point) min-anchor) max-anchor min-anchor)))
1266 (= (point) (extent-end-position first))) 1293 (= (point) (extent-end-position first)))
1267 (goto-char (car result))))) 1294 (goto-char (car result)))))
1268 (extent 1295 (extent
1269 (setq result (cons (extent-start-position extent) 1296 (setq result (cons (extent-start-position extent)
1270 (extent-end-position extent))))) 1297 (extent-end-position extent)))))
1271 ;; Minor kludge: if we're selecting in line-mode, include the 1298 ;; Minor kludge: if we're selecting in line-mode, include the final
1272 ;; final newline. It's hard to do this in *-normalize-point. 1299 ;; newline. It's hard to do this in *-normalize-point. Unfortunately
1300 ;; this necessitates a counter-kludge in
1301 ;; default-mouse-track-normalize-point.
1273 (if (and result (eq default-mouse-track-type 'line)) 1302 (if (and result (eq default-mouse-track-type 'line))
1274 (let ((end-p (= (point) (cdr result)))) 1303 (let ((end-p (= (point) (cdr result))))
1275 (goto-char (cdr result)) 1304 (goto-char (cdr result))
1276 (if (not (eobp)) 1305 (if (and (eolp) (not (eobp)))
1277 (setcdr result (1+ (cdr result)))) 1306 (setcdr result (1+ (cdr result))))
1278 (goto-char (if end-p (cdr result) (car result))))) 1307 (goto-char (if end-p (cdr result) (car result)))))
1279 ;;; ;; Minor kludge sub 2. If in char mode, and we drag the 1308 ;;; ;; Minor kludge sub 2. If in char mode, and we drag the
1280 ;;; ;; mouse past EOL, include the newline. 1309 ;;; ;; mouse past EOL, include the newline.
1281 ;;; ;; 1310 ;;; ;;
1360 "Like `mouse-track' but selects rectangles instead of regions." 1389 "Like `mouse-track' but selects rectangles instead of regions."
1361 (interactive "e") 1390 (interactive "e")
1362 (let ((mouse-track-rectangle-p t)) 1391 (let ((mouse-track-rectangle-p t))
1363 (mouse-track event))) 1392 (mouse-track event)))
1364 1393
1394 (defun mouse-track-by-lines (event)
1395 "Make a line-by-line selection with the mouse.
1396 This actually works the same as `mouse-track' (which handles all
1397 mouse-button behavior) but forces whole lines to be selected."
1398 (interactive "e")
1399 (let ((default-mouse-track-type-list '(line)))
1400 (mouse-track event)))
1401
1365 (defun mouse-track-adjust (event) 1402 (defun mouse-track-adjust (event)
1366 "Extend the existing selection. This should be bound to a mouse button. 1403 "Extend the existing selection. This should be bound to a mouse button.
1367 The selection will be enlarged or shrunk so that the point of the mouse 1404 The selection will be enlarged or shrunk so that the point of the mouse
1368 click is one of its endpoints. This function in fact behaves fairly 1405 click is one of its endpoints. This function in fact behaves fairly
1369 similarly to `mouse-track', but begins by extending the existing selection 1406 similarly to `mouse-track', but begins by extending the existing selection
1383 custom mouse-track handlers that the user may have installed." 1420 custom mouse-track handlers that the user may have installed."
1384 (interactive "e") 1421 (interactive "e")
1385 (let ((default-mouse-track-adjust t)) 1422 (let ((default-mouse-track-adjust t))
1386 (mouse-track-default event))) 1423 (mouse-track-default event)))
1387 1424
1388 (defun mouse-track-insert (event &optional delete) 1425 (defun mouse-track-adjust-by-lines (event)
1389 "Make a selection with the mouse and insert it at point. 1426 "Extend the existing selection by lines.
1390 This is exactly the same as the `mouse-track' command on \\[mouse-track], 1427 This works the same as `mouse-track-adjust' (bound to \\[mouse-track-adjust])
1391 except that point is not moved; the selected text is immediately inserted 1428 but forces whole lines to be selected."
1392 after being selected\; and the selection is immediately disowned afterwards." 1429 (interactive "e")
1430 (let ((default-mouse-track-type-list '(line))
1431 (default-mouse-track-adjust t))
1432 (mouse-track event)))
1433
1434 (defun mouse-track-insert-1 (event &optional delete line-p)
1435 "Guts of mouse-track-insert and friends.
1436 If DELETE, delete the selection as well as inserting it at the new place.
1437 If LINE-P, select by lines and insert before current line."
1393 (interactive "*e") 1438 (interactive "*e")
1394 (let (s selreg) 1439 (let ((default-mouse-track-type-list
1440 (if line-p '(line) default-mouse-track-type-list))
1441 s selreg)
1395 (flet ((Mouse-track-insert-drag-up-hook (event count) 1442 (flet ((Mouse-track-insert-drag-up-hook (event count)
1396 (setq selreg 1443 (setq selreg
1397 (default-mouse-track-return-dragged-selection event)) 1444 (default-mouse-track-return-dragged-selection event))
1398 t) 1445 t)
1399 (Mouse-track-insert-click-hook (event count) 1446 (Mouse-track-insert-click-hook (event count)
1413 (let ((pair selreg)) 1460 (let ((pair selreg))
1414 (setq s (prog1 1461 (setq s (prog1
1415 (buffer-substring (car pair) (cdr pair)) 1462 (buffer-substring (car pair) (cdr pair))
1416 (if delete 1463 (if delete
1417 (kill-region (car pair) (cdr pair)))))))))) 1464 (kill-region (car pair) (cdr pair))))))))))
1418 (or (null s) (equal s "") (insert s)))) 1465 (or (null s) (equal s "")
1466 (progn
1467 (if line-p (beginning-of-line))
1468 (insert s)))))
1469
1470 (defun mouse-track-insert (event)
1471 "Make a selection with the mouse and insert it at point.
1472 This works the same as just selecting text using the mouse (the
1473 `mouse-track' command), except that point is not moved; the selected text
1474 is immediately inserted after being selected\; and the selection is
1475 immediately disowned afterwards."
1476 (interactive "*e")
1477 (mouse-track-insert-1 event))
1419 1478
1420 (defun mouse-track-delete-and-insert (event) 1479 (defun mouse-track-delete-and-insert (event)
1421 "Make a selection with the mouse and insert it at point. 1480 "Make a selection with the mouse and move it to point.
1422 This is exactly the same as the `mouse-track' command on \\[mouse-track], 1481 This works the same as just selecting text using the mouse (the
1423 except that point is not moved; the selected text is immediately inserted 1482 `mouse-track' command), except that point is not moved; the selected text
1424 after being selected\; and the text of the selection is deleted." 1483 is immediately inserted after being selected\; and the text of the
1484 selection is deleted."
1425 (interactive "*e") 1485 (interactive "*e")
1426 (mouse-track-insert event t)) 1486 (mouse-track-insert-1 event t))
1487
1488 (defun mouse-track-insert-by-lines (event)
1489 "Make a line-oriented selection with the mouse and insert it at line start.
1490 This is similar to `mouse-track-insert' except that it always selects
1491 entire lines and inserts the lines before the current line rather than at
1492 point."
1493 (interactive "*e")
1494 (mouse-track-insert-1 event nil t))
1495
1496 (defun mouse-track-delete-and-insert-by-lines (event)
1497 "Make a line-oriented selection with the mouse and move it to line start.
1498 This is similar to `mouse-track-insert' except that it always selects
1499 entire lines and inserts the lines before the current line rather than at
1500 point."
1501 (interactive "*e")
1502 (mouse-track-insert-1 event nil t))
1427 1503
1428 ;;;;;;;;;;;;;;;;;;;;;;;; 1504 ;;;;;;;;;;;;;;;;;;;;;;;;
1429 1505
1430 1506
1431 (defvar inhibit-help-echo nil 1507 (defvar inhibit-help-echo nil