aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Kifer1995-10-14 02:26:46 +0000
committerMichael Kifer1995-10-14 02:26:46 +0000
commita595547cc5d1b912543b866b1aaa9de741ec9aee (patch)
treec5f875f46306ac75d51f107bdf77d27c122d68c2
parentf90edb57db801860dbcceed5147a5244ede1d5db (diff)
downloademacs-a595547cc5d1b912543b866b1aaa9de741ec9aee.tar.gz
emacs-a595547cc5d1b912543b866b1aaa9de741ec9aee.zip
* viper-mous.el (vip-surrounding-word): modified to understand tripple clicks.
-rw-r--r--lisp/emulation/viper-mous.el102
1 files changed, 36 insertions, 66 deletions
diff --git a/lisp/emulation/viper-mous.el b/lisp/emulation/viper-mous.el
index e3b91fbea6a..d4f134503ef 100644
--- a/lisp/emulation/viper-mous.el
+++ b/lisp/emulation/viper-mous.el
@@ -84,97 +84,65 @@ For convenience, in Lisp modes, `-' is considered alphanumeric.
84If CLICK-COUNT is 3 or more, returns the line clicked on with leading and 84If CLICK-COUNT is 3 or more, returns the line clicked on with leading and
85trailing space and tabs removed. In that case, the first argument, COUNT, 85trailing space and tabs removed. In that case, the first argument, COUNT,
86is ignored." 86is ignored."
87 (let ((basic-alpha "_a-zA-Z0-9") ; it is important for `_' to come first 87 (let ((modifiers "")
88 (basic-alpha-B "[_a-zA-Z0-9]")
89 (basic-nonalphasep-B vip-NONALPHASEP-B)
90 (end-modifiers "")
91 (start-modifiers "")
92 vip-ALPHA vip-ALPHA-B
93 vip-NONALPHA vip-NONALPHA-B
94 vip-ALPHASEP vip-ALPHASEP-B
95 vip-NONALPHASEP vip-NONALPHASEP-B
96 beg skip-flag result 88 beg skip-flag result
97 one-char-word-func word-function-forw word-function-back word-beg) 89 word-beg)
98 (if (> click-count 2) 90 (if (> click-count 2)
99 (save-excursion 91 (save-excursion
100 (beginning-of-line) 92 (beginning-of-line)
101 (skip-chars-forward " \t") 93 (vip-skip-all-separators-forward 'within-line)
102 (setq beg (point)) 94 (setq beg (point))
103 (end-of-line) 95 (end-of-line)
104 (setq result (buffer-substring beg (point)))) 96 (setq result (buffer-substring beg (point))))
105 97
106 (if (and (looking-at basic-nonalphasep-B) 98 (if (and (not (vip-looking-at-alphasep))
107 (or (save-excursion (vip-backward-char-carefully) 99 (or (save-excursion (vip-backward-char-carefully)
108 (looking-at basic-alpha-B)) 100 (vip-looking-at-alpha))
109 (save-excursion (vip-forward-char-carefully) 101 (save-excursion (vip-forward-char-carefully)
110 (looking-at basic-alpha-B)))) 102 (vip-looking-at-alpha))))
111 (setq start-modifiers 103 (setq modifiers
112 (cond ((looking-at "\\\\") "\\\\") 104 (cond ((looking-at "\\\\") "\\\\")
113 ((looking-at "-") "") 105 ((looking-at "-") "C-C-")
114 ((looking-at "[][]") "][") 106 ((looking-at "[][]") "][")
115 ((looking-at "[()]") ")(") 107 ((looking-at "[()]") ")(")
116 ((looking-at "[{}]") "{}") 108 ((looking-at "[{}]") "{}")
117 ((looking-at "[<>]") "<>") 109 ((looking-at "[<>]") "<>")
118 ((looking-at "[`']") "`'") 110 ((looking-at "[`']") "`'")
119 ((looking-at "\\^") "") 111 ((looking-at "\\^") "\\^")
120 ((looking-at vip-SEP-B) "") 112 ((vip-looking-at-separator) "")
121 (t (char-to-string (following-char)))) 113 (t (char-to-string (following-char))))
122 end-modifiers 114 ))
123 (cond ((looking-at "-") "C-C-") ;; note the C-C trick
124 ((looking-at "\\^") "^")
125 (t ""))))
126 115
127 ;; Add `-' to alphanum, if it wasn't added and in we are in Lisp 116 ;; Add `-' to alphanum, if it wasn't added and if we are in Lisp
128 (or (looking-at "-") 117 (or (looking-at "-")
129 (not (string-match "lisp" (symbol-name major-mode))) 118 (not (string-match "lisp" (symbol-name major-mode)))
130 (setq end-modifiers (concat end-modifiers "C-C-"))) 119 (setq modifiers (concat modifiers "C-C-")))
131 120
132 (setq vip-ALPHA
133 (format "%s%s%s" start-modifiers basic-alpha end-modifiers)
134 vip-ALPHA-B
135 (format "[%s%s%s]" start-modifiers basic-alpha end-modifiers)
136 vip-NONALPHA (concat "^" vip-ALPHA)
137 vip-NONALPHA-B (concat "[" vip-NONALPHA "]")
138 vip-ALPHASEP (concat vip-ALPHA vip-SEP)
139 vip-ALPHASEP-B
140 (format "[%s%s%s%s]"
141 start-modifiers basic-alpha vip-SEP end-modifiers)
142 vip-NONALPHASEP (format "^%s%s" vip-SEP vip-ALPHA)
143 vip-NONALPHASEP-B (format "[^%s%s]" vip-SEP vip-ALPHA)
144 )
145
146 (if (> click-count 1)
147 (setq one-char-word-func 'vip-one-char-Word-p
148 word-function-forw 'vip-end-of-Word
149 word-function-back 'vip-backward-Word)
150 (setq one-char-word-func 'vip-one-char-word-p
151 word-function-forw 'vip-end-of-word
152 word-function-back 'vip-backward-word))
153 121
154 (save-excursion 122 (save-excursion
155 (cond ((> click-count 1) (skip-chars-backward vip-NONSEP)) 123 (cond ((> click-count 1) (vip-skip-nonseparators 'backward))
156 ((looking-at vip-ALPHA-B) (skip-chars-backward vip-ALPHA)) 124 ((vip-looking-at-alpha modifiers)
157 ((looking-at vip-NONALPHASEP-B) 125 (vip-skip-alpha-backward modifiers))
158 (skip-chars-backward vip-NONALPHASEP)) 126 ((not (vip-looking-at-alphasep modifiers))
159 (t (funcall word-function-back 1))) 127 (vip-skip-nonalphasep-backward))
160 128 (t (if (> click-count 1)
129 (vip-skip-nonseparators 'backward)
130 (vip-skip-alpha-backward modifiers))))
131
161 (setq word-beg (point)) 132 (setq word-beg (point))
162 133
163 (setq skip-flag t) 134 (setq skip-flag nil) ; don't move 1 char forw the first time
164 (while (> count 0) 135 (while (> count 0)
165 ;; skip-flag and the test for 1-char word takes care of the 136 (if skip-flag (vip-forward-char-carefully 1))
166 ;; special treatment that vip-end-of-word gives to 1-character 137 (setq skip-flag t) ; now always move 1 char forward
167 ;; words. Otherwise, clicking once on such a word will insert two 138 (if (> click-count 1)
168 ;; words. 139 (vip-skip-nonseparators 'forward)
169 (if (and skip-flag (funcall one-char-word-func)) 140 (vip-skip-alpha-forward modifiers))
170 (setq skip-flag (not skip-flag))
171 (funcall word-function-forw 1))
172 (setq count (1- count))) 141 (setq count (1- count)))
173 142
174 (vip-forward-char-carefully)
175 (setq result (buffer-substring word-beg (point)))) 143 (setq result (buffer-substring word-beg (point))))
176 ) ; if 144 ) ; if
177 ;; XEmacs doesn't have set-text-propertiesr, but there buffer-substring 145 ;; XEmacs doesn't have set-text-properties, but there buffer-substring
178 ;; doesn't return properties together with the string, so it's not needed. 146 ;; doesn't return properties together with the string, so it's not needed.
179 (if vip-emacs-p 147 (if vip-emacs-p
180 (set-text-properties 0 (length result) nil result)) 148 (set-text-properties 0 (length result) nil result))
@@ -432,12 +400,14 @@ bindings in viper.el and in the Viper manual."
432 400
433 401
434(cond ((vip-window-display-p) 402(cond ((vip-window-display-p)
435 (let* ((search-key (if vip-xemacs-p [(meta button1up)] [S-mouse-1])) 403 (let* ((search-key (if vip-xemacs-p
404 [(meta shift button1up)] [S-mouse-1]))
436 (search-key-catch (if vip-xemacs-p 405 (search-key-catch (if vip-xemacs-p
437 [(meta button1)] [S-down-mouse-1])) 406 [(meta shift button1)] [S-down-mouse-1]))
438 (insert-key (if vip-xemacs-p [(meta button2up)] [S-mouse-2])) 407 (insert-key (if vip-xemacs-p
408 [(meta shift button2up)] [S-mouse-2]))
439 (insert-key-catch (if vip-xemacs-p 409 (insert-key-catch (if vip-xemacs-p
440 [(meta button2)] [S-down-mouse-2])) 410 [(meta shift button2)] [S-down-mouse-2]))
441 (search-key-unbound (and (not (key-binding search-key)) 411 (search-key-unbound (and (not (key-binding search-key))
442 (not (key-binding search-key-catch)))) 412 (not (key-binding search-key-catch))))
443 (insert-key-unbound (and (not (key-binding insert-key)) 413 (insert-key-unbound (and (not (key-binding insert-key))