annotate lisp/vcursor.el @ 24419:30e478cd167e

(shell-command-default-error-buffer): Renamed from shell-command-on-region-default-error-buffer. (shell-command-on-region): Mention in echo area when there is some error output. Mention success or failure, too. Accumulate multiple error outputs going forward, with formfeed in between. Display the error buffer when we have put something in it. (shell-command): Add the ERROR-BUFFER argument feature.
author Karl Heuer <kwzh@gnu.org>
date Mon, 01 Mar 1999 03:19:32 +0000
parents 12fca8181eca
children d3c34ba6d095
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1 ;;; vcursor.el --- manipulate an alternative ("virtual") cursor.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2
21061
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
3 ;; Copyright (C) 1994, 1996, 1998 Free Software Foundation, Inc.
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4
22650
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
5 ;; Author: Peter Stephenson <pws@ibmth.df.unipi.it>
22901
12fca8181eca (vcursor group): Move this to `editing' group.
Richard M. Stallman <rms@gnu.org>
parents: 22650
diff changeset
6 ;; Keywords: virtual cursor, convenience
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7
17902
e4a7b81d6c10 Fix copyright and permission notice.
Richard M. Stallman <rms@gnu.org>
parents: 17450
diff changeset
8 ;; This file is part of GNU Emacs.
e4a7b81d6c10 Fix copyright and permission notice.
Richard M. Stallman <rms@gnu.org>
parents: 17450
diff changeset
9
e4a7b81d6c10 Fix copyright and permission notice.
Richard M. Stallman <rms@gnu.org>
parents: 17450
diff changeset
10 ;; GNU Emacs is free software; you can redistribute it and/or modify
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11 ;; it under the terms of the GNU General Public License as published by
17902
e4a7b81d6c10 Fix copyright and permission notice.
Richard M. Stallman <rms@gnu.org>
parents: 17450
diff changeset
12 ;; the Free Software Foundation; either version 2, or (at your option)
e4a7b81d6c10 Fix copyright and permission notice.
Richard M. Stallman <rms@gnu.org>
parents: 17450
diff changeset
13 ;; any later version.
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14
17902
e4a7b81d6c10 Fix copyright and permission notice.
Richard M. Stallman <rms@gnu.org>
parents: 17450
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; GNU General Public License for more details.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 ;; You should have received a copy of the GNU General Public License
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 ;; Boston, MA 02111-1307, USA.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25 ;;; Commentary:
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26
22650
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
27 ;; Latest changes
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
28 ;; ==============
21061
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
29 ;;
22650
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
30 ;; - *IMPORTANT* vcursor-key-bindings is now nil by default, to avoid
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
31 ;; side-effects when the package is loaded. This means no keys are
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
32 ;; bound by default. Use customize to change it to t to restore
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
33 ;; the old behaviour. (If you do it by hand in .emacs, it
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
34 ;; must come before vcursor is loaded.)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
35 ;; - You can alter the main variables and the vcursor face via
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
36 ;; M-x customize: go to the Editing group and find Vcursor.
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
37 ;; - vcursor-auto-disable can now be 'copy (actually any value not nil
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
38 ;; or t), which means that copying from the vcursor will be turned
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
39 ;; off after any operation not involving the vcursor, but the
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
40 ;; vcursor itself will be left alone.
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
41 ;; - should now work unmodified under XEmacs
21061
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
42 ;; - works on dumb terminals with Emacs 19.29 and later
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
43 ;; - new keymap vcursor-map for binding to a prefix key
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
44 ;; - vcursor-compare-windows substantially improved
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
45 ;; - vcursor-execute-{key,command} much better about using the
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
46 ;; right keymaps and arranging for the correct windows to be used
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
47 ;; - vcursor-window-funcall can call functions interactively
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
48 ;; - vcursor-interpret-input for special effects
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
49 ;;
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
50 ;; Introduction
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
51 ;; ============
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
52 ;;
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53 ;; Virtual cursor commands. I got this idea from the old BBC micro.
21061
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
54 ;; You need Emacs 19 or 20 and a window system for the best effects.
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
55 ;; For character terminals, at least Emacs 19.29 is required
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
56 ;; (special behaviour for the overlay property
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
57 ;; "before-string" must be implemented). Search for "dumb terminals"
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
58 ;; for more information.
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 ;;
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60 ;; This is much easier to use than the instructions are to read.
22650
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
61 ;; First, you need to let vcursor define some keys: setting
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
62 ;; vcursor-key-bindings to t before loading, or by customize, will
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
63 ;; define various keys with the prefix C-S. You'll have to read
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
64 ;; further if you don't want this. Then I suggest you simply load it
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
65 ;; and play around with holding down Ctrl and Shift and pressing up,
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
66 ;; down, left, right, tab, return, and see what happens. (Find a
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
67 ;; scratch buffer before using C-S-tab: that toggles copying.)
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 ;;
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 ;; Most of the functions described in this documentation are in
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70 ;; parentheses so that if you have the package loaded you can type C-h
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71 ;; f on top of them for help.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72 ;;
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73 ;; Using the cursor keys with both control and shift held down moves
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
74 ;; around a virtual cursor, which is initially at point. When active,
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75 ;; it appears with an underline through it to distinguish it from the
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76 ;; normal cursor. You can then use one of the other commands to copy
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
77 ;; characters from the location of the virtual cursor to point. This
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78 ;; is very useful, for example, when copying some previous text while
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
79 ;; making changes to it at the same time, since you never have to move
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
80 ;; the "real" cursor away from where you are inserting.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
81 ;;
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
82 ;; The remaining default key bindings are based around the PC-type
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83 ;; cluster found above the cursor keys on a lot of keyboards, the
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84 ;; function keys which my limited knowledge of X terminals expects to
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85 ;; find at the top. Some functions are duplicated in more obvious
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
86 ;; places for the X version.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
87 ;;
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
88 ;; All the keybindings require you to hold down control and shift at
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
89 ;; once. I assumed this combination wouldn't be heavily bound by most
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
90 ;; people and that it would be easy to type with the left hand.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
91 ;; Inevitably it will clash with some other packages, but I can't help
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
92 ;; that: an intuitive binding is a prerequisite here. See below for
21061
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
93 ;; other alternatives (search for "Oemacs"). There is also a keymap
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
94 ;; which you can bind to a prefix key, which may give some more
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
95 ;; intuitive alternatives in some cases, see `The vcursor keymap' below.
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96 ;;
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97 ;; Holding down control and shift and pressing insert (vcursor-copy)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
98 ;; copies one character from wherever the virtual cursor is to point;
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
99 ;; point and the virtual cursor advance in the separate and equal
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
100 ;; station to which... (etc.). M-C-S-return (vcursor-copy-line)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
101 ;; copies to the end of the line instead of just one character,
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
102 ;; C-S-delete or C-S-remove (vcursor-copy-word) copies a word.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
103 ;;
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
104 ;; A more general way of copying is to use C-S-tab, which is a toggle.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
105 ;; In the "on" state, moving the virtual cursor will copy the
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
106 ;; moved-over text to the normal cursor position (including when going
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107 ;; backwards, though each piece of text moved over is copied forwards:
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 ;; compare the behaviour of C-S-up and C-S-left).
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109 ;;
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110 ;; However, that's just a small part of the magic. If the virtual
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111 ;; cursor goes off the display, it will be redisplayed in some other
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112 ;; window. (See the function (vcursor-find-window) for details of how
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113 ;; this window is chosen.) This gives you fingertip control over two
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114 ;; windows at once.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 ;;
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 ;; C-S-return (vcursor-disable) disables the virtual cursor, removing
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 ;; it so that it starts from point whenever you move it again --- note
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 ;; that simply moving the cursor and virtual cursor on top of one
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119 ;; another does not have this effect.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 ;;
21061
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
121 ;; If you give C-S-return a positive prefix arg, it will also delete the
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 ;; window (unless it's the current one). Whenever the virtual cursor
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123 ;; goes off-screen in its own window, point in that window is moved as
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 ;; well to restore it to view. (It's easier that way, that's why.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125 ;; However, point doesn't move unless the view in the window does, so
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 ;; it's not tied to the virtual cursor location.)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127 ;;
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128 ;; You can also use C-S-return with a negative prefix argument which
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129 ;; forces the vcursor to appear at point. This is particularly useful if
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
130 ;; you actually want to edit in another window but would like to
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131 ;; remember the current cursor location for examining or copying from
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132 ;; that buffer. (I just hit C-S-right C-S-left, but I'm a hopeless
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133 ;; lowbrow.)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134 ;;
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 ;; There is also C-S-f6 (vcursor-other-window) which behaves like
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136 ;; C-x o on the virtual rather than the real cursor, except that it
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137 ;; will create another window if necessary.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
138 ;;
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139 ;; The keys C-S-prior (vcursor-scroll-down) and C-S-next
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140 ;; (vcursor-scroll-up) (i.e., PageUp and PageDown) will scroll the
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 ;; virtual cursor window, appropriately chosen. They will always
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142 ;; create a new window or take over an old one if necessary.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143 ;; Likewise, M-C-S-left and M-C-S-right move you to the
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 ;; beginning or end of a line, C-S-home and C-S-end the
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 ;; beginning or end of a buffer (these are also on M-C-S-up and
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146 ;; M-C-S-down for those of us stuck with DEC keyboards).
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147 ;;
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148 ;; C-S-f7 (vcursor-goto) will take you to the vcursor position
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 ;; (swapping windows if it seems sensible) and (unless you give it a
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150 ;; prefix argument) delete the virtual cursor, so this is useful for
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151 ;; you to take over editing at the virtual cursor position. It is not
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152 ;; an error if the virtual cursor is not active; it simply leaves you
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153 ;; at point, because that is where the virtual cursor would start
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 ;; from.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155 ;;
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156 ;; In a similar vein, M-C-S-tab (hope your left hand's flexible;
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157 ;; C-S-select on DEC keyboards) (vcursor-swap-point) will take you to
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158 ;; the virtual cursor position but simultaneously put the virtual
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
159 ;; cursor at the old cursor position. It is also supposed to ensure
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160 ;; that both are visible.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161 ;;
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162 ;; C-S-f8 (C-S-find on DEC keyboards) (vcursor-isearch-forward)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163 ;; allows you to do an isearch in another window. It works a bit like
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164 ;; vcursor-scroll-*; it moves into another window, calls isearch
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165 ;; there, and sets the virtual cursor position to the point found. In
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 ;; other words, it works just like isearch but with the virtual cursor
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167 ;; instead of the real one (that's why it's called a "virtual
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168 ;; cursor"). While you are isearching, you are editing in the virtual
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169 ;; cursor window, but when you have finished you return to where you
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170 ;; started. Note that once you are in isearch all the keys are normal
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171 ;; --- use C-s, not C-S-f8, to search for the next occurrence.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 ;;
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173 ;; If you set the variable vcursor-auto-disable, then any command
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
174 ;; which does not involve moving or copying from the virtual cursor
22650
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
175 ;; causes the virtual cursor to be disabled. If you set it to non-nil
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
176 ;; but not t, then the vcursor itself will remain active, but copying
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
177 ;; will be turned off, so that the next time the vcursor is moved no
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
178 ;; text is copied over. Experience shows that this setting is
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
179 ;; particularly useful. If you don't intend to use this, you can
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
180 ;; comment out the `add-hook' line at the bottom of this file. (This
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
181 ;; feature partially emulates the way the "copy" key on the BBC micro
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
182 ;; worked; actually, the copy cursor was homed when you hit return.
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
183 ;; This was in keeping with the line-by-line way of entering BASIC,
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
184 ;; but is less appropriate here.)
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
185 ;;
21061
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
186 ;; vcursor-compare-windows is now a reliable adaption of
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
187 ;; compare-windows, which compares between point in the current buffer
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
188 ;; and the vcursor location in the other one. It is an error if
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
189 ;; vcursor is not set, however it will be brought up in another window
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
190 ;; if it is not currently visible. The prefix argument acts just like
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
191 ;; compare-windows, ignoring whitespace if set. (In versions before
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
192 ;; 1.6, this simply called compare-windows, which was much less likely
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
193 ;; to pick the two windows you wanted.)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
194 ;;
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
195 ;; There is a way of moving the virtual cursor using ordinary
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
196 ;; commands: C-S-f9 (vcursor-execute-key) reads a key string,
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197 ;; moves to the virtual cursor position, executes the command bound to
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
198 ;; the string, then returns to the original point. Thus C-S-f9 M-m
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199 ;; moves the virtual cursor back to the first non-whitespace character
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
200 ;; on its line. As the command is called interactively all the usual
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
201 ;; ways of passing information to the command called, such as by a
21061
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
202 ;; prefix argument, are available. This has many uses not necessarily
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
203 ;; related to moving the vcursor itself; it can do essentially
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
204 ;; everything that the \C-x 4 series of commands can do and a lot
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
205 ;; more. Note, however, that a new window is not used if the vcursor
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
206 ;; is visible in the current one: this can lead to some strange effects,
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
207 ;; but it is preferable to making a new window every time the vcursor
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
208 ;; is moved in this may.
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
209 ;;
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
210 ;; C-S-f10 (C-S-x) (vcursor-execute-command) behaves the same way but
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
211 ;; you enter the name of the command. To do anything really
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212 ;; complicated, you are better off using M-C-S-tab
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213 ;; (vcursor-swap-point), doing whatever it is, then calling M-C-S-tab
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
214 ;; again.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
215 ;;
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216 ;; If you want to add your own moving or copying functions you should
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
217 ;; be able to do this fairly easily with (vcursor-relative-move) and
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
218 ;; (vcursor-copy) together with (vcursor-get-char-count). If you want to
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219 ;; do something in a different window, use (vcursor-window-funcall).
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220 ;;
21061
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
221 ;; Key bindings
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
222 ;; ============
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
223 ;;
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224 ;; There is an alternative set of key bindings which will be used
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 ;; automatically for a PC if Oemacs is detected. This set uses separate
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 ;; control, shift and meta keys with function keys 1 to 10. In
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 ;; particular, movement keys are concentrated on f5 to f8 with (in
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228 ;; increasing order of distance travelled) C-, M- and S- as prefixes.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229 ;; See the actual bindings below (search for C-f1). This is because the
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 ;; C-S- prefix is represented by weird key sequences and the set is
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 ;; incomplete; if you don't mind that, some hints are given in comments
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232 ;; below.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233 ;;
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234 ;; You can specify the usual or the Oemacs bindings by setting the
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 ;; variable vcursor-key-bindings to `xterm' or `oemacs'. You can also set
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 ;; it to nil, in which case vcursor will not make any key bindings
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237 ;; and you can define your own. The default is t, which makes vcursor
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238 ;; guess (it will use xterm unless it thinks Oemacs is running). The
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239 ;; oemacs set will work on an X terminal with function keys, but the
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240 ;; xterm set will not work under Oemacs.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241 ;;
21061
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
242 ;; Usage on dumb terminals
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
243 ;; =======================
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
244 ;;
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
245 ;; If Emacs has set the variable window-system to nil, vcursor will
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
246 ;; assume that overlays cannot be displayed in a different face,
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
247 ;; and will instead use an string (the variable vcursor-string, by
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
248 ;; default "**>") to show its position. This was first implemented
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
249 ;; in Emacs 19.29. Unlike the old-fashioned overlay arrow (as used
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
250 ;; by debuggers), this appears between existing text, which can
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
251 ;; make it hard to read if you're not used to it. (This seemed the
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
252 ;; better option here.) This means moving the vcursor up and down is
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
253 ;; a very efficient way of locating it!
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
254 ;;
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
255 ;; Everything else should function as expected, but there is no way to
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
256 ;; get an easy key binding for the vcursor keys on a generic terminal.
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
257 ;; Consequently a special keymap is defined for you to use traditional
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
258 ;; methods: the keymap, however, is available on any terminal type.
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
259 ;;
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
260 ;; The vcursor keymap
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
261 ;; ==================
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
262 ;;
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
263 ;; In addition to any other bindings, vcursor-map contains key definitions
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
264 ;; for handling the vcursor. You should assign this to a prefix key
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
265 ;; in the usual way, e.g.
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
266 ;; (global-set-key [f14] vcursor-map)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
267 ;; and also as usual \C-h in this map will list the key definitions, which
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
268 ;; are designed to be easy to remember.
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
269 ;;
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
270 ;; A special feature is provided by (vcursor-toggle-vcursor-map), bound
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
271 ;; to t in that keymap. With this in effect, the main keymap
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
272 ;; is overridden by the vcursor map, so keys like \C-p and so on
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
273 ;; move the vcursor instead. Remember how to turn it off (type t),
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
274 ;; or you are in serious trouble! Note that the cursor keys are not
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
275 ;; bound by default in this keymap and will continue to move the
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
276 ;; ordinary cursor.
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
277 ;;
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
278 ;; Interpreted input
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
279 ;; =================
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
280 ;;
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
281 ;; Just occasionally, you may want to pretend the strings copied from
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
282 ;; the vcursor position are to be interpreted as if you had typed them
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
283 ;; from the keyboard. Normally, they will just insert themselves anyway,
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
284 ;; but in some modes (Info and calc for example) typing ordinary characters
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
285 ;; does something else. To get this effect, set
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
286 ;; vcursor-interpret-input to t. This is normally not a good idea as
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
287 ;; interpreting input is very much slower than copying text.
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
288 ;;
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
289 ;; Un-features
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
290 ;; ===========
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
291 ;;
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
292 ;; - The vcursor will not move to point-max, since otherwise it would
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
293 ;; disappear. However, no error is flagged as point-max is a valid
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
294 ;; point in the buffer. Thus cursor right or down at the second
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
295 ;; last point in the file does not flag an error, which is inconsistent,
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
296 ;; and if copying is on the last character (typically newline) will
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
297 ;; be repeatedly copied. (I've tried making it flag an error
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
298 ;; instead and that's worse since often the vcursor is sent to
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
299 ;; point in some other window, which may be point-max.)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
300 ;; - The vcursor widens when over a tab character or right at the
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
301 ;; end of the line. You're welcome to consider this a feature;
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
302 ;; it's just a part of how overlays work.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
303 ;; - The vcursor obscures the real cursor. Creative use of overlays
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
304 ;; could cure this.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
305 ;; - The vcursor does not remember its own previous positions. If
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
306 ;; you cycle it back into a window it was in before, it will be at
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
307 ;; point in that window. Often, that is where a previous recenter
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
308 ;; left point, not where the vcursor was before.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
309 ;; (Note, however, that the vcursor does remember where it *is*,
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
310 ;; even if it's off-screen. This can also lead to surprises, but I
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
311 ;; don't think it's a bug.)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
312 ;; - vcursor-window-funcall could perhaps be smarter about restoring
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
313 ;; the previous window state on failure.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
314 ;; - The logic in vcursor-find-window is rather complicated and
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
315 ;; therefore bug-prone, though in practice it seems to work OK.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
316 ;;
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
317 ;; Possible enhnacements:
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
318 ;; It would be easy to implement vcursor-push (save vcursor position
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
319 ;; as mark and deactivate) and vcursor-pop (deactivate vcursor and
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
320 ;; move to last pushed position) functions.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
321
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
322 ;;; Code:
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
323
21088
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21061
diff changeset
324 (defgroup vcursor nil
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21061
diff changeset
325 "Manipulate an alternative (\"virtual\") cursor."
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21061
diff changeset
326 :prefix "vcursor-"
22901
12fca8181eca (vcursor group): Move this to `editing' group.
Richard M. Stallman <rms@gnu.org>
parents: 22650
diff changeset
327 :group 'editing)
21088
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21061
diff changeset
328
22650
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
329 (defface vcursor
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
330 '((((class color)) (:foreground "blue" :background "cyan" :underline t))
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
331 (t (:inverse-video t :underline t)))
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
332 "Face for the virtual cursor."
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
333 :group 'vcursor)
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
334
21088
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21061
diff changeset
335 (defcustom vcursor-auto-disable nil
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
336 "*If non-nil, disable the virtual cursor after use.
22650
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
337 Any non-vcursor command will force `vcursor-disable' to be called.
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
338 If non-nil but not t, just make sure copying is toggled off, but don't
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
339 disable the vcursor."
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
340 :type '(choice (const t) (const nil) (const copy))
21088
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21061
diff changeset
341 :group 'vcursor)
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
342
22650
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
343 ;; Needed for defcustom, must be up here
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
344 (if (not (string-match "XEmacs" emacs-version))
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
345 (defun vcursor-cs-binding (base &optional meta)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
346 (read (concat "[" (if meta "M-" "") "C-S-" base "]")))
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
347 (require 'overlay)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
348 (defun vcursor-cs-binding (base &optional meta)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
349 (read (concat "[(" (if meta "meta " "") "control shift "
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
350 base ")]")))
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
351 )
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
352
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
353 (defun vcursor-bind-keys (var value)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
354 "Alter the value of the variable VAR to VALUE, binding keys as required.
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
355 VAR is usually vcursor-key-bindings. Normally this function is called
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
356 on loading vcursor and from the customize package."
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
357 (set var value)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
358 (cond
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
359 ((not value));; don't set any key bindings
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
360 ((or (eq value 'oemacs)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
361 (and (eq value t) (fboundp 'oemacs-version)))
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
362 (global-set-key [C-f1] 'vcursor-toggle-copy)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
363 (global-set-key [C-f2] 'vcursor-copy)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
364 (global-set-key [C-f3] 'vcursor-copy-word)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
365 (global-set-key [C-f4] 'vcursor-copy-line)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
366
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
367 (global-set-key [S-f1] 'vcursor-disable)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
368 (global-set-key [S-f2] 'vcursor-other-window)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
369 (global-set-key [S-f3] 'vcursor-goto)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
370 (global-set-key [S-f4] 'vcursor-swap-point)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
371
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
372 (global-set-key [C-f5] 'vcursor-backward-char)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
373 (global-set-key [C-f6] 'vcursor-previous-line)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
374 (global-set-key [C-f7] 'vcursor-next-line)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
375 (global-set-key [C-f8] 'vcursor-forward-char)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
376
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
377 (global-set-key [M-f5] 'vcursor-beginning-of-line)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
378 (global-set-key [M-f6] 'vcursor-backward-word)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
379 (global-set-key [M-f6] 'vcursor-forward-word)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
380 (global-set-key [M-f8] 'vcursor-end-of-line)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
381
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
382 (global-set-key [S-f5] 'vcursor-beginning-of-buffer)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
383 (global-set-key [S-f6] 'vcursor-scroll-down)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
384 (global-set-key [S-f7] 'vcursor-scroll-up)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
385 (global-set-key [S-f8] 'vcursor-end-of-buffer)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
386
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
387 (global-set-key [C-f9] 'vcursor-isearch-forward)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
388
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
389 (global-set-key [S-f9] 'vcursor-execute-key)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
390 (global-set-key [S-f10] 'vcursor-execute-command)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
391
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
392 ;;; Partial dictionary of Oemacs key sequences for you to roll your own,
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
393 ;;; e.g C-S-up: (global-set-key "\M-[\C-f\M-\C-m" 'vcursor-previous-line)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
394 ;;; Sequence: Sends:
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
395 ;;; "\M-[\C-f\M-\C-m" C-S-up
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
396 ;;; "\M-[\C-f\M-\C-q" C-S-down
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
397 ;;; "\M-[\C-fs" C-S-left
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
398 ;;; "\M-[\C-ft" C-S-right
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
399 ;;;
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
400 ;;; "\M-[\C-fw" C-S-home
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
401 ;;; "\M-[\C-b\C-o" S-tab
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
402 ;;; "\M-[\C-f\M-\C-r" C-S-insert
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
403 ;;; "\M-[\C-fu" C-S-end
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
404 ;;; "\M-[\C-f\M-\C-s" C-S-delete
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
405 ;;; "\M-[\C-f\M-\C-d" C-S-prior
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
406 ;;; "\M-[\C-fv" C-S-next
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
407 ;;;
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
408 ;;; "\M-[\C-f^" C-S-f1
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
409 ;;; "\M-[\C-f_" C-S-f2
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
410 ;;; "\M-[\C-f`" C-S-f3
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
411 ;;; "\M-[\C-fa" C-S-f4
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
412 ;;; "\M-[\C-fb" C-S-f5
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
413 ;;; "\M-[\C-fc" C-S-f6
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
414 ;;; "\M-[\C-fd" C-S-f7
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
415 ;;; "\M-[\C-fe" C-S-f8
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
416 ;;; "\M-[\C-ff" C-S-f9
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
417 ;;; "\M-[\C-fg" C-S-f10
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
418 )
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
419 (t
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
420 (global-set-key (vcursor-cs-binding "up") 'vcursor-previous-line)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
421 (global-set-key (vcursor-cs-binding "down") 'vcursor-next-line)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
422 (global-set-key (vcursor-cs-binding "left") 'vcursor-backward-char)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
423 (global-set-key (vcursor-cs-binding "right") 'vcursor-forward-char)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
424
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
425 (global-set-key (vcursor-cs-binding "return") 'vcursor-disable)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
426 (global-set-key (vcursor-cs-binding "insert") 'vcursor-copy)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
427 (global-set-key (vcursor-cs-binding "delete") 'vcursor-copy-word)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
428 (global-set-key (vcursor-cs-binding "remove") 'vcursor-copy-word)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
429 (global-set-key (vcursor-cs-binding "tab") 'vcursor-toggle-copy)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
430 (global-set-key (vcursor-cs-binding "backtab") 'vcursor-toggle-copy)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
431 (global-set-key (vcursor-cs-binding "home") 'vcursor-beginning-of-buffer)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
432 (global-set-key (vcursor-cs-binding "up" t) 'vcursor-beginning-of-buffer)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
433 (global-set-key (vcursor-cs-binding "end") 'vcursor-end-of-buffer)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
434 (global-set-key (vcursor-cs-binding "down" t) 'vcursor-end-of-buffer)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
435 (global-set-key (vcursor-cs-binding "prior") 'vcursor-scroll-down)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
436 (global-set-key (vcursor-cs-binding "next") 'vcursor-scroll-up)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
437
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
438 (global-set-key (vcursor-cs-binding "f6") 'vcursor-other-window)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
439 (global-set-key (vcursor-cs-binding "f7") 'vcursor-goto)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
440
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
441 (global-set-key (vcursor-cs-binding "select")
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
442 'vcursor-swap-point) ; DEC keyboards
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
443 (global-set-key (vcursor-cs-binding "tab" t) 'vcursor-swap-point)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
444
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
445 (global-set-key (vcursor-cs-binding "find")
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
446 'vcursor-isearch-forward) ; DEC keyboards
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
447 (global-set-key (vcursor-cs-binding "f8") 'vcursor-isearch-forward)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
448
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
449 (global-set-key (vcursor-cs-binding "left" t) 'vcursor-beginning-of-line)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
450 (global-set-key (vcursor-cs-binding "right" t) 'vcursor-end-of-line)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
451
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
452 (global-set-key (vcursor-cs-binding "prior" t) 'vcursor-backward-word)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
453 (global-set-key (vcursor-cs-binding "next" t) 'vcursor-forward-word)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
454
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
455 (global-set-key (vcursor-cs-binding "return" t) 'vcursor-copy-line)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
456
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
457 (global-set-key (vcursor-cs-binding "f9") 'vcursor-execute-key)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
458 (global-set-key (vcursor-cs-binding "f10") 'vcursor-execute-command)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
459 )))
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
460
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
461 (defcustom vcursor-key-bindings nil
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
462 "*How to bind keys when vcursor is loaded.
22650
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
463 If t, guess; if xterm, use bindings suitable for an X terminal; if
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
464 oemacs, use bindings which work on a PC with Oemacs. If nil, don't
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
465 define any key bindings.
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
466
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
467 Default is nil."
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
468 :type '(choice (const t) (const nil) (const xterm) (const oemacs))
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
469 :group 'vcursor
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
470 :set 'vcursor-bind-keys
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
471 :version "20.3")
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
472
21088
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21061
diff changeset
473 (defcustom vcursor-interpret-input nil
21061
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
474 "*If non-nil, input from the vcursor is treated as interactive input.
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
475 This will cause text insertion to be much slower. Note that no special
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
476 interpretation of strings is done: \"\C-x\" is a string of four
21088
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21061
diff changeset
477 characters. The default is simply to copy strings."
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21061
diff changeset
478 :type 'boolean
21669
9861518505cb *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 21088
diff changeset
479 :group 'vcursor
9861518505cb *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 21088
diff changeset
480 :version "20.3")
21061
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
481
21088
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21061
diff changeset
482 (defcustom vcursor-string "**>"
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21061
diff changeset
483 "String used to show the vcursor position on dumb terminals."
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21061
diff changeset
484 :type 'string
21669
9861518505cb *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 21088
diff changeset
485 :group 'vcursor
9861518505cb *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 21088
diff changeset
486 :version "20.3")
21061
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
487
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
488 (defvar vcursor-overlay nil
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
489 "Overlay for the virtual cursor.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
490 It is nil if that is not enabled.")
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
491
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
492 (defvar vcursor-window nil
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
493 "Last window to have displayed the virtual cursor.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
494 See the function `vcursor-find-window' for how this is used.")
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
495
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
496 (defvar vcursor-last-command nil
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
497 "Non-nil if last command was a vcursor command.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
498 The commands `vcursor-copy', `vcursor-relative-move' and the ones for
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
499 scrolling set this. It is used by the `vcursor-auto-disable' code.")
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
500 ;; could do some memq-ing with last-command instead, but this will
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
501 ;; automatically handle any new commands using the primitives.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
502
21088
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21061
diff changeset
503 (defcustom vcursor-copy-flag nil
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21061
diff changeset
504 "*Non-nil means moving vcursor should copy characters moved over to point."
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21061
diff changeset
505 :type 'boolean
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21061
diff changeset
506 :group 'vcursor)
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
507
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
508 (defvar vcursor-temp-goal-column nil
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
509 "Keeps track of temporary goal columns for the virtual cursor.")
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
510
21061
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
511 (defvar vcursor-use-vcursor-map nil
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
512 "Non-nil if the vcursor map is mapped directly onto the main keymap.
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
513 See vcursor-toggle-vcursor-map.")
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
514 (make-variable-buffer-local 'vcursor-use-vcursor-map)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
515
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
516 (defvar vcursor-map nil "Keymap for vcursor command.")
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
517 (define-prefix-command 'vcursor-map)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
518
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
519 (define-key vcursor-map "t" 'vcursor-toggle-vcursor-map)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
520
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
521 (define-key vcursor-map "\C-p" 'vcursor-previous-line)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
522 (define-key vcursor-map "\C-n" 'vcursor-next-line)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
523 (define-key vcursor-map "\C-b" 'vcursor-backward-char)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
524 (define-key vcursor-map "\C-f" 'vcursor-forward-char)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
525
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
526 (define-key vcursor-map "\r" 'vcursor-disable)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
527 (define-key vcursor-map " " 'vcursor-copy)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
528 (define-key vcursor-map "\C-y" 'vcursor-copy-word)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
529 (define-key vcursor-map "\C-i" 'vcursor-toggle-copy)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
530 (define-key vcursor-map "<" 'vcursor-beginning-of-buffer)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
531 (define-key vcursor-map ">" 'vcursor-end-of-buffer)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
532 (define-key vcursor-map "\M-v" 'vcursor-scroll-down)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
533 (define-key vcursor-map "\C-v" 'vcursor-scroll-up)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
534 (define-key vcursor-map "o" 'vcursor-other-window)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
535 (define-key vcursor-map "g" 'vcursor-goto)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
536 (define-key vcursor-map "x" 'vcursor-swap-point)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
537 (define-key vcursor-map "\C-s" 'vcursor-isearch-forward)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
538 (define-key vcursor-map "\C-r" 'vcursor-isearch-backward)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
539 (define-key vcursor-map "\C-a" 'vcursor-beginning-of-line)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
540 (define-key vcursor-map "\C-e" 'vcursor-end-of-line)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
541 (define-key vcursor-map "\M-w" 'vcursor-forward-word)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
542 (define-key vcursor-map "\M-b" 'vcursor-backward-word)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
543 (define-key vcursor-map "\M-l" 'vcursor-copy-line)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
544 (define-key vcursor-map "c" 'vcursor-compare-windows)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
545 (define-key vcursor-map "k" 'vcursor-execute-key)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
546 (define-key vcursor-map "\M-x" 'vcursor-execute-command)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
547
22650
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
548 ;; If vcursor-key-bindings is already set on loading, bind the keys now.
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
549 ;; This hybrid way of doing it retains compatibility while allowing
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
550 ;; customize to work smoothly.
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
551 (if vcursor-key-bindings
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
552 (vcursor-bind-keys 'vcursor-key-bindings vcursor-key-bindings))
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
553
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
554 (defun vcursor-locate ()
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
555 "Go to the starting point of the virtual cursor.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
556 If that's disabled, don't go anywhere but don't complain."
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
557 ;; This is where we go off-mass-shell. Assume there is a
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
558 ;; save-excursion to get us back to the pole, er, point.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
559
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
560 (and (overlayp vcursor-overlay)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
561 (overlay-buffer vcursor-overlay)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
562 (set-buffer (overlay-buffer vcursor-overlay))
22650
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
563 (overlay-start vcursor-overlay) ; needed for XEmacs
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
564 (goto-char (overlay-start vcursor-overlay)))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
565 )
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
566
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
567 (defun vcursor-find-window (&optional not-this new-win this-frame)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
568 "Return a suitable window for displaying the virtual cursor.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
569 This is the first window in cyclic order where the vcursor is visible.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
570
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
571 With optional NOT-THIS non-nil never return the current window.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
572
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
573 With NEW-WIN non-nil, display the virtual cursor buffer in another
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
574 window if the virtual cursor is not currently visible \(note, however,
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
575 that this function never changes window-point\).
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
576
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
577 With THIS-FRAME non-nil, don't search other frames for a new window
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
578 \(though if the vcursor is already off-frame then its current window is
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
579 always considered, and the value of `pop-up-frames' is always respected\).
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
580
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
581 Returns nil if the virtual cursor is not visible anywhere suitable.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
582 Set `vcursor-window' to the returned value as a side effect."
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
583
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
584 ;; The order of priorities (respecting NOT-THIS) is (1)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
585 ;; vcursor-window if the virtual cursor is visible there (2) any
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
586 ;; window displaying the virtual cursor (3) vcursor-window provided
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
587 ;; it is still displaying the buffer containing the virtual cursor and
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
588 ;; is not selected (4) any unselected window displaying the vcursor
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
589 ;; buffer (5) with NEW-WIN, a window selected by display-buffer (so
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
590 ;; the variables pop-up-windows and pop-up-frames are significant)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
591 ;; (6) nil.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
592
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
593 (let ((thiswin (selected-window)) winok winbuf)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
594 (save-excursion
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
595 (vcursor-locate)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
596 (or (and (window-live-p vcursor-window)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
597 (eq (current-buffer) (window-buffer vcursor-window))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
598 (not (and not-this (eq thiswin vcursor-window))))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
599 (setq vcursor-window nil))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
600 (or (and vcursor-window ; choice 1
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
601 (pos-visible-in-window-p (point) vcursor-window))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
602 (progn
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
603 (walk-windows
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
604 (function
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
605 (lambda (win)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
606 (and (not winok)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
607 (eq (current-buffer) (window-buffer win))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
608 (not (and not-this (eq thiswin win)))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
609 (cond
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
610 ((pos-visible-in-window-p (point) win) (setq winok win))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
611 ((eq thiswin win))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
612 ((not winbuf) (setq winbuf win))))))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
613 nil (not this-frame))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
614 (setq vcursor-window
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
615 (cond
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
616 (winok) ; choice 2
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
617 ((and vcursor-window ; choice 3
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
618 (not (eq thiswin vcursor-window))) vcursor-window)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
619 (winbuf) ; choice 4
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
620 (new-win (display-buffer (current-buffer) t)) ; choice 5
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
621 (t nil))))))) ; default (choice 6)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
622 vcursor-window
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
623 )
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
624
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
625 (defun vcursor-toggle-copy (&optional arg nomsg)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
626 "Toggle copying to point when the vcursor is moved.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
627 With a prefix ARG, turn on if non-negative, off if negative.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
628 Display a message unless optional NOMSG is non-nil."
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
629 (interactive "P")
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
630 (setq vcursor-copy-flag
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
631 (cond ((not arg) (not vcursor-copy-flag))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
632 ((< (prefix-numeric-value arg) 0) nil)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
633 (t))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
634 vcursor-last-command t)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
635 (or nomsg (message "Copying from the vcursor is now %s."
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
636 (if vcursor-copy-flag "on" "off")))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
637 )
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
638
21061
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
639 (defun vcursor-move (pt &optional leave-b leave-w)
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
640 "Move the virtual cursor to the character to the right of PT.
21061
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
641 PT is an absolute location in the current buffer. With optional
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
642 LEAVE-B, PT is in the same buffer the vcursor is currently in.
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
643
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
644 If the new virtual cursor location would not be visible, display it in
21061
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
645 another window. With LEAVE-W, use the current `vcursor-window'."
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
646 ;; this works even if we're on-mass-shell, but usually we won't be.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
647
21061
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
648 (save-excursion
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
649 (and leave-b (vcursor-check t)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
650 (set-buffer (overlay-buffer vcursor-overlay)))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
651 (if (eq pt (point-max))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
652 (setq pt (1- pt)))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
653 (if (vcursor-check t)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
654 (move-overlay vcursor-overlay pt (+ pt 1) (current-buffer))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
655 (setq vcursor-overlay (make-overlay pt (+ pt 1)))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
656 (or window-system
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
657 (overlay-put vcursor-overlay 'before-string vcursor-string))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
658 (overlay-put vcursor-overlay 'face 'vcursor))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
659 (or leave-w (vcursor-find-window nil t))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
660 ;; vcursor-window now contains the right buffer
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
661 (or (pos-visible-in-window-p pt vcursor-window)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
662 (set-window-point vcursor-window pt)))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
663 )
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
664
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
665 (defun vcursor-insert (text)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
666 "Insert TEXT, respecting `vcursor-interpret-input'."
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
667 (if vcursor-interpret-input
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
668 (setq unread-command-events
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
669 (append (listify-key-sequence text) unread-command-events))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
670 (insert text))
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
671 )
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
672
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
673 (defun vcursor-relative-move (fn &rest args)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
674 "Use FUNCTION with arbitrary ARG1 ... to move the virtual cursor.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
675
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
676 This is called by most of the virtual-cursor motion commands."
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
677 (let (text opoint)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
678 (save-excursion
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
679 (vcursor-locate)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
680 (setq opoint (point))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
681 (apply fn args)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
682 (and (eq opoint (point-max)) (eq opoint (point))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
683 (signal 'end-of-buffer nil))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
684 (vcursor-move (point))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
685 (if vcursor-copy-flag (setq text (buffer-substring opoint (point)))))
21061
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
686 (if text (vcursor-insert text)))
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
687 (setq vcursor-last-command t)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
688 )
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
689
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
690 (defun vcursor-goto (&optional arg)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
691 "Move the real cursor to the virtual cursor position.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
692 If the virtual cursor is (or was recently) visible in another window,
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
693 switch to that first. Without a prefix ARG, disable the virtual
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
694 cursor as well."
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
695
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
696 (interactive "P")
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
697 (and (vcursor-find-window) (select-window vcursor-window))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
698 (let ((buf (and vcursor-overlay (overlay-buffer vcursor-overlay))))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
699 (and buf (not (eq (current-buffer) buf)) (switch-to-buffer buf)))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
700 (vcursor-locate)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
701 (or arg (vcursor-disable))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
702 )
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
703
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
704 (defun vcursor-swap-point ()
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
705 "Swap the location of point and that of the virtual cursor.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
706
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
707 The virtual cursor window becomes the selected window and the old
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
708 window becomes the virtual cursor window. If the virtual cursor would
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
709 not be visible otherwise, display it in another window."
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
710
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
711 (interactive)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
712 (let ((buf (current-buffer)) (here (point)) (win (selected-window)))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
713 (vcursor-goto) ; will disable the vcursor
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
714 (save-excursion
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
715 (set-buffer buf)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
716 (setq vcursor-window win)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
717 (vcursor-move here)))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
718 )
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
719
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
720 (defun vcursor-scroll-up (&optional n)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
721 "Scroll up the vcursor window ARG lines or near full screen if none.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
722 The vcursor will always appear in an unselected window."
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
723
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
724 (interactive "P")
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
725 (vcursor-window-funcall 'scroll-up n)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
726 )
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
727
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
728 (defun vcursor-scroll-down (&optional n)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
729 "Scroll down the vcursor window ARG lines or near-full screen if none.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
730 The vcursor will always appear in an unselected window."
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
731
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
732 (interactive "P")
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
733 (vcursor-window-funcall 'scroll-down n)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
734 )
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
735
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
736 (defun vcursor-isearch-forward (&optional rep norecurs)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
737 "Perform forward incremental search in the virtual cursor window.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
738 The virtual cursor is moved to the resulting point; the ordinary
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
739 cursor stays where it was."
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
740
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
741 (interactive "P")
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
742 (vcursor-window-funcall 'isearch-forward rep norecurs)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
743 )
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
744
21061
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
745 (defun vcursor-isearch-backward (&optional rep norecurs)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
746 "Perform backward incremental search in the virtual cursor window.
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
747 The virtual cursor is moved to the resulting point; the ordinary
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
748 cursor stays where it was."
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
749
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
750 (interactive "P")
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
751 (vcursor-window-funcall 'isearch-backward rep norecurs)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
752 )
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
753
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
754 (defun vcursor-window-funcall (func &rest args)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
755 "Call FUNC with ARGS ... in a virtual cursor window.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
756 A window other than the currently-selected one will always be used.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
757 The virtual cursor is moved to the value of point when the function
21061
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
758 returns.
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
759
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
760 If FUNC is a list, call the car of the list interactively, ignoring
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
761 ARGS. In this case, a new window will not be created if the vcursor
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
762 is visible in the current one."
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
763 ;; that's to avoid messing up compatibility with old versions
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
764 ;; by introducing a new argument, which would have to come before ARGS.
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
765
21061
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
766 (vcursor-find-window (not (and (listp func) (vcursor-check t))) t)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
767 (save-excursion
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
768 (let ((sw (selected-window)) text)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
769 ;; We can't use save-window-excursion because that would restore
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
770 ;; the original display in the window we may want to alter.
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
771 (unwind-protect
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
772 (let ((here (point)))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
773 (select-window vcursor-window)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
774 (vcursor-locate)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
775 (if (listp func)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
776 (call-interactively (car func))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
777 (apply func args))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
778 (setq vcursor-window (selected-window))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
779 (and vcursor-copy-flag
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
780 (eq (current-buffer) (overlay-buffer vcursor-overlay))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
781 (setq text (buffer-substring here (point))))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
782 ;; vcursor-window and the current buffer are definitely
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
783 ;; right, so make sure vcursor-move doesn't pick others.
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
784 (vcursor-move (point) nil t))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
785 (select-window sw))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
786 (if text (vcursor-insert text))))
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
787 (setq vcursor-last-command t)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
788 )
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
789
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
790 (defun vcursor-get-char-count (fn &rest args)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
791 "Apply FN to ARG1 ... and return the number of characters moved.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
792 Point is temporarily set to the virtual cursor position before FN is
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
793 called.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
794
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
795 This is called by most of the virtual-cursor copying commands to find
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
796 out how much to copy."
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
797
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
798 (vcursor-check)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
799 (save-excursion
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
800 (set-buffer (overlay-buffer vcursor-overlay))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
801 (let ((start (goto-char (overlay-start vcursor-overlay))))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
802 (- (progn (apply fn args) (point)) start)))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
803 )
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
804
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
805 ;; Make sure the virtual cursor is active. Unless arg is non-nil,
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
806 ;; report an error if it is not.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
807 (defun vcursor-check (&optional arg)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
808 (cond
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
809 ((and (overlayp vcursor-overlay) (overlay-start vcursor-overlay))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
810 t)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
811 (arg nil)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
812 (t (error "The virtual cursor is not active now.")))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
813 )
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
814
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
815 (defun vcursor-disable (&optional arg)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
816 "Disable the virtual cursor.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
817 Next time you use it, it will start from point.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
818
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
819 With a positive prefix ARG, the first window in cyclic order
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
820 displaying the virtual cursor (or which was recently displaying the
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
821 virutal cursor) will be deleted unless it's the selected
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
822 window.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
823
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
824 With a negative prefix argument, enable the virtual cursor: make it
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
825 active at the same point as the real cursor.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
826
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
827 Copying mode is always turned off: the next use of the vcursor will
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
828 not copy text until you turn it on again."
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
829
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
830 (interactive "P")
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
831 (if (overlayp vcursor-overlay)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
832 (progn
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
833 (delete-overlay vcursor-overlay)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
834 (setq vcursor-overlay nil)))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
835 (cond
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
836 ((not (vcursor-find-window t)))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
837 ((or (not arg) (< (prefix-numeric-value arg) 0)))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
838 ((delete-window vcursor-window)))
21061
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
839 (cond
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
840 ((and arg (< (prefix-numeric-value arg) 0))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
841 (vcursor-move (point))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
842 (setq vcursor-window (selected-window)))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
843 (vcursor-use-vcursor-map (vcursor-toggle-vcursor-map 0)))
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
844 (setq vcursor-copy-flag nil)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
845 )
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
846
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
847 (defun vcursor-other-window (n &optional all-frames)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
848 "Activate the virtual cursor in another window.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
849 This is the next window cylically after one currently showing the
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
850 virtual cursor, or else after the current selected window. If there
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
851 is no other window, the current window is split.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
852
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
853 Arguments N and optional ALL-FRAMES are the same as with other-window.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
854 ALL-FRAMES is also used to decide whether to split the window."
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
855
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
856 (interactive "p")
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
857 (if (if (fboundp 'oemacs-version)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
858 (one-window-p nil)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
859 (one-window-p nil all-frames))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
860 (display-buffer (current-buffer) t))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
861 (save-excursion
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
862 (save-window-excursion
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
863 ;; We don't use fancy vcursor-find-window trickery, since we're
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
864 ;; quite happy to have the vcursor cycle back into the current
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
865 ;; window.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
866 (let ((sw (selected-window))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
867 (win (vcursor-find-window nil nil (not all-frames))))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
868 (if win (select-window win))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
869 ;; else start from here
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
870 (other-window n all-frames)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
871 (vcursor-disable -1))))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
872 )
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
873
21061
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
874 ;; vcursor-compare-windows is copied from compare-w.el with only
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
875 ;; minor modifications; these are too bound up with the function
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
876 ;; to make it really useful to call compare-windows itself.
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
877 (defun vcursor-compare-windows (&optional ignore-whitespace)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
878 "Compare text in current window with text in window with vcursor.
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
879 Compares the text starting at point in the current window and at the
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
880 vcursor position in the other window, moving over text in each one as
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
881 far as they match.
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
882
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
883 A prefix argument, if any, means ignore changes in whitespace.
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
884 The variable `compare-windows-whitespace' controls how whitespace is skipped.
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
885 If `compare-ignore-case' is non-nil, changes in case are also ignored."
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
886 (interactive "P")
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
887 ;; (vcursor-window-funcall 'compare-windows arg)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
888 (require 'compare-w)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
889 (let* (p1 p2 maxp1 maxp2 b1 b2 w2
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
890 success size
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
891 (opoint1 (point))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
892 opoint2
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
893 (skip-whitespace (if ignore-whitespace
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
894 compare-windows-whitespace)))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
895 (setq p1 (point) b1 (current-buffer))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
896 (setq w2 (vcursor-find-window t t))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
897 (if (or (eq w2 (selected-window)) (not w2))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
898 (error "No other window with vcursor"))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
899 (save-excursion
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
900 (vcursor-locate)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
901 (setq p2 (point) b2 (current-buffer)))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
902 (setq opoint2 p2)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
903 (setq maxp1 (point-max))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
904 (save-excursion
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
905 (set-buffer b2)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
906 (setq maxp2 (point-max)))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
907
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
908 (setq success t)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
909 (while success
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
910 (setq success nil)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
911 ;; if interrupted, show how far we've gotten
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
912 (goto-char p1)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
913 (vcursor-move p2 t)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
914
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
915 ;; If both buffers have whitespace next to point,
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
916 ;; optionally skip over it.
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
917
21061
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
918 (and skip-whitespace
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
919 (save-excursion
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
920 (let (p1a p2a w1 w2 result1 result2)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
921 (setq result1
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
922 (if (stringp skip-whitespace)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
923 (compare-windows-skip-whitespace opoint1)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
924 (funcall skip-whitespace opoint1)))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
925 (setq p1a (point))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
926 (set-buffer b2)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
927 (goto-char p2)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
928 (setq result2
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
929 (if (stringp skip-whitespace)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
930 (compare-windows-skip-whitespace opoint2)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
931 (funcall skip-whitespace opoint2)))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
932 (setq p2a (point))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
933 (if (or (stringp skip-whitespace)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
934 (and result1 result2 (eq result1 result2)))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
935 (setq p1 p1a
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
936 p2 p2a)))))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
937
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
938 ;; Try advancing comparing 1000 chars at a time.
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
939 ;; When that fails, go 500 chars at a time, and so on.
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
940 (let ((size 1000)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
941 success-1
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
942 (case-fold-search compare-ignore-case))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
943 (while (> size 0)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
944 (setq success-1 t)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
945 ;; Try comparing SIZE chars at a time, repeatedly, till that fails.
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
946 (while success-1
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
947 (setq size (min size (- maxp1 p1) (- maxp2 p2)))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
948 (setq success-1
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
949 (and (> size 0)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
950 (= 0 (compare-buffer-substrings b2 p2 (+ size p2)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
951 b1 p1 (+ size p1)))))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
952 (if success-1
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
953 (setq p1 (+ p1 size) p2 (+ p2 size)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
954 success t)))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
955 ;; If SIZE chars don't match, try fewer.
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
956 (setq size (/ size 2)))))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
957
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
958 (goto-char p1)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
959 (vcursor-move p2 t)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
960 (if (= (point) opoint1)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
961 (ding)))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
962 )
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
963
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
964 (defun vcursor-next-line (arg)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
965 "Move the virtual cursor forward ARG lines."
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
966 ;; This is next-line rewritten for the vcursor. Maybe it would
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
967 ;; be easier simply to rewrite line-move.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
968 (interactive "p")
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
969 (let (temporary-goal-column opoint text)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
970 (save-excursion
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
971 (vcursor-locate)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
972 (setq temporary-goal-column
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
973 (if (or (eq last-command 'vcursor-next-line)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
974 (eq last-command 'vcursor-previous-line))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
975 (progn
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
976 (setq last-command 'next-line) ; trick line-move
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
977 vcursor-temp-goal-column)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
978 (if (and track-eol (eolp)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
979 (or (not (bolp)) (eq last-command 'end-of-line)))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
980 9999
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
981 (current-column)))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
982 opoint (point))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
983 (line-move arg)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
984 (and (eq opoint (point-max)) (eq opoint (point))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
985 (signal 'end-of-buffer nil))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
986 (if vcursor-copy-flag (setq text (buffer-substring opoint (point))))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
987 (vcursor-move (point))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
988 (setq vcursor-temp-goal-column temporary-goal-column
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
989 vcursor-last-command t))
21061
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
990 (if text (vcursor-insert text)))
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
991 )
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
992
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
993 (defun vcursor-previous-line (arg)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
994 "Move the virtual cursor back ARG lines."
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
995 (interactive "p")
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
996 (vcursor-next-line (- arg))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
997 )
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
998
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
999 (defun vcursor-forward-char (arg)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1000 "Move the virtual cursor forward ARG characters."
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1001 (interactive "p")
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1002 (vcursor-relative-move 'forward-char arg)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1003 )
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1004
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1005 (defun vcursor-backward-char (arg)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1006 "Move the virtual cursor backward ARG characters."
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1007 (interactive "p")
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1008 (vcursor-relative-move 'backward-char arg)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1009 )
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1010
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1011 (defun vcursor-forward-word (arg)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1012 "Move the virtual cursor forward ARG words."
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1013 (interactive "p")
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1014 (vcursor-relative-move 'forward-word arg)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1015 )
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1016
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1017 (defun vcursor-backward-word (arg)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1018 "Move the virtual cursor backward ARG words."
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1019 (interactive "p")
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1020 (vcursor-relative-move 'backward-word arg)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1021 )
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1022
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1023 (defun vcursor-beginning-of-line (arg)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1024 "Move the virtual cursor to beginning of its current line.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1025 ARG is as for `beginning-of-line'."
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1026 (interactive "P")
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1027 (vcursor-relative-move 'beginning-of-line
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1028 (if arg (prefix-numeric-value arg)))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1029 )
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1030
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1031 (defun vcursor-end-of-line (arg)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1032 "Move the virtual cursor to end of its current line.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1033 ARG is as for `end-of-line'."
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1034 (interactive "P")
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1035 (vcursor-relative-move 'end-of-line
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1036 (if arg (prefix-numeric-value arg)))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1037 )
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1038
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1039 (defun vcursor-beginning-of-buffer (&optional arg)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1040 "Move the virtual cursor to the beginning of its buffer.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1041 ARG is as for beginning-of-buffer."
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1042 (interactive "P")
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1043 (vcursor-relative-move
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1044 (lambda (arg)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1045 (goto-char (if arg (/ (* arg (- (point-max) (point-min))) 10)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1046 (point-min))))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1047 (if arg (prefix-numeric-value arg)))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1048 )
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1049
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1050 (defun vcursor-end-of-buffer (&optional arg)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1051 "Move the virtual cursor to the end of its buffer.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1052 ARG is as for end-of-buffer.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1053
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1054 Actually, the vcursor is moved to the second from last character or it
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1055 would be invisible."
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1056 (interactive "P")
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1057 (vcursor-relative-move
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1058 (lambda (arg)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1059 (goto-char (if arg (- (point-max)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1060 (/ (* arg (- (point-max) (point-min))) 10))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1061 (point-max))))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1062 (if arg (prefix-numeric-value arg)))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1063 )
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1064
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1065 (defun vcursor-execute-command (cmd)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1066 "Execute COMMAND for the virtual cursor.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1067 COMMAND is called interactively. Not all commands (in fact, only a
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1068 small subset) are useful."
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1069 (interactive "CCommand: ")
21061
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1070 (vcursor-window-funcall (list cmd))
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1071 )
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1072
21061
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1073 (defun vcursor-execute-key ()
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1074 "Read a key sequence and execute the bound command for the virtual cursor.
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1075 The key sequence is read at the vcursor location. The command found
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1076 is called interactively, so prefix argument etc. are usable."
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1077 (interactive)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1078 (let (cmd)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1079 (save-excursion
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1080 ;; We'd like to avoid the display changing when we locate
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1081 ;; to the vcursor position and read a key sequence.
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1082 (vcursor-find-window (not (vcursor-check t)) t)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1083 (save-window-excursion
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1084 (select-window vcursor-window)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1085 (vcursor-locate)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1086 (setq cmd (key-binding (read-key-sequence "Key sequence: ")))))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1087 (vcursor-window-funcall (list cmd)))
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1088 )
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1089
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1090 (defun vcursor-copy (arg)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1091 "Copy ARG characters from the virtual cursor position to point."
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1092 (interactive "p")
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1093 (vcursor-check)
21061
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1094 (vcursor-insert
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1095 (save-excursion
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1096 (set-buffer (overlay-buffer vcursor-overlay))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1097 (let* ((ostart (overlay-start vcursor-overlay))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1098 (end (+ ostart arg)))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1099 (prog1
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1100 (buffer-substring ostart end)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1101 (vcursor-move end)))))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1102 (setq vcursor-last-command t)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1103 )
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1104
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1105 (defun vcursor-copy-word (arg)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1106 "Copy ARG words from the virtual cursor position to point."
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1107 (interactive "p")
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1108 (vcursor-copy (vcursor-get-char-count 'forward-word arg))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1109 )
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1110
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1111 (defun vcursor-copy-line (arg)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1112 "Copy up to ARGth line after virtual cursor position.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1113 With no argument, copy to the end of the current line.
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1114
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1115 Behaviour with regard to newlines is similar (but not identical) to
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1116 `kill-line'; the main difference is that whitespace at the end of the
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1117 line is treated like ordinary characters."
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1118
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1119 (interactive "P")
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1120 (let* ((num (prefix-numeric-value arg))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1121 (count (vcursor-get-char-count 'end-of-line num)))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1122 (vcursor-copy (if (or (= count 0) arg) (1+ count) count)))
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1123 )
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1124
21061
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1125 (defun vcursor-toggle-vcursor-map (&optional force noredisp)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1126 "Toggle the state of the vcursor key map.
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1127 When on, the keys defined in it are mapped directly on top of the main
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1128 keymap, allowing you to move the vcursor with ordinary motion keys.
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1129 An indication \"!VC\" appears in the mode list. The effect is
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1130 local to the current buffer.
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1131 With prefix FORCE, turn on, or off if it is 0.
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1132 With NOREDISP, don't force redisplay.
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1133 Disabling the vcursor automatically turns this off."
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1134 (interactive "P")
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1135 (let ((new (cond ((not force) (not vcursor-use-vcursor-map))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1136 ((eq force 0) nil)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1137 (t))))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1138 (or (eq new vcursor-use-vcursor-map)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1139 (progn
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1140 (setq vcursor-use-vcursor-map new)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1141 (or (assq 'vcursor-use-vcursor-map minor-mode-map-alist)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1142 (setq minor-mode-map-alist
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1143 (cons (cons 'vcursor-use-vcursor-map vcursor-map)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1144 minor-mode-map-alist)))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1145 (or (assq 'vcursor-use-vcursor-map minor-mode-alist)
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1146 (setq minor-mode-alist
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1147 (cons (list 'vcursor-use-vcursor-map " !VC")
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1148 minor-mode-alist)))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1149 (or noredisp (redraw-display)))))
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1150 )
7813d4b7bea5 Some support for character terminals provided.
Richard M. Stallman <rms@gnu.org>
parents: 17902
diff changeset
1151
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1152 (defun vcursor-post-command ()
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1153 (and vcursor-auto-disable (not vcursor-last-command)
22650
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
1154 vcursor-overlay
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
1155 (if (eq vcursor-auto-disable t)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
1156 (vcursor-disable)
2809ce5a1a0a Use defcustom to define faces.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
1157 (vcursor-toggle-copy -1 t)))
17450
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1158 (setq vcursor-last-command nil)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1159 )
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1160
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1161 (add-hook 'post-command-hook 'vcursor-post-command)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1162
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1163 (provide 'vcursor)
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1164
bbf1df3de440 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1165 ;; vcursor.el ends here