annotate lisp/vcursor.el @ 110410:f2e111723c3a

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