annotate lisp/emulation/viper-util.el @ 33863:2e449f784ca7

(init_from_display_pos): If POS says we're already after an overlay string ending at POS, make sure to pop the iterator because it will be in front of that overlay string. When POS is ZV, we've thereby also ``processed'' overlay strings at ZV.
author Gerd Moellmann <gerd@gnu.org>
date Fri, 24 Nov 2000 19:29:05 +0000
parents f6a67d77484a
children f6386773ce30
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1 ;;; viper-util.el --- Utilities used by viper.el
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
2
18047
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
3 ;; Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
11288
d1f620273acb Add copyright.
Karl Heuer <kwzh@gnu.org>
parents: 10789
diff changeset
4
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5 ;; This file is part of GNU Emacs.
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7 ;; GNU Emacs is free software; you can redistribute it and/or modify
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8 ;; it under the terms of the GNU General Public License as published by
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9 ;; the Free Software Foundation; either version 2, or (at your option)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10 ;; any later version.
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
11
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
12 ;; GNU Emacs is distributed in the hope that it will be useful,
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
13 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
14 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
15 ;; GNU General Public License for more details.
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
16
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
17 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
18 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
19 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
20 ;; Boston, MA 02111-1307, USA.
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
21
14909
7ff1df13b124 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14588
diff changeset
22
7ff1df13b124 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14588
diff changeset
23 ;; Code
7ff1df13b124 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14588
diff changeset
24
7ff1df13b124 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14588
diff changeset
25 ;; Compiler pacifier
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
26 (defvar viper-overriding-map)
14909
7ff1df13b124 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14588
diff changeset
27 (defvar pm-color-alist)
7ff1df13b124 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14588
diff changeset
28 (defvar zmacs-region-stays)
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
29 (defvar viper-minibuffer-current-face)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
30 (defvar viper-minibuffer-insert-face)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
31 (defvar viper-minibuffer-vi-face)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
32 (defvar viper-minibuffer-emacs-face)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
33 (defvar viper-replace-overlay-face)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
34 (defvar viper-fast-keyseq-timeout)
18047
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
35 (defvar ex-unix-type-shell)
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
36 (defvar ex-unix-type-shell-options)
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
37 (defvar viper-ex-tmp-buf-name)
19462
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
38 (defvar viper-syntax-preference)
18047
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
39
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
40 (require 'cl)
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
41 (require 'ring)
14909
7ff1df13b124 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14588
diff changeset
42
18172
e145ccc61a22 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18047
diff changeset
43 (if noninteractive
e145ccc61a22 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18047
diff changeset
44 (eval-when-compile
e145ccc61a22 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18047
diff changeset
45 (let ((load-path (cons (expand-file-name ".") load-path)))
e145ccc61a22 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18047
diff changeset
46 (or (featurep 'viper-init)
e145ccc61a22 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18047
diff changeset
47 (load "viper-init.el" nil nil 'nosuffix))
e145ccc61a22 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18047
diff changeset
48 )))
18047
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
49 ;; end pacifier
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
50
18047
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
51 (require 'viper-init)
15747
a0933adcee9e (vip-ms-style-os-p, vip-vms-os-p): Moved here from viper.el.
Karl Heuer <kwzh@gnu.org>
parents: 15728
diff changeset
52
14581
4951b11970a1 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14384
diff changeset
53
19203
58c50205001d new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19079
diff changeset
54 ;; A fix for NeXT Step
58c50205001d new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19079
diff changeset
55 ;; Should go away, when NS people fix the design flaw, which leaves the
58c50205001d new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19079
diff changeset
56 ;; two x-* functions undefined.
58c50205001d new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19079
diff changeset
57 (if (and (not (fboundp 'x-display-color-p)) (fboundp 'ns-display-color-p))
58c50205001d new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19079
diff changeset
58 (fset 'x-display-color-p (symbol-function 'ns-display-color-p)))
58c50205001d new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19079
diff changeset
59 (if (and (not (fboundp 'x-color-defined-p)) (fboundp 'ns-color-defined-p))
58c50205001d new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19079
diff changeset
60 (fset 'x-color-defined-p (symbol-function 'ns-color-defined-p)))
58c50205001d new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19079
diff changeset
61
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
62
18047
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
63 ;;; XEmacs support
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
64
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
65
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
66 (if viper-xemacs-p
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
67 (progn
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
68 (fset 'viper-read-event (symbol-function 'next-command-event))
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
69 (fset 'viper-make-overlay (symbol-function 'make-extent))
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
70 (fset 'viper-overlay-start (symbol-function 'extent-start-position))
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
71 (fset 'viper-overlay-end (symbol-function 'extent-end-position))
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
72 (fset 'viper-overlay-put (symbol-function 'set-extent-property))
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
73 (fset 'viper-overlay-p (symbol-function 'extentp))
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
74 (fset 'viper-overlay-get (symbol-function 'extent-property))
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
75 (fset 'viper-move-overlay (symbol-function 'set-extent-endpoints))
27899
42f9a58e0fc4 * viper-cmd.el (viper-envelop-ESC-key): added the option to
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
76 (fset 'viper-overlay-live-p (symbol-function 'extent-live-p))
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
77 (if (viper-window-display-p)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
78 (fset 'viper-iconify (symbol-function 'iconify-frame)))
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
79 (cond ((viper-has-face-support-p)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
80 (fset 'viper-get-face (symbol-function 'get-face))
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
81 (fset 'viper-color-defined-p
12139
e16c06646396 (vip-event-key): now handles keys 128--255 as meta-chars.
Karl Heuer <kwzh@gnu.org>
parents: 11288
diff changeset
82 (symbol-function 'valid-color-name-p))
e16c06646396 (vip-event-key): now handles keys 128--255 as meta-chars.
Karl Heuer <kwzh@gnu.org>
parents: 11288
diff changeset
83 )))
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
84 (fset 'viper-read-event (symbol-function 'read-event))
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
85 (fset 'viper-make-overlay (symbol-function 'make-overlay))
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
86 (fset 'viper-overlay-start (symbol-function 'overlay-start))
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
87 (fset 'viper-overlay-end (symbol-function 'overlay-end))
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
88 (fset 'viper-overlay-put (symbol-function 'overlay-put))
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
89 (fset 'viper-overlay-p (symbol-function 'overlayp))
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
90 (fset 'viper-overlay-get (symbol-function 'overlay-get))
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
91 (fset 'viper-move-overlay (symbol-function 'move-overlay))
27899
42f9a58e0fc4 * viper-cmd.el (viper-envelop-ESC-key): added the option to
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
92 (fset 'viper-overlay-live-p (symbol-function 'overlayp))
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
93 (if (viper-window-display-p)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
94 (fset 'viper-iconify (symbol-function 'iconify-or-deiconify-frame)))
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
95 (cond ((viper-has-face-support-p)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
96 (fset 'viper-get-face (symbol-function 'internal-get-face))
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
97 (fset 'viper-color-defined-p (symbol-function 'x-color-defined-p))
12139
e16c06646396 (vip-event-key): now handles keys 128--255 as meta-chars.
Karl Heuer <kwzh@gnu.org>
parents: 11288
diff changeset
98 )))
e16c06646396 (vip-event-key): now handles keys 128--255 as meta-chars.
Karl Heuer <kwzh@gnu.org>
parents: 11288
diff changeset
99
18047
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
100
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
101 (fset 'viper-characterp
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
102 (symbol-function
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
103 (if viper-xemacs-p 'characterp 'integerp)))
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
104
33842
f6a67d77484a * ediff-diff.el: Moved variables around to have it compile under NT.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 33742
diff changeset
105 ;; CHAR is supposed to be a char or an integer (positive or negative)
f6a67d77484a * ediff-diff.el: Moved variables around to have it compile under NT.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 33742
diff changeset
106 ;; LIST is a list of chars, nil, and negative numbers
f6a67d77484a * ediff-diff.el: Moved variables around to have it compile under NT.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 33742
diff changeset
107 ;; Check if CHAR is a member by trying to convert into integers, if necessary.
f6a67d77484a * ediff-diff.el: Moved variables around to have it compile under NT.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 33742
diff changeset
108 ;; Introduced for compatibility with XEmacs, where integers are not the same as
f6a67d77484a * ediff-diff.el: Moved variables around to have it compile under NT.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 33742
diff changeset
109 ;; chars.
33019
6306740f6938 2000-10-29 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 28510
diff changeset
110 (defun viper-memq-char (char list)
6306740f6938 2000-10-29 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 28510
diff changeset
111 (cond (viper-emacs-p (memq char list))
33842
f6a67d77484a * ediff-diff.el: Moved variables around to have it compile under NT.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 33742
diff changeset
112 ((and (integerp char) (>= char 0)) (memq (int-to-char char) list))
f6a67d77484a * ediff-diff.el: Moved variables around to have it compile under NT.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 33742
diff changeset
113 ((memq char list))))
33019
6306740f6938 2000-10-29 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 28510
diff changeset
114
6306740f6938 2000-10-29 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 28510
diff changeset
115 ;; Like =, but accommodates null and also is t for eq-objects
6306740f6938 2000-10-29 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 28510
diff changeset
116 (defun viper= (char char1)
6306740f6938 2000-10-29 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 28510
diff changeset
117 (cond ((eq char char1) t)
6306740f6938 2000-10-29 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 28510
diff changeset
118 ((and (viper-characterp char) (viper-characterp char1))
6306740f6938 2000-10-29 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 28510
diff changeset
119 (= char char1))
6306740f6938 2000-10-29 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 28510
diff changeset
120 (t nil)))
6306740f6938 2000-10-29 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 28510
diff changeset
121
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
122 (defsubst viper-color-display-p ()
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
123 (if viper-emacs-p
12139
e16c06646396 (vip-event-key): now handles keys 128--255 as meta-chars.
Karl Heuer <kwzh@gnu.org>
parents: 11288
diff changeset
124 (x-display-color-p)
e16c06646396 (vip-event-key): now handles keys 128--255 as meta-chars.
Karl Heuer <kwzh@gnu.org>
parents: 11288
diff changeset
125 (eq (device-class (selected-device)) 'color)))
14909
7ff1df13b124 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14588
diff changeset
126
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
127 (defsubst viper-get-cursor-color ()
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
128 (if viper-emacs-p
15578
fadc581e380e (vip-read-key): inhibit quit added.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15480
diff changeset
129 (cdr (assoc 'cursor-color (frame-parameters)))
fadc581e380e (vip-read-key): inhibit quit added.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15480
diff changeset
130 (color-instance-name (frame-property (selected-frame) 'cursor-color))))
fadc581e380e (vip-read-key): inhibit quit added.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15480
diff changeset
131
16136
de1340e6ddb4 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15747
diff changeset
132
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
133 ;; OS/2
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
134 (cond ((eq (viper-device-type) 'pm)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
135 (fset 'viper-color-defined-p
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
136 (lambda (color) (assoc color pm-color-alist)))))
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
137
14233
396316e5fbe6 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
138
396316e5fbe6 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
139 ;; cursor colors
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
140 (defun viper-change-cursor-color (new-color)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
141 (if (and (viper-window-display-p) (viper-color-display-p)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
142 (stringp new-color) (viper-color-defined-p new-color)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
143 (not (string= new-color (viper-get-cursor-color))))
33019
6306740f6938 2000-10-29 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 28510
diff changeset
144 (if viper-emacs-p
6306740f6938 2000-10-29 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 28510
diff changeset
145 (modify-frame-parameters
6306740f6938 2000-10-29 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 28510
diff changeset
146 (selected-frame) (list (cons 'cursor-color new-color)))
6306740f6938 2000-10-29 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 28510
diff changeset
147 (set-frame-property
6306740f6938 2000-10-29 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 28510
diff changeset
148 (selected-frame) 'cursor-color (make-color-instance new-color)))
6306740f6938 2000-10-29 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 28510
diff changeset
149 ))
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
150
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
151 ;; By default, saves current frame cursor color in the
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
152 ;; viper-saved-cursor-color-in-replace-mode property of viper-replace-overlay
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
153 (defun viper-save-cursor-color (before-which-mode)
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
154 (if (and (viper-window-display-p) (viper-color-display-p))
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
155 (let ((color (viper-get-cursor-color)))
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
156 (if (and (stringp color) (viper-color-defined-p color)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
157 (not (string= color viper-replace-overlay-cursor-color)))
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
158 (modify-frame-parameters
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
159 (selected-frame)
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
160 (list
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
161 (cons
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
162 (if (eq before-which-mode 'before-replace-mode)
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
163 'viper-saved-cursor-color-in-replace-mode
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
164 'viper-saved-cursor-color-in-insert-mode)
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
165 color)))
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
166 ))))
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
167
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
168
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
169 (defsubst viper-get-saved-cursor-color-in-replace-mode ()
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
170 (or
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
171 (funcall
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
172 (if viper-emacs-p 'frame-parameter 'frame-property)
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
173 (selected-frame)
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
174 'viper-saved-cursor-color-in-replace-mode)
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
175 viper-vi-state-cursor-color))
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
176
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
177 (defsubst viper-get-saved-cursor-color-in-insert-mode ()
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
178 (or
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
179 (funcall
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
180 (if viper-emacs-p 'frame-parameter 'frame-property)
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
181 (selected-frame)
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
182 'viper-saved-cursor-color-in-insert-mode)
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
183 viper-vi-state-cursor-color))
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
184
16766
beb94a5271e2 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16329
diff changeset
185 ;; restore cursor color from replace overlay
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
186 (defun viper-restore-cursor-color(after-which-mode)
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
187 (if (viper-overlay-p viper-replace-overlay)
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
188 (viper-change-cursor-color
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
189 (if (eq after-which-mode 'after-replace-mode)
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
190 (viper-get-saved-cursor-color-in-replace-mode)
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
191 (viper-get-saved-cursor-color-in-insert-mode))
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
192 )))
18047
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
193
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
194
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
195 ;; Check the current version against the major and minor version numbers
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
196 ;; using op: cur-vers op major.minor If emacs-major-version or
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
197 ;; emacs-minor-version are not defined, we assume that the current version
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
198 ;; is hopelessly outdated. We assume that emacs-major-version and
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
199 ;; emacs-minor-version are defined. Otherwise, for Emacs/XEmacs 19, if the
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
200 ;; current minor version is < 10 (xemacs) or < 23 (emacs) the return value
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
201 ;; will be nil (when op is =, >, or >=) and t (when op is <, <=), which may be
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
202 ;; incorrect. However, this gives correct result in our cases, since we are
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
203 ;; testing for sufficiently high Emacs versions.
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
204 (defun viper-check-version (op major minor &optional type-of-emacs)
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
205 (if (and (boundp 'emacs-major-version) (boundp 'emacs-minor-version))
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
206 (and (cond ((eq type-of-emacs 'xemacs) viper-xemacs-p)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
207 ((eq type-of-emacs 'emacs) viper-emacs-p)
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
208 (t t))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
209 (cond ((eq op '=) (and (= emacs-minor-version minor)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
210 (= emacs-major-version major)))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
211 ((memq op '(> >= < <=))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
212 (and (or (funcall op emacs-major-version major)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
213 (= emacs-major-version major))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
214 (if (= emacs-major-version major)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
215 (funcall op emacs-minor-version minor)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
216 t)))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
217 (t
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
218 (error "%S: Invalid op in viper-check-version" op))))
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
219 (cond ((memq op '(= > >=)) nil)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
220 ((memq op '(< <=)) t))))
12693
321b2ad48a9c (vip-add-hook,vip-remove-hook): new functions.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12212
diff changeset
221
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
222
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
223 (defun viper-get-visible-buffer-window (wind)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
224 (if viper-xemacs-p
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
225 (get-buffer-window wind t)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
226 (get-buffer-window wind 'visible)))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
227
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
228
12139
e16c06646396 (vip-event-key): now handles keys 128--255 as meta-chars.
Karl Heuer <kwzh@gnu.org>
parents: 11288
diff changeset
229 ;; Return line position.
e16c06646396 (vip-event-key): now handles keys 128--255 as meta-chars.
Karl Heuer <kwzh@gnu.org>
parents: 11288
diff changeset
230 ;; If pos is 'start then returns position of line start.
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
231 ;; If pos is 'end, returns line end. If pos is 'mid, returns line center.
12139
e16c06646396 (vip-event-key): now handles keys 128--255 as meta-chars.
Karl Heuer <kwzh@gnu.org>
parents: 11288
diff changeset
232 ;; Pos = 'indent returns beginning of indentation.
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
233 ;; Otherwise, returns point. Current point is not moved in any case."
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
234 (defun viper-line-pos (pos)
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
235 (let ((cur-pos (point))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
236 (result))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
237 (cond
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
238 ((equal pos 'start)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
239 (beginning-of-line))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
240 ((equal pos 'end)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
241 (end-of-line))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
242 ((equal pos 'mid)
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
243 (goto-char (+ (viper-line-pos 'start) (viper-line-pos 'end) 2)))
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
244 ((equal pos 'indent)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
245 (back-to-indentation))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
246 (t nil))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
247 (setq result (point))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
248 (goto-char cur-pos)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
249 result))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
250
19462
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
251 ;; Emacs counts each multibyte character as several positions in the buffer, so
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
252 ;; we use Emacs' chars-in-region. XEmacs is counting each char as just one pos,
19462
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
253 ;; so we can simply subtract.
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
254 (defun viper-chars-in-region (beg end &optional preserve-sign)
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
255 (let ((count (abs (if (fboundp 'chars-in-region)
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
256 (chars-in-region beg end)
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
257 (- end beg)))))
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
258 (if (and (< end beg) preserve-sign)
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
259 (- count)
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
260 count)))
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
261
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
262 ;; Test if POS is between BEG and END
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
263 (defsubst viper-pos-within-region (pos beg end)
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
264 (and (>= pos (min beg end)) (>= (max beg end) pos)))
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
265
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
266
12139
e16c06646396 (vip-event-key): now handles keys 128--255 as meta-chars.
Karl Heuer <kwzh@gnu.org>
parents: 11288
diff changeset
267 ;; Like move-marker but creates a virgin marker if arg isn't already a marker.
e16c06646396 (vip-event-key): now handles keys 128--255 as meta-chars.
Karl Heuer <kwzh@gnu.org>
parents: 11288
diff changeset
268 ;; The first argument must eval to a variable name.
e16c06646396 (vip-event-key): now handles keys 128--255 as meta-chars.
Karl Heuer <kwzh@gnu.org>
parents: 11288
diff changeset
269 ;; Arguments: (var-name position &optional buffer).
e16c06646396 (vip-event-key): now handles keys 128--255 as meta-chars.
Karl Heuer <kwzh@gnu.org>
parents: 11288
diff changeset
270 ;;
e16c06646396 (vip-event-key): now handles keys 128--255 as meta-chars.
Karl Heuer <kwzh@gnu.org>
parents: 11288
diff changeset
271 ;; This is useful for moving markers that are supposed to be local.
e16c06646396 (vip-event-key): now handles keys 128--255 as meta-chars.
Karl Heuer <kwzh@gnu.org>
parents: 11288
diff changeset
272 ;; For this, VAR-NAME should be made buffer-local with nil as a default.
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
273 ;; Then, each time this var is used in `viper-move-marker-locally' in a new
12139
e16c06646396 (vip-event-key): now handles keys 128--255 as meta-chars.
Karl Heuer <kwzh@gnu.org>
parents: 11288
diff changeset
274 ;; buffer, a new marker will be created.
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
275 (defun viper-move-marker-locally (var pos &optional buffer)
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
276 (if (markerp (eval var))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
277 ()
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
278 (set var (make-marker)))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
279 (move-marker (eval var) pos buffer))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
280
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
281
12139
e16c06646396 (vip-event-key): now handles keys 128--255 as meta-chars.
Karl Heuer <kwzh@gnu.org>
parents: 11288
diff changeset
282 ;; Print CONDITIONS as a message.
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
283 (defun viper-message-conditions (conditions)
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
284 (let ((case (car conditions)) (msg (cdr conditions)))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
285 (if (null msg)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
286 (message "%s" case)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
287 (message "%s: %s" case (mapconcat 'prin1-to-string msg " ")))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
288 (beep 1)))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
289
12139
e16c06646396 (vip-event-key): now handles keys 128--255 as meta-chars.
Karl Heuer <kwzh@gnu.org>
parents: 11288
diff changeset
290
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
291
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
292 ;;; List/alist utilities
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
293
12139
e16c06646396 (vip-event-key): now handles keys 128--255 as meta-chars.
Karl Heuer <kwzh@gnu.org>
parents: 11288
diff changeset
294 ;; Convert LIST to an alist
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
295 (defun viper-list-to-alist (lst)
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
296 (let ((alist))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
297 (while lst
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
298 (setq alist (cons (list (car lst)) alist))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
299 (setq lst (cdr lst)))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
300 alist))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
301
12139
e16c06646396 (vip-event-key): now handles keys 128--255 as meta-chars.
Karl Heuer <kwzh@gnu.org>
parents: 11288
diff changeset
302 ;; Convert ALIST to a list.
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
303 (defun viper-alist-to-list (alst)
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
304 (let ((lst))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
305 (while alst
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
306 (setq lst (cons (car (car alst)) lst))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
307 (setq alst (cdr alst)))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
308 lst))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
309
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
310 ;; Filter ALIST using REGEXP. Return alist whose elements match the regexp.
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
311 (defun viper-filter-alist (regexp alst)
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
312 (interactive "s x")
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
313 (let ((outalst) (inalst alst))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
314 (while (car inalst)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
315 (if (string-match regexp (car (car inalst)))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
316 (setq outalst (cons (car inalst) outalst)))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
317 (setq inalst (cdr inalst)))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
318 outalst))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
319
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
320 ;; Filter LIST using REGEXP. Return list whose elements match the regexp.
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
321 (defun viper-filter-list (regexp lst)
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
322 (interactive "s x")
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
323 (let ((outlst) (inlst lst))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
324 (while (car inlst)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
325 (if (string-match regexp (car inlst))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
326 (setq outlst (cons (car inlst) outlst)))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
327 (setq inlst (cdr inlst)))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
328 outlst))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
329
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
330
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
331 ;; Append LIS2 to LIS1, both alists, by side-effect and returns LIS1
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
332 ;; LIS2 is modified by filtering it: deleting its members of the form
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
333 ;; \(car elt\) such that (car elt') is in LIS1.
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
334 (defun viper-append-filter-alist (lis1 lis2)
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
335 (let ((temp lis1)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
336 elt)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
337
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
338 ;;filter-append the second list
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
339 (while temp
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
340 ;; delete all occurrences
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
341 (while (setq elt (assoc (car (car temp)) lis2))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
342 (setq lis2 (delq elt lis2)))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
343 (setq temp (cdr temp)))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
344
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
345 (nconc lis1 lis2)))
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
346
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
347
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
348 ;;; Support for :e, :r, :w file globbing
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
349
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
350 ;; Glob the file spec.
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
351 ;; This function is designed to work under Unix. It might also work under VMS.
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
352 (defun viper-glob-unix-files (filespec)
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
353 (let ((gshell
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
354 (cond (ex-unix-type-shell shell-file-name)
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
355 ((memq system-type '(vax-vms axp-vms)) "*dcl*") ; VAX VMS
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
356 (t "sh"))) ; probably Unix anyway
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
357 (gshell-options
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
358 ;; using cond in anticipation of further additions
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
359 (cond (ex-unix-type-shell-options)
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
360 ))
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
361 (command (cond (viper-ms-style-os-p (format "\"ls -1 -d %s\"" filespec))
16136
de1340e6ddb4 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15747
diff changeset
362 (t (format "ls -1 -d %s" filespec))))
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
363 status)
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
364 (save-excursion
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
365 (set-buffer (get-buffer-create viper-ex-tmp-buf-name))
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
366 (erase-buffer)
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
367 (setq status
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
368 (if gshell-options
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
369 (call-process gshell nil t nil
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
370 gshell-options
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
371 "-c"
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
372 command)
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
373 (call-process gshell nil t nil
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
374 "-c"
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
375 command)))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
376 (goto-char (point-min))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
377 ;; Issue an error, if no match.
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
378 (if (> status 0)
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
379 (save-excursion
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
380 (skip-chars-forward " \t\n\j")
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
381 (if (looking-at "ls:")
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
382 (viper-forward-Word 1))
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
383 (error "%s: %s"
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
384 (if (stringp gshell)
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
385 gshell
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
386 "shell")
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
387 (buffer-substring (point) (viper-line-pos 'end)))
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
388 ))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
389 (goto-char (point-min))
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
390 (viper-get-filenames-from-buffer 'one-per-line))
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
391 ))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
392
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
393
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
394 ;; Interpret the stuff in the buffer as a list of file names
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
395 ;; return a list of file names listed in the buffer beginning at point
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
396 ;; If optional arg is supplied, assume each filename is listed on a separate
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
397 ;; line
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
398 (defun viper-get-filenames-from-buffer (&optional one-per-line)
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
399 (let ((skip-chars (if one-per-line "\t\n" " \t\n"))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
400 result fname delim)
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
401 (skip-chars-forward skip-chars)
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
402 (while (not (eobp))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
403 (if (cond ((looking-at "\"")
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
404 (setq delim ?\")
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
405 (re-search-forward "[^\"]+" nil t)) ; noerror
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
406 ((looking-at "'")
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
407 (setq delim ?')
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
408 (re-search-forward "[^']+" nil t)) ; noerror
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
409 (t
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
410 (re-search-forward
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
411 (concat "[^" skip-chars "]+") nil t))) ;noerror
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
412 (setq fname
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
413 (buffer-substring (match-beginning 0) (match-end 0))))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
414 (if delim
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
415 (forward-char 1))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
416 (skip-chars-forward " \t\n")
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
417 (setq result (cons fname result)))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
418 result))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
419
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
420 ;; convert MS-DOS wildcards to regexp
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
421 (defun viper-wildcard-to-regexp (wcard)
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
422 (save-excursion
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
423 (set-buffer (get-buffer-create viper-ex-tmp-buf-name))
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
424 (erase-buffer)
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
425 (insert wcard)
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
426 (goto-char (point-min))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
427 (while (not (eobp))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
428 (skip-chars-forward "^*?.\\\\")
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
429 (cond ((eq (char-after (point)) ?*) (insert ".")(forward-char 1))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
430 ((eq (char-after (point)) ?.) (insert "\\")(forward-char 1))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
431 ((eq (char-after (point)) ?\\) (insert "\\")(forward-char 1))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
432 ((eq (char-after (point)) ??) (delete-char 1)(insert ".")))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
433 )
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
434 (buffer-string)
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
435 ))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
436
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
437
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
438 ;; glob windows files
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
439 ;; LIST is expected to be in reverse order
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
440 (defun viper-glob-mswindows-files (filespec)
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
441 (let ((case-fold-search t)
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
442 tmp tmp2)
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
443 (save-excursion
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
444 (set-buffer (get-buffer-create viper-ex-tmp-buf-name))
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
445 (erase-buffer)
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
446 (insert filespec)
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
447 (goto-char (point-min))
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
448 (setq tmp (viper-get-filenames-from-buffer))
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
449 (while tmp
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
450 (setq tmp2 (cons (directory-files
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
451 ;; the directory part
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
452 (or (file-name-directory (car tmp))
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
453 "")
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
454 t ; return full names
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
455 ;; the regexp part: globs the file names
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
456 (concat "^"
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
457 (viper-wildcard-to-regexp
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
458 (file-name-nondirectory (car tmp)))
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
459 "$"))
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
460 tmp2))
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
461 (setq tmp (cdr tmp)))
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
462 (reverse (apply 'append tmp2)))))
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
463
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
464
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
465 ;;; Insertion ring
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
466
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
467 ;; Rotate RING's index. DIRection can be positive or negative.
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
468 (defun viper-ring-rotate1 (ring dir)
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
469 (if (and (ring-p ring) (> (ring-length ring) 0))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
470 (progn
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
471 (setcar ring (cond ((> dir 0)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
472 (ring-plus1 (car ring) (ring-length ring)))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
473 ((< dir 0)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
474 (ring-minus1 (car ring) (ring-length ring)))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
475 ;; don't rotate if dir = 0
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
476 (t (car ring))))
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
477 (viper-current-ring-item ring)
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
478 )))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
479
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
480 (defun viper-special-ring-rotate1 (ring dir)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
481 (if (memq viper-intermediate-command
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
482 '(repeating-display-destructive-command
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
483 repeating-insertion-from-ring))
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
484 (viper-ring-rotate1 ring dir)
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
485 ;; don't rotate otherwise
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
486 (viper-ring-rotate1 ring 0)))
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
487
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
488 ;; current ring item; if N is given, then so many items back from the
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
489 ;; current
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
490 (defun viper-current-ring-item (ring &optional n)
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
491 (setq n (or n 0))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
492 (if (and (ring-p ring) (> (ring-length ring) 0))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
493 (aref (cdr (cdr ring)) (mod (- (car ring) 1 n) (ring-length ring)))))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
494
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
495 ;; Push item onto ring. The second argument is a ring-variable, not value.
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
496 (defun viper-push-onto-ring (item ring-var)
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
497 (or (ring-p (eval ring-var))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
498 (set ring-var (make-ring (eval (intern (format "%S-size" ring-var))))))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
499 (or (null item) ; don't push nil
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
500 (and (stringp item) (string= item "")) ; or empty strings
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
501 (equal item (viper-current-ring-item (eval ring-var))) ; or old stuff
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
502 ;; Since viper-set-destructive-command checks if we are inside
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
503 ;; viper-repeat, we don't check whether this-command-keys is a `.'. The
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
504 ;; cmd viper-repeat makes a call to the current function only if `.' is
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
505 ;; executing a command from the command history. It doesn't call the
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
506 ;; push-onto-ring function if `.' is simply repeating the last
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
507 ;; destructive command. We only check for ESC (which happens when we do
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
508 ;; insert with a prefix argument, or if this-command-keys doesn't give
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
509 ;; anything meaningful (in that case we don't know what to show to the
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
510 ;; user).
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
511 (and (eq ring-var 'viper-command-ring)
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
512 (string-match "\\([0-9]*\e\\|^[ \t]*$\\|escape\\)"
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
513 (viper-array-to-string (this-command-keys))))
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
514 (viper-ring-insert (eval ring-var) item))
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
515 )
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
516
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
517
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
518 ;; removing elts from ring seems to break it
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
519 (defun viper-cleanup-ring (ring)
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
520 (or (< (ring-length ring) 2)
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
521 (null (viper-current-ring-item ring))
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
522 ;; last and previous equal
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
523 (if (equal (viper-current-ring-item ring)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
524 (viper-current-ring-item ring 1))
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
525 (viper-ring-pop ring))))
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
526
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
527 ;; ring-remove seems to be buggy, so we concocted this for our purposes.
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
528 (defun viper-ring-pop (ring)
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
529 (let* ((ln (ring-length ring))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
530 (vec (cdr (cdr ring)))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
531 (veclen (length vec))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
532 (hd (car ring))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
533 (idx (max 0 (ring-minus1 hd ln)))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
534 (top-elt (aref vec idx)))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
535
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
536 ;; shift elements
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
537 (while (< (1+ idx) veclen)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
538 (aset vec idx (aref vec (1+ idx)))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
539 (setq idx (1+ idx)))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
540 (aset vec idx nil)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
541
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
542 (setq hd (max 0 (ring-minus1 hd ln)))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
543 (if (= hd (1- ln)) (setq hd 0))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
544 (setcar ring hd) ; move head
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
545 (setcar (cdr ring) (max 0 (1- ln))) ; adjust length
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
546 top-elt
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
547 ))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
548
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
549 (defun viper-ring-insert (ring item)
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
550 (let* ((ln (ring-length ring))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
551 (vec (cdr (cdr ring)))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
552 (veclen (length vec))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
553 (hd (car ring))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
554 (vecpos-after-hd (if (= hd 0) ln hd))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
555 (idx ln))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
556
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
557 (if (= ln veclen)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
558 (progn
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
559 (aset vec hd item) ; hd is always 1+ the actual head index in vec
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
560 (setcar ring (ring-plus1 hd ln)))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
561 (setcar (cdr ring) (1+ ln))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
562 (setcar ring (ring-plus1 vecpos-after-hd (1+ ln)))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
563 (while (and (>= idx vecpos-after-hd) (> ln 0))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
564 (aset vec idx (aref vec (1- idx)))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
565 (setq idx (1- idx)))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
566 (aset vec vecpos-after-hd item))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
567 item))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
568
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
569
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
570 ;;; String utilities
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
571
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
572 ;; If STRING is longer than MAX-LEN, truncate it and print ...... instead
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
573 ;; PRE-STRING is a string to prepend to the abbrev string.
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
574 ;; POST-STRING is a string to append to the abbrev string.
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
575 ;; ABBREV_SIGN is a string to be inserted before POST-STRING
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
576 ;; if the orig string was truncated.
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
577 (defun viper-abbreviate-string (string max-len
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
578 pre-string post-string abbrev-sign)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
579 (let (truncated-str)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
580 (setq truncated-str
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
581 (if (stringp string)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
582 (substring string 0 (min max-len (length string)))))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
583 (cond ((null truncated-str) "")
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
584 ((> (length string) max-len)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
585 (format "%s%s%s%s"
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
586 pre-string truncated-str abbrev-sign post-string))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
587 (t (format "%s%s%s" pre-string truncated-str post-string)))))
12204
a7bd91d4af97 (vip-over-whitespace-line): new function.
Karl Heuer <kwzh@gnu.org>
parents: 12139
diff changeset
588
a7bd91d4af97 (vip-over-whitespace-line): new function.
Karl Heuer <kwzh@gnu.org>
parents: 12139
diff changeset
589 ;; tells if we are over a whitespace-only line
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
590 (defsubst viper-over-whitespace-line ()
12204
a7bd91d4af97 (vip-over-whitespace-line): new function.
Karl Heuer <kwzh@gnu.org>
parents: 12139
diff changeset
591 (save-excursion
a7bd91d4af97 (vip-over-whitespace-line): new function.
Karl Heuer <kwzh@gnu.org>
parents: 12139
diff changeset
592 (beginning-of-line)
a7bd91d4af97 (vip-over-whitespace-line): new function.
Karl Heuer <kwzh@gnu.org>
parents: 12139
diff changeset
593 (looking-at "^[ \t]*$")))
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
594
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
595
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
596 ;;; Saving settings in custom file
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
597
12139
e16c06646396 (vip-event-key): now handles keys 128--255 as meta-chars.
Karl Heuer <kwzh@gnu.org>
parents: 11288
diff changeset
598 ;; Save the current setting of VAR in CUSTOM-FILE.
e16c06646396 (vip-event-key): now handles keys 128--255 as meta-chars.
Karl Heuer <kwzh@gnu.org>
parents: 11288
diff changeset
599 ;; If given, MESSAGE is a message to be displayed after that.
e16c06646396 (vip-event-key): now handles keys 128--255 as meta-chars.
Karl Heuer <kwzh@gnu.org>
parents: 11288
diff changeset
600 ;; This message is erased after 2 secs, if erase-msg is non-nil.
e16c06646396 (vip-event-key): now handles keys 128--255 as meta-chars.
Karl Heuer <kwzh@gnu.org>
parents: 11288
diff changeset
601 ;; Arguments: var message custom-file &optional erase-message
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
602 (defun viper-save-setting (var message custom-file &optional erase-msg)
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
603 (let* ((var-name (symbol-name var))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
604 (var-val (if (boundp var) (eval var)))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
605 (regexp (format "^[^;]*%s[ \t\n]*[a-zA-Z---_']*[ \t\n)]" var-name))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
606 (buf (find-file-noselect (substitute-in-file-name custom-file)))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
607 )
14384
854325337547 Moved code around to minimize compiler warnings.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14336
diff changeset
608 (message message)
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
609 (save-excursion
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
610 (set-buffer buf)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
611 (goto-char (point-min))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
612 (if (re-search-forward regexp nil t)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
613 (let ((reg-end (1- (match-end 0))))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
614 (search-backward var-name)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
615 (delete-region (match-beginning 0) reg-end)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
616 (goto-char (match-beginning 0))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
617 (insert (format "%s '%S" var-name var-val)))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
618 (goto-char (point-max))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
619 (if (not (bolp)) (insert "\n"))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
620 (insert (format "(setq %s '%S)\n" var-name var-val)))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
621 (save-buffer))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
622 (kill-buffer buf)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
623 (if erase-msg
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
624 (progn
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
625 (sit-for 2)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
626 (message "")))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
627 ))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
628
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
629 ;; Save STRING in CUSTOM-FILE. If PATTERN is non-nil, remove strings that
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
630 ;; match this pattern.
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
631 (defun viper-save-string-in-file (string custom-file &optional pattern)
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
632 (let ((buf (find-file-noselect (substitute-in-file-name custom-file))))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
633 (save-excursion
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
634 (set-buffer buf)
21940
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
635 (let (buffer-read-only)
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
636 (goto-char (point-min))
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
637 (if pattern (delete-matching-lines pattern))
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
638 (goto-char (point-max))
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
639 (if string (insert string))
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
640 (save-buffer)))
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
641 (kill-buffer buf)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
642 ))
21940
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
643
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
644
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
645 ;; define remote file test
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
646 (or (fboundp 'viper-file-remote-p) ; user supplied his own function: use it
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
647 (defun viper-file-remote-p (file-name)
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
648 (car (cond ((featurep 'efs-auto) (efs-ftp-path file-name))
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
649 ((fboundp 'file-remote-p) (file-remote-p file-name))
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
650 (t (require 'ange-ftp)
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
651 ;; Can happen only in Emacs, since XEmacs has file-remote-p
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
652 (ange-ftp-ftp-name file-name))))))
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
653
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
654
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
655
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
656 ;; This is a simple-minded check for whether a file is under version control.
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
657 ;; If file,v exists but file doesn't, this file is considered to be not checked
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
658 ;; in and not checked out for the purpose of patching (since patch won't be
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
659 ;; able to read such a file anyway).
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
660 ;; FILE is a string representing file name
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
661 ;;(defun viper-file-under-version-control (file)
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
662 ;; (let* ((filedir (file-name-directory file))
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
663 ;; (file-nondir (file-name-nondirectory file))
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
664 ;; (trial (concat file-nondir ",v"))
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
665 ;; (full-trial (concat filedir trial))
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
666 ;; (full-rcs-trial (concat filedir "RCS/" trial)))
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
667 ;; (and (stringp file)
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
668 ;; (file-exists-p file)
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
669 ;; (or
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
670 ;; (and
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
671 ;; (file-exists-p full-trial)
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
672 ;; ;; in FAT FS, `file,v' and `file' may turn out to be the same!
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
673 ;; ;; don't be fooled by this!
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
674 ;; (not (equal (file-attributes file)
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
675 ;; (file-attributes full-trial))))
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
676 ;; ;; check if a version is in RCS/ directory
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
677 ;; (file-exists-p full-rcs-trial)))
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
678 ;; ))
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
679
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
680
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
681 (defsubst viper-file-checked-in-p (file)
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
682 (and (featurep 'vc-hooks)
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
683 ;; CVS files are considered not checked in
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
684 (not (memq (vc-backend file) '(nil CVS)))
33742
f3a1a5ef5e7f (viper-file-checked-in-p): Call vc-state instead of vc-locking-user,
André Spiegel <spiegel@gnu.org>
parents: 33019
diff changeset
685 (not (memq (vc-state file) '(edited needs-merge)))
f3a1a5ef5e7f (viper-file-checked-in-p): Call vc-state instead of vc-locking-user,
André Spiegel <spiegel@gnu.org>
parents: 33019
diff changeset
686 (not (stringp (vc-state file)))))
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
687
21940
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
688 ;; checkout if visited file is checked in
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
689 (defun viper-maybe-checkout (buf)
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
690 (let ((file (expand-file-name (buffer-file-name buf)))
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
691 (checkout-function (key-binding "\C-x\C-q")))
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
692 (if (and (viper-file-checked-in-p file)
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
693 (or (beep 1) t)
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
694 (y-or-n-p
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
695 (format
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
696 "File %s is checked in. Check it out? "
21940
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
697 (viper-abbreviate-file-name file))))
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
698 (with-current-buffer buf
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
699 (command-execute checkout-function)))))
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
700
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
701
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
702
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
703
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
704 ;;; Overlays
28510
6fb7a3864791 2000-04-07 Mikio Nakajima <minakaji@osaka.email.ne.jp>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 27899
diff changeset
705 (defun viper-put-on-search-overlay (beg end)
6fb7a3864791 2000-04-07 Mikio Nakajima <minakaji@osaka.email.ne.jp>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 27899
diff changeset
706 (if (viper-overlay-p viper-search-overlay)
6fb7a3864791 2000-04-07 Mikio Nakajima <minakaji@osaka.email.ne.jp>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 27899
diff changeset
707 (viper-move-overlay viper-search-overlay beg end)
6fb7a3864791 2000-04-07 Mikio Nakajima <minakaji@osaka.email.ne.jp>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 27899
diff changeset
708 (setq viper-search-overlay (viper-make-overlay beg end (current-buffer)))
6fb7a3864791 2000-04-07 Mikio Nakajima <minakaji@osaka.email.ne.jp>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 27899
diff changeset
709 (viper-overlay-put
6fb7a3864791 2000-04-07 Mikio Nakajima <minakaji@osaka.email.ne.jp>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 27899
diff changeset
710 viper-search-overlay 'priority viper-search-overlay-priority))
6fb7a3864791 2000-04-07 Mikio Nakajima <minakaji@osaka.email.ne.jp>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 27899
diff changeset
711 (viper-overlay-put viper-search-overlay 'face viper-search-face))
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
712
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
713 ;; Search
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
714
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
715 (defun viper-flash-search-pattern ()
28510
6fb7a3864791 2000-04-07 Mikio Nakajima <minakaji@osaka.email.ne.jp>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 27899
diff changeset
716 (if (not (viper-has-face-support-p))
6fb7a3864791 2000-04-07 Mikio Nakajima <minakaji@osaka.email.ne.jp>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 27899
diff changeset
717 nil
6fb7a3864791 2000-04-07 Mikio Nakajima <minakaji@osaka.email.ne.jp>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 27899
diff changeset
718 (viper-put-on-search-overlay (match-beginning 0) (match-end 0))
6fb7a3864791 2000-04-07 Mikio Nakajima <minakaji@osaka.email.ne.jp>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 27899
diff changeset
719 (sit-for 2)
6fb7a3864791 2000-04-07 Mikio Nakajima <minakaji@osaka.email.ne.jp>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 27899
diff changeset
720 (viper-overlay-put viper-search-overlay 'face nil)))
6fb7a3864791 2000-04-07 Mikio Nakajima <minakaji@osaka.email.ne.jp>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 27899
diff changeset
721
6fb7a3864791 2000-04-07 Mikio Nakajima <minakaji@osaka.email.ne.jp>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 27899
diff changeset
722 (defun viper-hide-search-overlay ()
6fb7a3864791 2000-04-07 Mikio Nakajima <minakaji@osaka.email.ne.jp>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 27899
diff changeset
723 (if (not (viper-overlay-p viper-search-overlay))
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
724 (progn
28510
6fb7a3864791 2000-04-07 Mikio Nakajima <minakaji@osaka.email.ne.jp>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 27899
diff changeset
725 (setq viper-search-overlay
33019
6306740f6938 2000-10-29 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 28510
diff changeset
726 (viper-make-overlay (point-min) (point-min) (current-buffer)))
28510
6fb7a3864791 2000-04-07 Mikio Nakajima <minakaji@osaka.email.ne.jp>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 27899
diff changeset
727 (viper-overlay-put
6fb7a3864791 2000-04-07 Mikio Nakajima <minakaji@osaka.email.ne.jp>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 27899
diff changeset
728 viper-search-overlay 'priority viper-search-overlay-priority)))
6fb7a3864791 2000-04-07 Mikio Nakajima <minakaji@osaka.email.ne.jp>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 27899
diff changeset
729 (viper-overlay-put viper-search-overlay 'face nil))
16136
de1340e6ddb4 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15747
diff changeset
730
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
731 ;; Replace state
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
732
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
733 (defsubst viper-move-replace-overlay (beg end)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
734 (viper-move-overlay viper-replace-overlay beg end))
14909
7ff1df13b124 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14588
diff changeset
735
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
736 (defun viper-set-replace-overlay (beg end)
27899
42f9a58e0fc4 * viper-cmd.el (viper-envelop-ESC-key): added the option to
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
737 (if (viper-overlay-live-p viper-replace-overlay)
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
738 (viper-move-replace-overlay beg end)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
739 (setq viper-replace-overlay (viper-make-overlay beg end (current-buffer)))
14909
7ff1df13b124 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14588
diff changeset
740 ;; never detach
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
741 (viper-overlay-put
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
742 viper-replace-overlay (if viper-emacs-p 'evaporate 'detachable) nil)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
743 (viper-overlay-put
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
744 viper-replace-overlay 'priority viper-replace-overlay-priority)
18047
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
745 ;; If Emacs will start supporting overlay maps, as it currently supports
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
746 ;; text-property maps, we could do away with viper-replace-minor-mode and
18047
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
747 ;; just have keymap attached to replace overlay.
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
748 ;;(viper-overlay-put
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
749 ;; viper-replace-overlay
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
750 ;; (if viper-xemacs-p 'keymap 'local-map)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
751 ;; viper-replace-map)
18047
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
752 )
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
753 (if (viper-has-face-support-p)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
754 (viper-overlay-put
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
755 viper-replace-overlay 'face viper-replace-overlay-face))
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
756 (viper-save-cursor-color 'before-replace-mode)
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
757 (viper-change-cursor-color viper-replace-overlay-cursor-color)
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
758 )
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
759
12139
e16c06646396 (vip-event-key): now handles keys 128--255 as meta-chars.
Karl Heuer <kwzh@gnu.org>
parents: 11288
diff changeset
760
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
761 (defun viper-set-replace-overlay-glyphs (before-glyph after-glyph)
27899
42f9a58e0fc4 * viper-cmd.el (viper-envelop-ESC-key): added the option to
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
762 (or (viper-overlay-live-p viper-replace-overlay)
42f9a58e0fc4 * viper-cmd.el (viper-envelop-ESC-key): added the option to
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 26263
diff changeset
763 (viper-set-replace-overlay (point-min) (point-min)))
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
764 (if (or (not (viper-has-face-support-p))
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
765 viper-use-replace-region-delimiters)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
766 (let ((before-name (if viper-xemacs-p 'begin-glyph 'before-string))
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
767 (after-name (if viper-xemacs-p 'end-glyph 'after-string)))
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
768 (viper-overlay-put viper-replace-overlay before-name before-glyph)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
769 (viper-overlay-put viper-replace-overlay after-name after-glyph))))
14909
7ff1df13b124 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14588
diff changeset
770
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
771 (defun viper-hide-replace-overlay ()
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
772 (viper-set-replace-overlay-glyphs nil nil)
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
773 (viper-restore-cursor-color 'after-replace-mode)
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
774 (viper-restore-cursor-color 'after-insert-mode)
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
775 (if (viper-has-face-support-p)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
776 (viper-overlay-put viper-replace-overlay 'face nil)))
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
777
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
778
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
779 (defsubst viper-replace-start ()
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
780 (viper-overlay-start viper-replace-overlay))
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
781 (defsubst viper-replace-end ()
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
782 (viper-overlay-end viper-replace-overlay))
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
783
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
784
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
785 ;; Minibuffer
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
786
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
787 (defun viper-set-minibuffer-overlay ()
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
788 (viper-check-minibuffer-overlay)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
789 (if (viper-has-face-support-p)
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
790 (progn
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
791 (viper-overlay-put
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
792 viper-minibuffer-overlay 'face viper-minibuffer-current-face)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
793 (viper-overlay-put
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
794 viper-minibuffer-overlay 'priority viper-minibuffer-overlay-priority)
14909
7ff1df13b124 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14588
diff changeset
795 ;; never detach
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
796 (viper-overlay-put
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
797 viper-minibuffer-overlay
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
798 (if viper-emacs-p 'evaporate 'detachable)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
799 nil)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
800 ;; make viper-minibuffer-overlay open-ended
14233
396316e5fbe6 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
801 ;; In emacs, it is made open ended at creation time
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
802 (if viper-xemacs-p
14909
7ff1df13b124 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14588
diff changeset
803 (progn
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
804 (viper-overlay-put viper-minibuffer-overlay 'start-open nil)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
805 (viper-overlay-put viper-minibuffer-overlay 'end-open nil)))
14233
396316e5fbe6 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
806 )))
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
807
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
808 (defun viper-check-minibuffer-overlay ()
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
809 (or (viper-overlay-p viper-minibuffer-overlay)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
810 (setq viper-minibuffer-overlay
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
811 (if viper-xemacs-p
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
812 (viper-make-overlay 1 (1+ (buffer-size)) (current-buffer))
14909
7ff1df13b124 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14588
diff changeset
813 ;; make overlay open-ended
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
814 (viper-make-overlay
14909
7ff1df13b124 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14588
diff changeset
815 1 (1+ (buffer-size)) (current-buffer) nil 'rear-advance)))
14233
396316e5fbe6 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14169
diff changeset
816 ))
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
817
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
818
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
819 (defsubst viper-is-in-minibuffer ()
21940
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
820 (save-match-data
f7e788ea680b new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19462
diff changeset
821 (string-match "\*Minibuf-" (buffer-name))))
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
822
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
823
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
824
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
825 ;;; XEmacs compatibility
14581
4951b11970a1 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14384
diff changeset
826
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
827 (defun viper-abbreviate-file-name (file)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
828 (if viper-emacs-p
14581
4951b11970a1 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14384
diff changeset
829 (abbreviate-file-name file)
4951b11970a1 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14384
diff changeset
830 ;; XEmacs requires addl argument
4951b11970a1 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14384
diff changeset
831 (abbreviate-file-name file t)))
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
832
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
833 ;; Sit for VAL milliseconds. XEmacs doesn't support the millisecond arg
12139
e16c06646396 (vip-event-key): now handles keys 128--255 as meta-chars.
Karl Heuer <kwzh@gnu.org>
parents: 11288
diff changeset
834 ;; in sit-for, so this function smoothes out the differences.
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
835 (defsubst viper-sit-for-short (val &optional nodisp)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
836 (if viper-xemacs-p
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
837 (sit-for (/ val 1000.0) nodisp)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
838 (sit-for 0 val nodisp)))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
839
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
840 ;; EVENT may be a single event of a sequence of events
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
841 (defsubst viper-ESC-event-p (event)
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
842 (let ((ESC-keys '(?\e (control \[) escape))
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
843 (key (viper-event-key event)))
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
844 (member key ESC-keys)))
18047
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
845
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
846 ;; checks if object is a marker, has a buffer, and points to within that buffer
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
847 (defun viper-valid-marker (marker)
18047
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
848 (if (and (markerp marker) (marker-buffer marker))
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
849 (let ((buf (marker-buffer marker))
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
850 (pos (marker-position marker)))
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
851 (save-excursion
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
852 (set-buffer buf)
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
853 (and (<= pos (point-max)) (<= (point-min) pos))))))
14909
7ff1df13b124 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14588
diff changeset
854
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
855 (defsubst viper-mark-marker ()
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
856 (if viper-xemacs-p
14909
7ff1df13b124 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14588
diff changeset
857 (mark-marker t)
7ff1df13b124 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14588
diff changeset
858 (mark-marker)))
7ff1df13b124 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14588
diff changeset
859
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
860 ;; like (set-mark-command nil) but doesn't push twice, if (car mark-ring)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
861 ;; is the same as (mark t).
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
862 (defsubst viper-set-mark-if-necessary ()
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
863 (setq mark-ring (delete (viper-mark-marker) mark-ring))
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
864 (set-mark-command nil)
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
865 (setq viper-saved-mark (point)))
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
866
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
867 ;; In transient mark mode (zmacs mode), it is annoying when regions become
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
868 ;; highlighted due to Viper's pushing marks. So, we deactivate marks, unless
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
869 ;; the user explicitly wants highlighting, e.g., by hitting '' or ``
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
870 (defun viper-deactivate-mark ()
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
871 (if viper-xemacs-p
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
872 (zmacs-deactivate-region)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
873 (deactivate-mark)))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
874
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
875 (defsubst viper-leave-region-active ()
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
876 (if viper-xemacs-p
12899
e0dfd3c3837e (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12693
diff changeset
877 (setq zmacs-region-stays t)))
e0dfd3c3837e (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12693
diff changeset
878
18047
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
879 ;; Check if arg is a valid character for register
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
880 ;; TYPE is a list that can contain `letter', `Letter', and `digit'.
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
881 ;; Letter means lowercase letters, Letter means uppercase letters, and
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
882 ;; digit means digits from 1 to 9.
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
883 ;; If TYPE is nil, then down/uppercase letters and digits are allowed.
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
884 (defun viper-valid-register (reg &optional type)
18047
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
885 (or type (setq type '(letter Letter digit)))
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
886 (or (if (memq 'letter type)
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
887 (and (<= ?a reg) (<= reg ?z)))
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
888 (if (memq 'digit type)
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
889 (and (<= ?1 reg) (<= reg ?9)))
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
890 (if (memq 'Letter type)
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
891 (and (<= ?A reg) (<= reg ?Z)))
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
892 ))
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
893
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
894
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
895 (defsubst viper-events-to-keys (events)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
896 (cond (viper-xemacs-p (events-to-keys events))
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
897 (t events)))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
898
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
899
18047
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
900 ;; it is suggested that an event must be copied before it is assigned to
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
901 ;; last-command-event in XEmacs
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
902 (defun viper-copy-event (event)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
903 (if viper-xemacs-p
18047
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
904 (copy-event event)
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
905 event))
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
906
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
907 ;; like read-event, but in XEmacs also try to convert to char, if possible
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
908 (defun viper-read-event-convert-to-char ()
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
909 (let (event)
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
910 (if viper-emacs-p
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
911 (read-event)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
912 (setq event (next-command-event))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
913 (or (event-to-character event)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
914 event))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
915 ))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
916
12693
321b2ad48a9c (vip-add-hook,vip-remove-hook): new functions.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12212
diff changeset
917 ;; This function lets function-key-map convert key sequences into logical
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
918 ;; keys. This does a better job than viper-read-event when it comes to kbd
15578
fadc581e380e (vip-read-key): inhibit quit added.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15480
diff changeset
919 ;; macros, since it enables certain macros to be shared between X and TTY modes
fadc581e380e (vip-read-key): inhibit quit added.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15480
diff changeset
920 ;; by correctly mapping key sequences for Left/Right/... (one an ascii
fadc581e380e (vip-read-key): inhibit quit added.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15480
diff changeset
921 ;; terminal) into logical keys left, right, etc.
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
922 (defun viper-read-key ()
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
923 (let ((overriding-local-map viper-overriding-map)
15578
fadc581e380e (vip-read-key): inhibit quit added.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15480
diff changeset
924 (inhibit-quit t)
19203
58c50205001d new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19079
diff changeset
925 help-char key)
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
926 (use-global-map viper-overriding-map)
19203
58c50205001d new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19079
diff changeset
927 (unwind-protect
58c50205001d new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19079
diff changeset
928 (setq key (elt (read-key-sequence nil) 0))
58c50205001d new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19079
diff changeset
929 (use-global-map global-map))
15578
fadc581e380e (vip-read-key): inhibit quit added.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 15480
diff changeset
930 key))
12693
321b2ad48a9c (vip-add-hook,vip-remove-hook): new functions.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12212
diff changeset
931
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
932
12139
e16c06646396 (vip-event-key): now handles keys 128--255 as meta-chars.
Karl Heuer <kwzh@gnu.org>
parents: 11288
diff changeset
933 ;; Emacs has a bug in eventp, which causes (eventp nil) to return (nil)
14584
6674e3119d9e (vip-event-key): ignore consp events.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14581
diff changeset
934 ;; instead of nil, if '(nil) was previously inadvertently assigned to
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
935 ;; unread-command-events
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
936 (defun viper-event-key (event)
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
937 (or (and event (eventp event))
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
938 (error "viper-event-key: Wrong type argument, eventp, %S" event))
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
939 (when (cond (viper-xemacs-p (or (key-press-event-p event)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
940 (mouse-event-p event)))
18047
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
941 (t t))
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
942 (let ((mod (event-modifiers event))
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
943 basis)
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
944 (setq basis
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
945 (cond
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
946 (viper-xemacs-p
18047
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
947 (cond ((key-press-event-p event)
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
948 (event-key event))
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
949 ((button-event-p event)
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
950 (concat "mouse-" (prin1-to-string (event-button event))))
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
951 (t
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
952 (error "viper-event-key: Unknown event, %S" event))))
18047
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
953 (t
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
954 ;; Emacs doesn't handle capital letters correctly, since
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
955 ;; \S-a isn't considered the same as A (it behaves as
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
956 ;; plain `a' instead). So we take care of this here
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
957 (cond ((and (viper-characterp event) (<= ?A event) (<= event ?Z))
18047
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
958 (setq mod nil
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
959 event event))
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
960 ;; Emacs has the oddity whereby characters 128+char
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
961 ;; represent M-char *if* this appears inside a string.
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
962 ;; So, we convert them manually to (meta char).
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
963 ((and (viper-characterp event)
18047
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
964 (< ?\C-? event) (<= event 255))
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
965 (setq mod '(meta)
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
966 event (- event ?\C-? 1)))
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
967 ((and (null mod) (eq event 'return))
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
968 (setq event ?\C-m))
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
969 ((and (null mod) (eq event 'space))
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
970 (setq event ?\ ))
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
971 ((and (null mod) (eq event 'delete))
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
972 (setq event ?\C-?))
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
973 ((and (null mod) (eq event 'backspace))
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
974 (setq event ?\C-h))
18047
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
975 (t (event-basic-type event)))
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
976 )))
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
977 (if (viper-characterp basis)
18047
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
978 (setq basis
33019
6306740f6938 2000-10-29 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 28510
diff changeset
979 (if (viper= basis ?\C-?)
18047
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
980 (list 'control '\?) ; taking care of an emacs bug
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
981 (intern (char-to-string basis)))))
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
982 (if mod
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
983 (append mod (list basis))
1b06411ccc04 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 16766
diff changeset
984 basis))))
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
985
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
986 (defun viper-key-to-emacs-key (key)
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
987 (let (key-name char-p modifiers mod-char-list base-key base-key-name)
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
988 (cond (viper-xemacs-p key)
18839
1405083241e8 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18172
diff changeset
989
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
990 ((symbolp key)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
991 (setq key-name (symbol-name key))
18839
1405083241e8 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18172
diff changeset
992 (cond ((= (length key-name) 1) ; character event
1405083241e8 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18172
diff changeset
993 (string-to-char key-name))
1405083241e8 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18172
diff changeset
994 ;; Emacs doesn't recognize `return' and `escape' as events on
1405083241e8 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18172
diff changeset
995 ;; dumb terminals, so we translate them into characters
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
996 ((and viper-emacs-p (not (viper-window-display-p))
18839
1405083241e8 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18172
diff changeset
997 (string= key-name "return"))
1405083241e8 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18172
diff changeset
998 ?\C-m)
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
999 ((and viper-emacs-p (not (viper-window-display-p))
18839
1405083241e8 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18172
diff changeset
1000 (string= key-name "escape"))
1405083241e8 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18172
diff changeset
1001 ?\e)
1405083241e8 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18172
diff changeset
1002 ;; pass symbol-event as is
1405083241e8 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18172
diff changeset
1003 (t key)))
1405083241e8 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18172
diff changeset
1004
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1005 ((listp key)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1006 (setq modifiers (subseq key 0 (1- (length key)))
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1007 base-key (viper-seq-last-elt key)
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1008 base-key-name (symbol-name base-key)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1009 char-p (= (length base-key-name) 1))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1010 (setq mod-char-list
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1011 (mapcar
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1012 '(lambda (elt) (upcase (substring (symbol-name elt) 0 1)))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1013 modifiers))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1014 (if char-p
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1015 (setq key-name
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1016 (car (read-from-string
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1017 (concat
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1018 "?\\"
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1019 (mapconcat 'identity mod-char-list "-\\")
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1020 "-"
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1021 base-key-name))))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1022 (setq key-name
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1023 (intern
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1024 (concat
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1025 (mapconcat 'identity mod-char-list "-")
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1026 "-"
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1027 base-key-name))))))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1028 ))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1029
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1030
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1031 ;; Args can be a sequence of events, a string, or a Viper macro. Will try to
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1032 ;; convert events to keys and, if all keys are regular printable
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
1033 ;; characters, will return a string. Otherwise, will return a string
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
1034 ;; representing a vector of converted events. If the input was a Viper macro,
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1035 ;; will return a string that represents this macro as a vector.
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1036 (defun viper-array-to-string (event-seq)
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
1037 (let (temp temp2)
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1038 (cond ((stringp event-seq) event-seq)
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1039 ((viper-event-vector-p event-seq)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1040 (setq temp (mapcar 'viper-event-key event-seq))
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1041 (cond ((viper-char-symbol-sequence-p temp)
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
1042 (mapconcat 'symbol-name temp ""))
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1043 ((and (viper-char-array-p
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1044 (setq temp2 (mapcar 'viper-key-to-character temp))))
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
1045 (mapconcat 'char-to-string temp2 ""))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
1046 (t (prin1-to-string (vconcat temp)))))
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1047 ((viper-char-symbol-sequence-p event-seq)
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1048 (mapconcat 'symbol-name event-seq ""))
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
1049 ((and (vectorp event-seq)
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1050 (viper-char-array-p
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1051 (setq temp (mapcar 'viper-key-to-character event-seq))))
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
1052 (mapconcat 'char-to-string temp ""))
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1053 (t (prin1-to-string event-seq)))))
13213
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1054
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1055 (defun viper-key-press-events-to-chars (events)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1056 (mapconcat (if viper-emacs-p
13213
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1057 'char-to-string
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
1058 (lambda (elt) (char-to-string (event-to-character elt))))
13213
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1059 events
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1060 ""))
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1061
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1062
18839
1405083241e8 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18172
diff changeset
1063 ;; Uses different timeouts for ESC-sequences and others
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1064 (defsubst viper-fast-keysequence-p ()
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1065 (not (viper-sit-for-short
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1066 (if (viper-ESC-event-p last-input-event)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1067 viper-ESC-keyseq-timeout
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1068 viper-fast-keyseq-timeout)
18839
1405083241e8 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18172
diff changeset
1069 t)))
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1070
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1071 (defun viper-read-char-exclusive ()
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1072 (let (char
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1073 (echo-keystrokes 1))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1074 (while (null char)
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1075 (condition-case nil
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1076 (setq char (read-char))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1077 (error
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1078 ;; skip event if not char
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1079 (viper-read-event))))
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1080 char))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1081
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
1082 ;; key is supposed to be in viper's representation, e.g., (control l), a
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
1083 ;; character, etc.
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1084 (defun viper-key-to-character (key)
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
1085 (cond ((eq key 'space) ?\ )
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
1086 ((eq key 'delete) ?\C-?)
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1087 ((eq key 'return) ?\C-m)
15480
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
1088 ((eq key 'backspace) ?\C-h)
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
1089 ((and (symbolp key)
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
1090 (= 1 (length (symbol-name key))))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
1091 (string-to-char (symbol-name key)))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
1092 ((and (listp key)
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
1093 (eq (car key) 'control)
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
1094 (symbol-name (nth 1 key))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
1095 (= 1 (length (symbol-name (nth 1 key)))))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
1096 (read (format "?\\C-%s" (symbol-name (nth 1 key)))))
43a3308fcf61 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 14909
diff changeset
1097 (t key)))
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1098
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1099
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1100 (defun viper-setup-master-buffer (&rest other-files-or-buffers)
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1101 "Set up the current buffer as a master buffer.
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
1102 Arguments become related buffers. This function should normally be used in
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1103 the `Local variables' section of a file."
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1104 (setq viper-related-files-and-buffers-ring
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1105 (make-ring (1+ (length other-files-or-buffers))))
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1106 (mapcar '(lambda (elt)
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1107 (viper-ring-insert viper-related-files-and-buffers-ring elt))
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1108 other-files-or-buffers)
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1109 (viper-ring-insert viper-related-files-and-buffers-ring (buffer-name))
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1110 )
13213
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1111
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1112 ;;; Movement utilities
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1113
19462
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1114 ;; Characters that should not be considered as part of the word, in reformed-vi
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1115 ;; syntax mode.
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1116 (defconst viper-non-word-characters-reformed-vi
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1117 "!@#$%^&*()-+=|\\~`{}[];:'\",<.>/?")
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1118 ;; These are characters that are not to be considered as parts of a word in
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1119 ;; Viper.
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1120 ;; Set each time state changes and at loading time
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1121 (viper-deflocalvar viper-non-word-characters nil)
13213
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1122
19462
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1123 ;; must be buffer-local
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1124 (viper-deflocalvar viper-ALPHA-char-class "w"
13213
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1125 "String of syntax classes characterizing Viper's alphanumeric symbols.
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1126 In addition, the symbol `_' may be considered alphanumeric if
19462
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1127 `viper-syntax-preference' is `strict-vi' or `reformed-vi'.")
13213
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1128
19462
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1129 (defconst viper-strict-ALPHA-chars "a-zA-Z0-9_"
13213
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1130 "Regexp matching the set of alphanumeric characters acceptable to strict
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1131 Vi.")
19462
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1132 (defconst viper-strict-SEP-chars " \t\n"
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1133 "Regexp matching the set of alphanumeric characters acceptable to strict
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1134 Vi.")
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1135 (defconst viper-strict-SEP-chars-sans-newline " \t"
13213
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1136 "Regexp matching the set of alphanumeric characters acceptable to strict
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1137 Vi.")
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1138
19462
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1139 (defconst viper-SEP-char-class " -"
13213
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1140 "String of syntax classes for Vi separators.
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1141 Usually contains ` ', linefeed, TAB or formfeed.")
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1142
19462
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1143
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1144 ;; Set Viper syntax classes and related variables according to
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1145 ;; `viper-syntax-preference'.
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1146 (defun viper-update-syntax-classes (&optional set-default)
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1147 (let ((preference (cond ((eq viper-syntax-preference 'emacs)
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1148 "w") ; Viper words have only Emacs word chars
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1149 ((eq viper-syntax-preference 'extended)
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1150 "w_") ; Viper words have Emacs word & symbol chars
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1151 (t "w"))) ; Viper words are Emacs words plus `_'
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1152 (non-word-chars (cond ((eq viper-syntax-preference 'reformed-vi)
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1153 (viper-string-to-list
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1154 viper-non-word-characters-reformed-vi))
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1155 (t nil))))
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1156 (if set-default
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1157 (setq-default viper-ALPHA-char-class preference
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1158 viper-non-word-characters non-word-chars)
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1159 (setq viper-ALPHA-char-class preference
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1160 viper-non-word-characters non-word-chars))
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1161 ))
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1162
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1163 ;; SYMBOL is used because customize requires it, but it is ignored, unless it
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
1164 ;; is `nil'. If nil, use setq.
19462
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1165 (defun viper-set-syntax-preference (&optional symbol value)
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1166 "Set Viper syntax preference.
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1167 If called interactively or if SYMBOL is nil, sets syntax preference in current
26263
4f315ca65976 *** empty log message ***
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 22284
diff changeset
1168 buffer. If called non-interactively, preferably via the customization widget,
19462
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1169 sets the default value."
13213
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1170 (interactive)
19462
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1171 (or value
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1172 (setq value
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1173 (completing-read
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1174 "Viper syntax preference: "
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1175 '(("strict-vi") ("reformed-vi") ("extended") ("emacs"))
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1176 nil 'require-match)))
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1177 (if (stringp value) (setq value (intern value)))
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1178 (or (memq value '(strict-vi reformed-vi extended emacs))
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1179 (error "Invalid Viper syntax preference, %S" value))
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1180 (if symbol
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1181 (setq-default viper-syntax-preference value)
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1182 (setq viper-syntax-preference value))
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1183 (viper-update-syntax-classes))
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1184
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1185 (defcustom viper-syntax-preference 'reformed-vi
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1186 "*Syntax type characterizing Viper's alphanumeric symbols.
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1187 Affects movement and change commands that deal with Vi-style words.
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1188 Works best when set in the hooks to various major modes.
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1189
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1190 `strict-vi' means Viper words are (hopefully) exactly as in Vi.
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1191
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1192 `reformed-vi' means Viper words are like Emacs words \(as determined using
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1193 Emacs syntax tables, which are different for different major modes\) with two
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1194 exceptions: the symbol `_' is always part of a word and typical Vi non-word
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1195 symbols, such as `,',:,\",),{, etc., are excluded.
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1196 This behaves very close to `strict-vi', but also works well with non-ASCII
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1197 characters from various alphabets.
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1198
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1199 `extended' means Viper word constituents are symbols that are marked as being
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1200 parts of words OR symbols in Emacs syntax tables.
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1201 This is most appropriate for major modes intended for editing programs.
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1202
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1203 `emacs' means Viper words are the same as Emacs words as specified by Emacs
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1204 syntax tables.
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1205 This option is appropriate if you like Emacs-style words."
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1206 :type '(radio (const strict-vi) (const reformed-vi)
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1207 (const extended) (const emacs))
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1208 :set 'viper-set-syntax-preference
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1209 :group 'viper)
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1210 (make-variable-buffer-local 'viper-syntax-preference)
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1211
13213
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1212
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1213 ;; addl-chars are characters to be temporarily considered as alphanumerical
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1214 (defun viper-looking-at-alpha (&optional addl-chars)
13213
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1215 (or (stringp addl-chars) (setq addl-chars ""))
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1216 (if (eq viper-syntax-preference 'reformed-vi)
13213
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1217 (setq addl-chars (concat addl-chars "_")))
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1218 (let ((char (char-after (point))))
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1219 (if char
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1220 (if (eq viper-syntax-preference 'strict-vi)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1221 (looking-at (concat "[" viper-strict-ALPHA-chars addl-chars "]"))
19462
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1222 (or
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1223 ;; or one of the additional chars being asked to include
33019
6306740f6938 2000-10-29 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 28510
diff changeset
1224 (viper-memq-char char (viper-string-to-list addl-chars))
19462
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1225 (and
33019
6306740f6938 2000-10-29 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 28510
diff changeset
1226 ;; not one of the excluded word chars (note:
6306740f6938 2000-10-29 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 28510
diff changeset
1227 ;; viper-non-word-characters is a list)
6306740f6938 2000-10-29 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 28510
diff changeset
1228 (not (viper-memq-char char viper-non-word-characters))
19462
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1229 ;; char of the Viper-word syntax class
33019
6306740f6938 2000-10-29 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 28510
diff changeset
1230 (viper-memq-char (char-syntax char)
6306740f6938 2000-10-29 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 28510
diff changeset
1231 (viper-string-to-list viper-ALPHA-char-class))))))
13213
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1232 ))
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1233
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1234 (defun viper-looking-at-separator ()
13213
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1235 (let ((char (char-after (point))))
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1236 (if char
19462
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1237 (if (eq viper-syntax-preference 'strict-vi)
33019
6306740f6938 2000-10-29 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 28510
diff changeset
1238 (viper-memq-char char (viper-string-to-list viper-strict-SEP-chars))
19462
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1239 (or (eq char ?\n) ; RET is always a separator in Vi
33019
6306740f6938 2000-10-29 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 28510
diff changeset
1240 (viper-memq-char (char-syntax char)
6306740f6938 2000-10-29 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 28510
diff changeset
1241 (viper-string-to-list viper-SEP-char-class)))))
19462
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1242 ))
13213
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1243
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1244 (defsubst viper-looking-at-alphasep (&optional addl-chars)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1245 (or (viper-looking-at-separator) (viper-looking-at-alpha addl-chars)))
13213
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1246
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1247 (defun viper-skip-alpha-forward (&optional addl-chars)
13213
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1248 (or (stringp addl-chars) (setq addl-chars ""))
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1249 (viper-skip-syntax
13213
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1250 'forward
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1251 (cond ((eq viper-syntax-preference 'strict-vi)
13213
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1252 "")
19241
eb1cef5fa337 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19203
diff changeset
1253 (t viper-ALPHA-char-class))
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1254 (cond ((eq viper-syntax-preference 'strict-vi)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1255 (concat viper-strict-ALPHA-chars addl-chars))
13213
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1256 (t addl-chars))))
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1257
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1258 (defun viper-skip-alpha-backward (&optional addl-chars)
13213
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1259 (or (stringp addl-chars) (setq addl-chars ""))
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1260 (viper-skip-syntax
13213
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1261 'backward
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1262 (cond ((eq viper-syntax-preference 'strict-vi)
13213
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1263 "")
19241
eb1cef5fa337 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19203
diff changeset
1264 (t viper-ALPHA-char-class))
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1265 (cond ((eq viper-syntax-preference 'strict-vi)
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1266 (concat viper-strict-ALPHA-chars addl-chars))
13213
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1267 (t addl-chars))))
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1268
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1269 ;; weird syntax tables may confuse strict-vi style
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1270 (defsubst viper-skip-all-separators-forward (&optional within-line)
19462
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1271 (if (eq viper-syntax-preference 'strict-vi)
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1272 (if within-line
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1273 (skip-chars-forward viper-strict-SEP-chars-sans-newline)
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1274 (skip-chars-forward viper-strict-SEP-chars))
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1275 (viper-skip-syntax 'forward
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1276 viper-SEP-char-class
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1277 (or within-line "\n")
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1278 (if within-line (viper-line-pos 'end)))))
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1279 (defsubst viper-skip-all-separators-backward (&optional within-line)
19462
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1280 (if (eq viper-syntax-preference 'strict-vi)
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1281 (if within-line
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1282 (skip-chars-backward viper-strict-SEP-chars-sans-newline)
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1283 (skip-chars-backward viper-strict-SEP-chars))
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1284 (viper-skip-syntax 'backward
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1285 viper-SEP-char-class
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1286 (or within-line "\n")
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1287 (if within-line (viper-line-pos 'start)))))
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1288 (defun viper-skip-nonseparators (direction)
19462
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1289 (viper-skip-syntax
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1290 direction
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1291 (concat "^" viper-SEP-char-class)
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1292 nil
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1293 (viper-line-pos (if (eq direction 'forward) 'end 'start))))
13213
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1294
19462
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1295
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1296 ;; skip over non-word constituents and non-separators
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1297 (defun viper-skip-nonalphasep-forward ()
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1298 (if (eq viper-syntax-preference 'strict-vi)
13213
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1299 (skip-chars-forward
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1300 (concat "^" viper-strict-SEP-chars viper-strict-ALPHA-chars))
19462
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1301 (viper-skip-syntax
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1302 'forward
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1303 (concat "^" viper-ALPHA-char-class viper-SEP-char-class)
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1304 ;; Emacs may consider some of these as words, but we don't want them
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1305 viper-non-word-characters
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1306 (viper-line-pos 'end))))
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1307 (defun viper-skip-nonalphasep-backward ()
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1308 (if (eq viper-syntax-preference 'strict-vi)
13213
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1309 (skip-chars-backward
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1310 (concat "^" viper-strict-SEP-chars viper-strict-ALPHA-chars))
19462
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1311 (viper-skip-syntax
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1312 'backward
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1313 (concat "^" viper-ALPHA-char-class viper-SEP-char-class)
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1314 ;; Emacs may consider some of these as words, but we don't want them
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1315 viper-non-word-characters
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1316 (viper-line-pos 'start))))
13213
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1317
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1318 ;; Skip SYNTAX like skip-syntax-* and ADDL-CHARS like skip-chars-*
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1319 ;; Return the number of chars traveled.
19462
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1320 ;; Both SYNTAX or ADDL-CHARS can be strings or lists of characters.
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1321 ;; When SYNTAX is "w", then viper-non-word-characters are not considered to be
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1322 ;; words, even if Emacs syntax table says they are.
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1323 (defun viper-skip-syntax (direction syntax addl-chars &optional limit)
13213
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1324 (let ((total 0)
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1325 (local 1)
19462
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1326 (skip-chars-func
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1327 (if (eq direction 'forward)
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1328 'skip-chars-forward 'skip-chars-backward))
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1329 (skip-syntax-func
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1330 (if (eq direction 'forward)
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1331 'viper-forward-char-carefully 'viper-backward-char-carefully))
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1332 char-looked-at syntax-of-char-looked-at negated-syntax)
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1333 (setq addl-chars
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1334 (cond ((listp addl-chars) (viper-charlist-to-string addl-chars))
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1335 ((stringp addl-chars) addl-chars)
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1336 (t "")))
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1337 (setq syntax
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1338 (cond ((listp syntax) syntax)
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1339 ((stringp syntax) (viper-string-to-list syntax))
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1340 (t nil)))
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1341 (if (memq ?^ syntax) (setq negated-syntax t))
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1342
22284
7c92be9aea04 (viper-skip-syntax): Bug fix for eob/bob cases.
Karl Heuer <kwzh@gnu.org>
parents: 21940
diff changeset
1343 (while (and (not (= local 0))
7c92be9aea04 (viper-skip-syntax): Bug fix for eob/bob cases.
Karl Heuer <kwzh@gnu.org>
parents: 21940
diff changeset
1344 (cond ((eq direction 'forward)
7c92be9aea04 (viper-skip-syntax): Bug fix for eob/bob cases.
Karl Heuer <kwzh@gnu.org>
parents: 21940
diff changeset
1345 (not (eobp)))
7c92be9aea04 (viper-skip-syntax): Bug fix for eob/bob cases.
Karl Heuer <kwzh@gnu.org>
parents: 21940
diff changeset
1346 (t (not (bobp)))))
19462
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1347 (setq char-looked-at (viper-char-at-pos direction)
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1348 ;; if outside the range, set to nil
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1349 syntax-of-char-looked-at (if char-looked-at
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1350 (char-syntax char-looked-at)))
13213
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1351 (setq local
19462
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1352 (+ (if (and
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1353 (cond ((and limit (eq direction 'forward))
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1354 (< (point) limit))
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1355 (limit ; backward & limit
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1356 (> (point) limit))
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1357 (t t)) ; no limit
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1358 ;; char under/before cursor has appropriate syntax
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1359 (if negated-syntax
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1360 (not (memq syntax-of-char-looked-at syntax))
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1361 (memq syntax-of-char-looked-at syntax))
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1362 ;; if char-syntax class is "word", make sure it is not one
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1363 ;; of the excluded characters
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1364 (if (and (eq syntax-of-char-looked-at ?w)
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1365 (not negated-syntax))
33019
6306740f6938 2000-10-29 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 28510
diff changeset
1366 (not (viper-memq-char
6306740f6938 2000-10-29 Michael Kifer <kifer@cs.sunysb.edu>
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 28510
diff changeset
1367 char-looked-at viper-non-word-characters))
19462
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1368 t))
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1369 (funcall skip-syntax-func 1)
a3240ad2e954 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 19241
diff changeset
1370 0)
13213
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1371 (funcall skip-chars-func addl-chars limit)))
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1372 (setq total (+ total local)))
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1373 total
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1374 ))
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1375
68b3f6d9156f (vip-leave-region-active): new function.
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 12899
diff changeset
1376
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1377
18839
1405083241e8 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18172
diff changeset
1378 (provide 'viper-util)
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1379
18839
1405083241e8 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18172
diff changeset
1380
1405083241e8 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18172
diff changeset
1381 ;;; Local Variables:
19079
dfbef8117c6a new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18839
diff changeset
1382 ;;; eval: (put 'viper-deflocalvar 'lisp-indent-hook 'defun)
18839
1405083241e8 new version
Michael Kifer <kifer@cs.stonybrook.edu>
parents: 18172
diff changeset
1383 ;;; End:
10789
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1384
af7c0bb1059f Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1385 ;;; viper-util.el ends here