annotate lisp/vcursor.el @ 76022:e892213b9815

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