0
|
1 ;;!emacs
|
|
2 ;;
|
|
3 ;; FILE: hui-mouse.el
|
|
4 ;; SUMMARY: Use key or mouse key for many functions, e.g. Hypb menus.
|
|
5 ;; See the "${data-directory}/hypb-mouse.txt" file and the
|
|
6 ;; documentation strings for functions herein.
|
|
7 ;; USAGE: GNU Emacs Lisp Library
|
|
8 ;; KEYWORDS: hypermedia, mouse
|
|
9 ;;
|
|
10 ;; AUTHOR: Bob Weiner
|
70
|
11 ;; ORG: Brown U.
|
0
|
12 ;;
|
|
13 ;; ORIG-DATE: 04-Feb-89
|
70
|
14 ;; LAST-MOD: 1-Nov-95 at 20:45:57 by Bob Weiner
|
0
|
15 ;;
|
|
16 ;; This file is part of Hyperbole.
|
|
17 ;; Available for use and distribution under the same terms as GNU Emacs.
|
|
18 ;;
|
|
19 ;; Copyright (C) 1989-1995, Free Software Foundation, Inc.
|
|
20 ;; Developed with support from Motorola Inc.
|
|
21 ;;
|
|
22 ;; DESCRIPTION:
|
|
23 ;;
|
|
24 ;; This code is machine independent. It works best with a pointing device but
|
|
25 ;; may also be used from a keyboard. When used with a pointing device it
|
|
26 ;; requires an Emacs command that sets point to the location of the pointing
|
|
27 ;; device's cursor.
|
|
28 ;;
|
|
29 ;; If you want to use your shift-middle mouse button to select Hyperbole menu
|
|
30 ;; items and Hyperbole buttons, follow these instructions.
|
|
31 ;;
|
|
32 ;; If you plan to use a mouse only with X windows (Lucid Emacs, GNU Emacs
|
|
33 ;; 19, or Epoch), NEXTSTEP, SunView, Apollo's DM, and you want to use the
|
|
34 ;; shift-middle and shift-right buttons, you need not do any mouse
|
|
35 ;; configuration. Your Emacs executable must have been built so as to
|
|
36 ;; include the mouse support files for your window system, however. These
|
|
37 ;; are in the Emacs "src" directory: for X "x*.c", for SunView "sunfns.c",
|
|
38 ;; and for Apollo DM "apollo.c" and "apollo.el".
|
|
39 ;;
|
|
40 ;; To use a different mouse key or a different window system, modify the
|
|
41 ;; mouse key bindings in "hmouse-key.el".
|
|
42 ;;
|
|
43 ;; Using the Action Mouse Key to browse through and delete files from
|
|
44 ;; Dired listings is exceptionally nice, just as it is when reading mail.
|
|
45 ;;
|
|
46 ;; DESCRIP-END.
|
|
47
|
|
48 ;;; ************************************************************************
|
|
49 ;;; Public variables
|
|
50 ;;; ************************************************************************
|
|
51
|
|
52 (defvar hmouse-set-point-command nil
|
|
53 "*Command that sets point to mouse cursor position.")
|
|
54
|
|
55 (defvar action-key-default-function 'hui:menu
|
|
56 "*Symbol name of function run by the Action Key in an unspecified context.")
|
|
57
|
|
58 (defvar assist-key-default-function 'hkey-summarize
|
|
59 "*Symbol name of function run by the Assist Key in an unspecified context.")
|
|
60
|
|
61 ;;; ************************************************************************
|
|
62 ;;; Hyperbole context-sensitive keys dispatch table
|
|
63 ;;; ************************************************************************
|
|
64
|
|
65 (defvar hkey-value nil
|
|
66 "Communicates a value between a Smart Key predicate and its actions.")
|
|
67
|
|
68 (defvar hkey-alist
|
|
69 '(
|
|
70 ;;
|
|
71 ;; If click in the minibuffer and reading an argument,
|
|
72 ;; accept argument or give completion help.
|
|
73 ((and (> (minibuffer-depth) 0)
|
|
74 (eq (selected-window) (minibuffer-window))
|
|
75 (not (eq hargs:reading-p 'hmenu))) .
|
|
76 ((exit-minibuffer) . (smart-completion-help)))
|
|
77 ;;
|
|
78 ;; If reading a Hyperbole menu item or a Hyperbole completion-based
|
|
79 ;; argument, allow selection of an item at point.
|
|
80 ((if (> (minibuffer-depth) 0) (setq hkey-value (hargs:at-p))) .
|
|
81 ((hargs:select-p hkey-value) .
|
|
82 (hargs:select-p hkey-value 'assist)))
|
|
83 ;;
|
|
84 ((if (not (eobp))
|
70
|
85 (or (eolp) (if selective-display
|
|
86 (= (following-char) ?\^M)))) .
|
0
|
87 ((smart-scroll-up) . (smart-scroll-down)))
|
|
88 ;;
|
|
89 ((eq major-mode 'smart-menu-mode) .
|
|
90 ((smart-menu-select) . (smart-menu-help)))
|
|
91 ;;
|
|
92 ;; If on a Hyperbole button, perform action or give help.
|
|
93 ((if (fboundp 'hbut:at-p) (or (hbut:at-p) (hbut:label-p))) .
|
|
94 ((hui:hbut-act 'hbut:current) . (hui:hbut-help 'hbut:current)))
|
|
95 ;;
|
70
|
96 ;; The Smart Menu system provides menus within Emacs running on a dumb
|
|
97 ;; terminal. It is part of InfoDock and is not available separately.
|
0
|
98 ((and (fboundp 'smart-menu-choose-menu)
|
|
99 (setq hkey-value (and hkey-always-display-menu
|
|
100 (smart-menu-choose-menu)))
|
|
101 (not (and (get-buffer-window *smart-menu-buffer*)
|
|
102 (eq hkey-value *smart-menu-curr*)))) .
|
|
103 ((smart-menu hkey-value) .
|
|
104 (smart-menu hkey-value)))
|
|
105 ;;
|
|
106 ;;
|
|
107 ;; View minor mode
|
|
108 ((if (boundp 'view-minor-mode) view-minor-mode) .
|
|
109 ((cond ((last-line-p)
|
|
110 (view-quit))
|
|
111 ((pos-visible-in-window-p (point-max))
|
|
112 (goto-char (point-max)))
|
|
113 (t (scroll-up))) .
|
|
114 (scroll-down)))
|
|
115 ;;
|
|
116 ;; View major mode
|
|
117 ((eq major-mode 'view-mode) .
|
|
118 ((View-scroll-lines-forward) . (View-scroll-lines-backward)))
|
|
119 ;;
|
|
120 ((eq major-mode 'kotl-mode) .
|
|
121 ((kotl-mode:action-key) . (kotl-mode:help-key)))
|
|
122 ;;
|
70
|
123 ;; Support direct selection and viewing on in-memory relational databases.
|
|
124 ;; Rdb-mode has not been publicly released.
|
0
|
125 ;; It is not included with Hyperbole.
|
|
126 ((eq major-mode 'rdb-mode) . ((smart-rdb) . (smart-rdb-assist)))
|
|
127 ;;
|
|
128 ;; Restore window config and hide help buffer when click at buffer end.
|
|
129 ((if (= (point) (point-max)) (string-match "Help\\*$" (buffer-name))) .
|
|
130 ((hkey-help-hide) . (hkey-help-hide)))
|
|
131 ;;
|
70
|
132 ;; Support the OO-Browser, a part of InfoDock, XEmacs, and soon to be a
|
|
133 ;; part of Emacs.
|
|
134 ((or (br-in-browser) (eq major-mode 'br-mode)) .
|
|
135 ((smart-br-dispatch) . (smart-br-assist-dispatch)))
|
|
136 ;;
|
0
|
137 ((and (memq major-mode '(c-mode c++-c-mode))
|
70
|
138 buffer-file-name (setq hkey-value (smart-c-at-tag-p))) .
|
0
|
139 ((smart-c) . (smart-c nil 'next-tag)))
|
|
140 ;;
|
|
141 ((and (eq major-mode 'asm-mode)
|
70
|
142 buffer-file-name (setq hkey-value (smart-asm-at-tag-p))) .
|
0
|
143 ((smart-asm) . (smart-asm nil 'next-tag)))
|
|
144 ;;
|
|
145 ((if (smart-lisp-mode-p) (smart-lisp-at-tag-p)) .
|
|
146 ((smart-lisp) . (smart-lisp 'next-tag)))
|
|
147 ;;
|
|
148 ((and (eq major-mode 'c++-mode) buffer-file-name
|
|
149 ;; Don't use smart-c++-at-tag-p here since it will prevent #include
|
|
150 ;; lines from matching.
|
70
|
151 (setq hkey-value (smart-c-at-tag-p))) .
|
|
152 ( ;; Only fboundp if OO-Browser has been loaded.
|
|
153 (if (fboundp 'c++-to-definition)
|
|
154 (smart-c++-oobr) (smart-c++)) .
|
|
155 (if (fboundp 'c++-to-definition)
|
|
156 (smart-c++-oobr)
|
|
157 (smart-c++ nil 'next-tag))))
|
0
|
158 ;;
|
|
159 ((and (eq major-mode 'objc-mode) buffer-file-name
|
70
|
160 (setq hkey-value (smart-objc-at-tag-p))) .
|
|
161 ( ;; Only fboundp if OO-Browser has been loaded.
|
|
162 (if (fboundp 'objc-to-definition)
|
|
163 (smart-objc-oobr) (smart-objc)) .
|
|
164 (if (fboundp 'objc-to-definition)
|
|
165 (smart-objc-oobr)
|
|
166 (smart-objc nil 'next-tag))))
|
0
|
167 ;;
|
|
168 ((and (eq major-mode 'fortran-mode)
|
70
|
169 buffer-file-name (setq hkey-value (smart-fortran-at-tag-p))) .
|
0
|
170 ((smart-fortran) . (smart-fortran nil 'next-tag)))
|
|
171 ;;
|
|
172 ((eq major-mode 'occur-mode) .
|
|
173 ((occur-mode-goto-occurrence) . (occur-mode-goto-occurrence)))
|
|
174 ;;
|
|
175 ((eq major-mode 'moccur-mode) .
|
|
176 ((moccur-mode-goto-occurrence) . (moccur-mode-goto-occurrence)))
|
|
177 ;;
|
|
178 ((eq major-mode 'calendar-mode) .
|
|
179 ((smart-calendar) . (smart-calendar-assist)))
|
|
180 ;;
|
|
181 ((eq major-mode 'unix-apropos-mode) .
|
|
182 ((smart-apropos) . (smart-apropos-assist)))
|
|
183 ;;
|
|
184 ((eq major-mode 'outline-mode) .
|
|
185 ((smart-outline) . (smart-outline-assist)))
|
|
186 ;;
|
|
187 ((eq major-mode 'Info-mode) .
|
|
188 ((smart-info) . (smart-info-assist)))
|
|
189 ;;
|
|
190 ((if (boundp 'hmail:reader)
|
|
191 (or (eq major-mode hmail:reader)
|
|
192 (eq major-mode hmail:lister))) .
|
|
193 ((smart-hmail) . (smart-hmail-assist)))
|
|
194 ;;
|
|
195 ((eq major-mode 'gnus-group-mode)
|
|
196 (smart-gnus-group) . (smart-gnus-group-assist))
|
|
197 ;;
|
|
198 ((eq major-mode 'gnus-summary-mode)
|
|
199 (smart-gnus-summary) . (smart-gnus-summary-assist))
|
|
200 ;;
|
|
201 ((eq major-mode 'gnus-article-mode)
|
|
202 (smart-gnus-article) . (smart-gnus-article-assist))
|
|
203 ;;
|
|
204 ((eq major-mode 'Buffer-menu-mode) .
|
|
205 ((smart-buffer-menu) . (smart-buffer-menu-assist)))
|
|
206 ;;
|
|
207 ((eq major-mode 'dired-mode) .
|
|
208 ((smart-dired) . (smart-dired-assist)))
|
|
209 ;;
|
|
210 ((eq major-mode 'tar-mode) .
|
|
211 ((smart-tar) . (smart-tar-assist)))
|
|
212 ;;
|
|
213 ;; Follow references in man pages.
|
|
214 ((setq hkey-value (smart-man-entry-ref)) .
|
|
215 ((smart-man-display hkey-value) .
|
|
216 (smart-man-display hkey-value)))
|
|
217 ;;
|
|
218 ((eq major-mode 'w3-mode) .
|
|
219 ((w3-follow-link) . (w3-goto-last-buffer)))
|
|
220 ;;
|
|
221 ((if (boundp 'rolo-display-buffer)
|
|
222 (equal (buffer-name) rolo-display-buffer)) .
|
|
223 ((smart-wrolo) . (smart-wrolo-assist)))
|
|
224 ;;
|
|
225 ;; Gomoku game
|
|
226 ((eq major-mode 'gomoku-mode) .
|
|
227 ((gomoku-human-plays) . (gomoku-human-takes-back)))
|
|
228 ;;
|
|
229 ;; Outline minor mode is on and usable.
|
|
230 (selective-display .
|
|
231 ((smart-outline) . (smart-outline-assist)))
|
|
232 )
|
|
233 "Alist of predicates and form-conses for Action and Assist Keys.
|
|
234 When the Action or Assist Key is pressed, the first or second form,
|
|
235 respectively, associated with the first non-nil predicate is evaluated.")
|
|
236
|
|
237 ;;; ************************************************************************
|
|
238 ;;; driver code
|
|
239 ;;; ************************************************************************
|
|
240
|
|
241 ;; The following autoload is needed if another subsystem besides
|
|
242 ;; Hyperbole uses this mouse handling code.
|
|
243 (autoload 'var:append "hvar" "Append to a list variable." nil)
|
|
244
|
|
245 (require 'hargs)
|
|
246 (require 'hmouse-key)
|
|
247 (if hyperb:window-system
|
|
248 (progn
|
|
249 (defvar hmouse-alist hkey-alist
|
|
250 "Alist of predicates and form-conses for context-sensitive smart key mouse actions.
|
|
251 When the action-key or the assist-key is pressed, the first or
|
|
252 second form, respectively, associated with the first non-nil predicate is
|
|
253 evaluated.")
|
|
254 (load "hui-window")))
|
|
255
|
|
256 ;;; ************************************************************************
|
|
257 ;;; support code
|
|
258 ;;; ************************************************************************
|
|
259
|
|
260 ;; The 'load' line below loads any local Smart Key function definitions.
|
|
261 ;; The public distribution contains none. You may leave it commented out if
|
|
262 ;; you prefer.
|
|
263 ;; (load "smart-local" t)
|
|
264
|
|
265 ;;; ************************************************************************
|
|
266 ;;; Required Init functions
|
|
267 ;;; ************************************************************************
|
|
268
|
|
269 (defun first-line-p ()
|
|
270 "Returns true if point is on the first line of the buffer."
|
|
271 (save-excursion (beginning-of-line) (bobp)))
|
|
272
|
|
273 (defun last-line-p ()
|
|
274 "Returns true if point is on the last line of the buffer."
|
|
275 (save-excursion (end-of-line) (eobp)))
|
|
276
|
|
277 (defun smart-completion-help ()
|
|
278 "Offer completion help for current minibuffer argument, if any."
|
|
279 (if (where-is-internal 'minibuffer-completion-help (current-local-map))
|
|
280 (minibuffer-completion-help)))
|
|
281
|
|
282 (defun smart-symlink-expand (path)
|
|
283 "Returns referent for possible symbolic link, PATH."
|
|
284 (if (not (fboundp 'symlink-referent))
|
|
285 path
|
|
286 (let ((start 0) (len (length path)) (ref) (part))
|
|
287 (while (and (< start len) (setq part (string-match "/[^/]*" path start)))
|
|
288 (setq part (concat ref
|
|
289 (substring path start (setq start (match-end 0))))
|
|
290 ref (symlink-referent part)))
|
|
291 ref)))
|
|
292
|
|
293 ;;; ************************************************************************
|
|
294 ;;; smart-buffer-menu functions
|
|
295 ;;; ************************************************************************
|
|
296
|
|
297 (defun smart-buffer-menu (&optional in-browser)
|
|
298 "Uses a single key or mouse key to manipulate buffer-menu entries.
|
|
299
|
|
300 Invoked via a key press when in Buffer-menu-mode. It assumes that its
|
|
301 caller has already checked that the key was pressed in an appropriate buffer
|
|
302 and has moved the cursor there.
|
|
303
|
|
304 Optional non-nil IN-BROWSER indicates use within the OO-Browser.
|
|
305
|
|
306 If key is pressed:
|
|
307 (1) on the first column of an entry, the selected buffer is marked for
|
|
308 display;
|
|
309 (2) on the second column of an entry, the selected buffer is marked to be
|
|
310 saved;
|
|
311 (3) anywhere else within an entry line, all saves and deletes are done, and
|
|
312 selected buffers are displayed, including the one just clicked on (if
|
|
313 IN-BROWSER, only the selected buffer is displayed);
|
|
314 (4) on or after the last line in the buffer, all saves and deletes are done."
|
|
315
|
|
316 (interactive)
|
|
317 (cond ((last-line-p) (Buffer-menu-execute))
|
|
318 ((bolp) (Buffer-menu-mark))
|
|
319 ((save-excursion
|
|
320 (goto-char (1- (point)))
|
|
321 (bolp))
|
|
322 (Buffer-menu-save))
|
|
323 (in-browser (br-buffer-menu-select))
|
|
324 (t (Buffer-menu-select))))
|
|
325
|
|
326 (defun smart-buffer-menu-assist ()
|
|
327 "Uses a single assist-key or mouse assist-key to manipulate buffer-menu entries.
|
|
328
|
|
329 Invoked via an assist-key press when in Buffer-menu-mode. It assumes that its
|
|
330 caller has already checked that the assist-key was pressed in an appropriate
|
|
331 buffer and has moved the cursor there.
|
|
332
|
|
333 If assist-key is pressed:
|
|
334 (1) on the first or second column of an entry, the selected buffer is unmarked
|
|
335 for display and for saving or deletion;
|
|
336 (2) anywhere else within an entry line, the selected buffer is marked for
|
|
337 deletion;
|
|
338 (3) on or after the last line in the buffer, all display, save, and delete
|
|
339 marks on all entries are undone."
|
|
340
|
|
341 (interactive)
|
|
342 (cond ((last-line-p) (progn (list-buffers) (forward-line 3)))
|
|
343 ((bolp) (Buffer-menu-unmark))
|
|
344 ((save-excursion
|
|
345 (goto-char (1- (point)))
|
|
346 (bolp))
|
|
347 (Buffer-menu-unmark))
|
|
348 (t (Buffer-menu-delete))))
|
|
349
|
|
350 ;;; ************************************************************************
|
|
351 ;;; smart-calendar functions
|
|
352 ;;; ************************************************************************
|
|
353
|
|
354 (defun smart-calendar ()
|
|
355 "Uses a single key or mouse key to manipulate the scrolling calendar.
|
|
356
|
|
357 Invoked via a key press when in calendar-mode. It assumes that its
|
|
358 caller has already checked that the key was pressed in an appropriate buffer
|
|
359 and has moved the cursor there.
|
|
360
|
|
361 If key is pressed:
|
|
362 (1) at the end of the buffer, the calendar is scrolled forward 3 months;
|
|
363 (2) to the left of any dates on a calendar line, the calendar is scrolled
|
|
364 backward 3 months;
|
|
365 (3) on a date, the diary entries for the date, if any, are displayed."
|
|
366
|
|
367 (interactive)
|
|
368 (cond ((eobp) (calendar-cursor-to-nearest-date)
|
|
369 (scroll-calendar-left-three-months 1))
|
|
370 ((< (current-column) 5) (calendar-cursor-to-nearest-date)
|
|
371 (scroll-calendar-right-three-months 1))
|
|
372 (t (calendar-cursor-to-nearest-date)
|
|
373 (view-diary-entries 1))))
|
|
374
|
|
375 (defun smart-calendar-assist ()
|
|
376 "Uses a single assist-key or mouse assist-key to manipulate the scrolling calendar.
|
|
377
|
|
378 Invoked via an assist-key press when in calendar-mode. It assumes that its
|
|
379 caller has already checked that the assist-key was pressed in an appropriate
|
|
380 buffer and has moved the cursor there.
|
|
381
|
|
382 If assist-key is pressed:
|
|
383 (1) at the end of the buffer, the calendar is scrolled backward 3 months;
|
|
384 (2) to the left of any dates on a calendar line, the calendar is scrolled
|
|
385 forward 3 months;
|
|
386 (3) anywhere else, all dates with marking diary entries are marked in the
|
|
387 calendar window."
|
|
388
|
|
389 (interactive)
|
|
390 (cond ((eobp) (calendar-cursor-to-nearest-date)
|
|
391 (scroll-calendar-right-three-months 1))
|
|
392 ((< (current-column) 5) (calendar-cursor-to-nearest-date)
|
|
393 (scroll-calendar-left-three-months 1))
|
|
394 (t (mark-diary-entries))))
|
|
395
|
|
396
|
|
397 ;;; ************************************************************************
|
|
398 ;;; smart-dired functions
|
|
399 ;;; ************************************************************************
|
|
400
|
|
401 (defun smart-dired ()
|
|
402 "Uses a single key or mouse key to manipulate directory entries.
|
|
403
|
|
404 Invoked via a key press when in dired-mode. It assumes that its
|
|
405 caller has already checked that the key was pressed in an appropriate buffer
|
|
406 and has moved the cursor there.
|
|
407
|
|
408 If key is pressed:
|
|
409 (1) within an entry line, the selected file/directory is displayed for
|
|
410 editing in the other window;
|
|
411 (2) on or after the last line in the buffer, if any deletes are to be
|
|
412 performed, they are executed after user verification, otherwise, this
|
|
413 dired invocation is quit."
|
|
414
|
|
415 (interactive)
|
|
416 (cond ((last-line-p)
|
|
417 (let (flagged)
|
|
418 (save-excursion
|
|
419 (goto-char 1)
|
|
420 (setq flagged (re-search-forward "^D" nil t)))
|
|
421 (if flagged
|
|
422 (cond ((fboundp 'dired-do-deletions)
|
|
423 (dired-do-deletions))
|
|
424 ;; For Tree-dired compatibility
|
|
425 ((fboundp 'dired-do-flagged-delete)
|
|
426 (dired-do-flagged-delete))
|
|
427 (t (error "(smart-dired): No Dired expunge function.")))
|
|
428 (dired-quit))))
|
70
|
429 (t (hpath:find-other-window (dired-get-filename)))))
|
0
|
430
|
|
431 (defun smart-dired-assist ()
|
|
432 "Uses a single assist-key or mouse assist-key to manipulate directory entries.
|
|
433
|
|
434 Invoked via an assist-key press when in dired-mode. It assumes that its
|
|
435 caller has already checked that the assist-key was pressed in an appropriate
|
|
436 buffer and has moved the cursor there.
|
|
437
|
|
438 If assist-key is pressed:
|
|
439 (1) on a '~' character, all backup files in the directory are marked for
|
|
440 deletion;
|
|
441 (2) on a '#' character, all auto-save files in the directory are marked for
|
|
442 deletion;
|
|
443 (3) anywhere else within an entry line, the current entry is marked for
|
|
444 deletion;
|
|
445 (4) on or after the last line in the buffer, all delete marks on all entries
|
|
446 are undone."
|
|
447
|
|
448 (interactive)
|
|
449 (cond ((last-line-p)
|
|
450 (dired-unflag (- (count-lines (point-min) (point-max))))
|
|
451 (goto-char (point-max)))
|
|
452 ((looking-at "~") (dired-flag-backup-files))
|
|
453 ((looking-at "#") (dired-flag-auto-save-files))
|
70
|
454 (t (dired-flag-file-deleted 1))))
|
0
|
455
|
|
456 ;;; ************************************************************************
|
|
457 ;;; smart-gnus functions
|
|
458 ;;; ************************************************************************
|
|
459
|
|
460 (defun smart-gnus-group ()
|
|
461 "Uses a key or mouse key to move through Gnus Newsgroup listings.
|
|
462 Invoked via a key press when in gnus-group-mode. It assumes that its caller
|
|
463 has already checked that the key was pressed in an appropriate buffer and has
|
|
464 moved the cursor to the selected buffer.
|
|
465
|
|
466 If key is pressed within:
|
|
467 (1) a GNUS-GROUP line, that newsgroup is read;
|
|
468 (2) to the left of any GNUS-GROUP line, on any of the whitespace, the current
|
|
469 group is unsubscribed or resubscribed;
|
|
470 (3) at the end of the GNUS-GROUP buffer, after all lines, checks for new
|
|
471 news."
|
|
472
|
|
473 (interactive)
|
|
474 (cond ((last-line-p) (gnus-group-get-new-news))
|
|
475 ((progn (skip-chars-backward " U") (bolp))
|
|
476 (gnus-group-unsubscribe-current-group))
|
|
477 (t (gnus-group-read-group nil))))
|
|
478
|
|
479 (defun smart-gnus-group-assist ()
|
|
480 "Uses an assist-key or assist-mouse key to move through Gnus Newsgroup listings.
|
|
481 Invoked via an assist-key press when in gnus-group-mode. It assumes that its
|
|
482 caller has already checked that the key was pressed in an appropriate buffer
|
|
483 and has moved the cursor to the selected buffer.
|
|
484
|
|
485 If key is pressed within:
|
|
486 (1) a GNUS-GROUP line, that newsgroup is read;
|
|
487 (2) to the left of any GNUS-GROUP line, on any of the whitespace, the user is
|
|
488 prompted for a group name to subscribe or unsubscribe to;
|
|
489 (3) at the end of the GNUS-GROUP buffer, after all lines, quits from the
|
|
490 newsreader."
|
|
491
|
|
492 (interactive)
|
|
493 (cond ((last-line-p) (gnus-group-exit))
|
|
494 ((progn (skip-chars-backward " U") (bolp))
|
|
495 (call-interactively 'gnus-group-unsubscribe-group))
|
|
496 (t (gnus-group-read-group nil))))
|
|
497
|
|
498 (defun smart-gnus-summary ()
|
|
499 "Uses a key or mouse key to move through Gnus News article listings.
|
|
500 Invoked via a key press when in gnus-summary-mode. It assumes that its caller
|
|
501 has already checked that the key was pressed in an appropriate buffer and has
|
|
502 moved the cursor to the selected buffer.
|
|
503
|
|
504 If key is pressed within:
|
|
505 (1) to the left of an article number, that article is marked as unread;
|
|
506 (2) a GNUS-SUMMARY line, that article is read, marked deleted, and scrolled
|
|
507 forward;
|
|
508 (3) at the end of the GNUS-SUMMARY buffer, the next undeleted article
|
|
509 is read or the next group is entered."
|
|
510
|
|
511 (interactive)
|
|
512 (cond ((last-line-p)
|
|
513 (if gnus-current-article
|
|
514 (progn (goto-char (point-min))
|
|
515 (re-search-forward
|
|
516 (format "^.[ ]+%d:" gnus-current-article) nil t)
|
|
517 (setq this-command 'gnus-summary-next-page)
|
|
518 (call-interactively 'gnus-summary-next-page))
|
|
519 (goto-char (point-min))
|
|
520 (setq this-command 'gnus-summary-first-unread-article)
|
|
521 (call-interactively 'gnus-summary-first-unread-article)))
|
|
522 ((save-excursion (skip-chars-backward " D") (bolp))
|
|
523 (gnus-summary-mark-as-unread-forward 1))
|
|
524 (t (setq this-command 'gnus-summary-next-page)
|
|
525 (call-interactively 'gnus-summary-next-page))))
|
|
526
|
|
527 (defun smart-gnus-summary-assist ()
|
|
528 "Uses an assist-key or assist-mouse key to move through Gnus News articles.
|
|
529 Invoked via an assist-key press when in gnus-summary-mode. It assumes that its
|
|
530 caller has already checked that the key was pressed in an appropriate buffer
|
|
531 and has moved the cursor to the selected buffer.
|
|
532
|
|
533 If key is pressed within:
|
|
534 (1) to the left of an article number, that article is marked as unread;
|
|
535 (2) a GNUS-SUMMARY line, that article is read and scrolled backward;
|
|
536 (3) at the end of the GNUS-SUMMARY buffer, the summary is exited, the user
|
|
537 is returned to group mode."
|
|
538
|
|
539 (interactive)
|
|
540 (cond ((last-line-p)
|
|
541 (setq this-command 'gnus-summary-prev-page)
|
|
542 (call-interactively 'gnus-summary-exit))
|
|
543 ((save-excursion (skip-chars-backward " D") (bolp))
|
|
544 (gnus-summary-mark-as-unread-backward 1))
|
|
545 (t (setq this-command 'gnus-summary-prev-page)
|
|
546 (call-interactively 'gnus-summary-prev-page))))
|
|
547
|
|
548 (defun smart-gnus-article ()
|
|
549 "Uses a key or mouse key to move through Gnus netnews articles.
|
|
550
|
|
551 Invoked via a key press when in gnus-article-mode.
|
|
552 It assumes that its caller has already checked that the key was pressed in an
|
|
553 appropriate buffer and has moved the cursor to the selected buffer.
|
|
554
|
|
555 If key is pressed within:
|
|
556 (1) the first line or end of an article, the next unread message is displayed;
|
|
557 (2) the first line of an Info cross reference, the reference is followed;
|
|
558 (3) anywhere else, the window is scrolled up a windowful."
|
|
559 (interactive)
|
|
560 (cond ((or (last-line-p) (and (not (eolp)) (first-line-p)))
|
|
561 (unwind-protect
|
|
562 (progn (set-buffer gnus-summary-buffer)
|
|
563 (setq this-command 'gnus-summary-next-unread-article)
|
|
564 (gnus-summary-next-unread-article)
|
|
565 (gnus-summary-goto-subject gnus-current-article)
|
|
566 )
|
|
567 (let ((artic (get-buffer-window gnus-article-buffer)))
|
|
568 (if artic (select-window artic)))))
|
|
569 ((and (not (eolp)) (Info-handle-in-note)))
|
|
570 (t (smart-scroll-up))))
|
|
571
|
|
572 (defun smart-gnus-article-assist ()
|
|
573 "Uses an assist-key or mouse assist-key to move through Gnus netnews articles.
|
|
574
|
|
575 Invoked via an assist-key press when in gnus-article-mode.
|
|
576 It assumes that its caller has already checked that the assist-key was pressed in
|
|
577 an appropriate buffer and has moved the cursor to the selected buffer.
|
|
578
|
|
579 If assist-key is pressed within:
|
|
580 (1) the first line or end of an article, the previous message is displayed;
|
|
581 (2) the first line of an Info cross reference, the reference is followed;
|
|
582 (3) anywhere else, the window is scrolled down a windowful."
|
|
583 (interactive)
|
|
584 (cond ((or (last-line-p) (and (not (eolp)) (first-line-p)))
|
|
585 (unwind-protect
|
|
586 (progn (set-buffer gnus-summary-buffer)
|
|
587 (setq this-command 'gnus-summary-prev-article)
|
|
588 (gnus-summary-prev-article nil)
|
|
589 (gnus-summary-goto-subject gnus-current-article)
|
|
590 )
|
|
591 (let ((artic (get-buffer-window gnus-summary-buffer)))
|
|
592 (if artic (select-window artic)))))
|
|
593 ((and (not (eolp)) (Info-handle-in-note)))
|
|
594 (t (smart-scroll-down))))
|
|
595
|
|
596 ;;; ************************************************************************
|
|
597 ;;; smart-hmail functions
|
|
598 ;;; ************************************************************************
|
|
599
|
|
600 (defun smart-hmail ()
|
|
601 "Uses a key or mouse key to move through e-mail messages and summaries.
|
|
602
|
|
603 Invoked via a key press when in hmail:reader or hmail:lister mode.
|
|
604 It assumes that its caller has already checked that the key was pressed in an
|
|
605 appropriate buffer and has moved the cursor to the selected buffer.
|
|
606
|
|
607 If key is pressed within:
|
|
608 (1) a msg buffer, within the first line or at the end of a message,
|
|
609 the next undeleted message is displayed;
|
|
610 (2) a msg buffer within the first line of an Info cross reference, the
|
|
611 reference is followed;
|
|
612 (3) anywhere else in a msg buffer, the window is scrolled up a windowful;
|
|
613 (4) a msg summary buffer on a header entry, the message corresponding to
|
|
614 the header is displayed in the msg window;
|
|
615 (5) a msg summary buffer, on or after the last line, the messages marked
|
|
616 for deletion are expunged."
|
|
617
|
|
618 (interactive)
|
|
619 ;;
|
|
620 ;; Branch on buffer type
|
|
621 ;;
|
|
622 (cond ((eq major-mode hmail:reader)
|
|
623 (cond ((or (last-line-p) (and (not (eolp)) (first-line-p)))
|
|
624 (rmail:msg-next))
|
|
625 ((and (not (eolp)) (Info-handle-in-note)))
|
|
626 ((smart-scroll-up))))
|
|
627 ;;
|
|
628 ;; Assume are in msg summary buffer
|
|
629 ;;
|
|
630 ((last-line-p) (lmail:expunge))
|
|
631 (t (lmail:goto))))
|
|
632
|
|
633 (defun smart-hmail-assist ()
|
|
634 "Uses an assist key or mouse key to move through e-mail messages and summaries.
|
|
635
|
|
636 Invoked via an assist key press when in hmail:reader or hmail:lister mode.
|
|
637 It assumes that its caller has already checked that the assist-key was pressed in
|
|
638 an appropriate buffer and has moved the cursor to the selected buffer.
|
|
639
|
|
640 If assist-key is pressed within:
|
|
641 (1) a msg buffer, within the first line or at the end of a message,
|
|
642 the previous undeleted message is displayed;
|
|
643 (2) a msg buffer within the first line of an Info cross reference, the
|
|
644 reference is followed;
|
|
645 (3) anywhere else in a msg buffer, the window is scrolled down a windowful;
|
|
646 (4) a msg summary buffer on a header entry, the message corresponding to
|
|
647 the header is marked as deleted;
|
|
648 (5) a msg summary buffer, on or after the last line, all messages are
|
|
649 marked undeleted."
|
|
650
|
|
651 (interactive)
|
|
652 ;;
|
|
653 ;; Branch on buffer type
|
|
654 ;;
|
|
655 (cond ((eq major-mode hmail:reader)
|
|
656 (cond ((or (last-line-p) (and (not (eolp)) (first-line-p)))
|
|
657 (rmail:msg-prev))
|
|
658 ((and (not (eolp)) (Info-handle-in-note)))
|
|
659 ((smart-scroll-down))))
|
|
660 ;;
|
|
661 ;; Assume are in msg summary buffer
|
|
662 ;;
|
|
663 ((last-line-p) (lmail:undelete-all))
|
|
664 (t (lmail:delete))))
|
|
665
|
|
666
|
|
667 ;;; ************************************************************************
|
|
668 ;;; smart-info functions
|
|
669 ;;; ************************************************************************
|
|
670 ;;; Autoloaded in "hyperbole.el".
|
|
671
|
|
672 ;;; ************************************************************************
|
|
673 ;;; smart-man functions
|
|
674 ;;; ************************************************************************
|
|
675
|
|
676 ;; "unix-apropos.el" is a publicly available Emacs Lisp package that
|
|
677 ;; allows man page browsing from apropos listings. "superman.el" is a
|
|
678 ;; newer, much more complete package that you would probably prefer at
|
|
679 ;; this point, but there is no Smart Key apropos support for it. There
|
|
680 ;; is smart key support within the man page buffers it produces, however.
|
|
681 ;;
|
|
682
|
|
683 (defun smart-apropos ()
|
|
684 "Moves through UNIX man apropos listings by using one key or mouse key.
|
|
685
|
|
686 Invoked via a key press when in unix-apropos-mode. It assumes that
|
|
687 its caller has already checked that the key was pressed in an appropriate
|
|
688 buffer and has moved the cursor to the selected buffer.
|
|
689
|
|
690 If key is pressed:
|
|
691 (1) on a UNIX man apropos entry, the man page for that entry is displayed in
|
|
692 another window;
|
|
693 (2) on or after the last line, the buffer in the other window is scrolled up
|
|
694 a windowful."
|
|
695
|
|
696 (interactive)
|
|
697 (if (last-line-p)
|
|
698 (scroll-other-window)
|
|
699 (unix-apropos-get-man)))
|
|
700
|
|
701 (defun smart-apropos-assist ()
|
|
702 "Moves through UNIX man apropos listings by using one assist-key or mouse assist-key.
|
|
703
|
|
704 Invoked via an assist-key press when in unix-apropos-mode. It assumes that
|
|
705 its caller has already checked that the assist-key was pressed in an appropriate
|
|
706 buffer and has moved the cursor to the selected buffer.
|
|
707
|
|
708 If assist-key is pressed:
|
|
709 (1) on a UNIX man apropos entry, the man page for that entry is displayed in
|
|
710 another window;
|
|
711 (2) on or after the last line, the buffer in the other window is scrolled down
|
|
712 a windowful."
|
|
713
|
|
714 (interactive)
|
|
715 (if (last-line-p)
|
|
716 (scroll-other-window (- 3 (window-height)))
|
|
717 (unix-apropos-get-man)))
|
|
718
|
|
719 (defun smart-man-display (lisp-form)
|
|
720 "Evaluates LISP-FORM returned from 'smart-man-entry-ref' to display a man page."
|
|
721 (eval lisp-form))
|
|
722
|
|
723 (defun smart-man-entry-ref ()
|
|
724 "Returns form which displays referenced manual entry that point is on or nil.
|
|
725 Handles references in sections: NAME, SEE ALSO, or PACKAGES USED. Also can
|
|
726 display C routine definitions selected in a man page, see
|
|
727 'smart-man-c-routine-ref'.
|
|
728
|
|
729 Man page buffer must either have an attached file or else a `man-path'
|
|
730 local variable containing its pathname."
|
|
731 (interactive)
|
|
732 (let ((ref ""))
|
|
733 (if (not (or (if (string-match "Manual Entry\\|\\*man "
|
|
734 (buffer-name (current-buffer)))
|
|
735 (progn (and (boundp 'man-path) man-path
|
|
736 (setq ref (smart-symlink-expand man-path)))
|
|
737 t))
|
|
738 (if buffer-file-name
|
|
739 (string-match "/man/" (setq ref (smart-symlink-expand
|
|
740 buffer-file-name))))))
|
|
741 (setq ref nil)
|
|
742 (or (setq ref (or (smart-man-file-ref)
|
|
743 (smart-man-c-routine-ref)))
|
|
744 (save-excursion
|
|
745 (let ((opoint (point))
|
|
746 (case-fold-search))
|
|
747 (and
|
|
748 (re-search-backward "^[.A-Z]" nil t)
|
|
749 (looking-at
|
|
750 "\\(\\.SH[ \t]+\\)?\\(SEE ALSO\\|NAME\\|PACKAGES USED\\)")
|
|
751 (progn (goto-char opoint)
|
|
752 (skip-chars-backward "-_a-zA-Z0-9?.(")
|
|
753 (let ((start (point)))
|
|
754 (skip-chars-forward "-_a-zA-Z0-9?.()")
|
|
755 (setq ref (buffer-substring start (point)))
|
|
756 ;; Leave only one char within ref parens
|
|
757 (if ref
|
|
758 (if (string-match "(\\(.\\)\\(.+\\))" ref)
|
|
759 (setq ref (concat (substring ref 0 (match-end 1))
|
|
760 "\)"))))
|
|
761 )))))))
|
|
762 (cond ((equal ref "") nil)
|
|
763 ((stringp ref) (list 'manual-entry ref))
|
|
764 (t ref))))
|
|
765
|
|
766 (defun smart-man-c-routine-ref ()
|
|
767 "Returns form to jump to def of C function whose name is at point, if any.
|
|
768 Valid sections within the man page are: ROUTINES, MACROS or FUNCTIONS.
|
|
769 Uses (smart-tags-file) function to determine etags file from which to
|
|
770 locate the definition.
|
|
771
|
|
772 Returns etags file name if point is on an identifier in the appropriate
|
|
773 section and the jump is done, otherwise, returns nil."
|
|
774 (let ((ref)
|
|
775 (opoint (point))
|
|
776 (case-fold-search))
|
|
777 (save-excursion
|
|
778 (and (re-search-backward "^[.A-Z]" nil t)
|
|
779 (looking-at "^\\(FUNCTIONS\\|ROUTINES\\|MACROS\\)[ \t\n]")
|
|
780 (progn (goto-char opoint)
|
|
781 (skip-chars-backward "_~<>:a-zA-Z0-9(")
|
|
782 (if (or (looking-at "\\([_~<>:a-zA-Z0-9]+\\)[ \t\n]*(")
|
|
783 (looking-at "\\([_~<:A-Z][_<>:A-Z0-9]+\\)"))
|
|
784 (setq ref (buffer-substring
|
|
785 (match-beginning 1) (match-end 1))
|
|
786 )))))
|
|
787 (if ref
|
|
788 (let ((tags-file-name
|
|
789 (smart-tags-file (if (and (boundp 'man-path) man-path)
|
|
790 man-path
|
|
791 default-directory))))
|
|
792 (and (file-exists-p tags-file-name)
|
|
793 (file-readable-p tags-file-name)
|
|
794 (list 'let (list (list 'tags-file-name tags-file-name))
|
|
795 (list (if (br-in-browser)
|
|
796 'find-tag 'find-tag-other-window)
|
|
797 ref)))))))
|
|
798
|
|
799 (defun smart-man-file-ref ()
|
|
800 "Returns form to eval to display file whose name point is on, within a FILES man page section.
|
|
801 If not on a file name, returns nil."
|
|
802 (let ((ref)
|
|
803 (opoint (point))
|
|
804 (case-fold-search))
|
|
805 (save-excursion
|
|
806 (and (re-search-backward "^[.A-Z]" nil t)
|
|
807 (looking-at "^FILES[ \t\n]")
|
|
808 (progn (goto-char opoint)
|
|
809 (skip-chars-backward "^ \t")
|
|
810 (if (looking-at "/[^ \t\n]+")
|
|
811 (setq ref (buffer-substring
|
|
812 (match-beginning 0) (match-end 0))
|
|
813 )))))
|
|
814 (if ref
|
|
815 (list (if (br-in-browser)
|
|
816 'find-file 'find-file-other-window)
|
|
817 ref))))
|
|
818
|
|
819 ;;; ************************************************************************
|
|
820 ;;; smart-outline functions
|
|
821 ;;; ************************************************************************
|
|
822
|
|
823 ;; The functions in this section require InfoDock's version of outline.el
|
|
824 ;; in order to work properly.
|
|
825
|
|
826 (defvar smart-outline-cut nil
|
|
827 "Non-nil means outline region was cut and is ready to be pasted at point.")
|
|
828
|
|
829 (let ((proc
|
|
830 '((lambda ()
|
|
831 (make-local-variable 'smart-outline-cut)
|
|
832 ;; Non-nil means outline region was cut and is available to be
|
|
833 ;; pasted at point.
|
|
834 (setq smart-outline-cut nil)
|
|
835 ))))
|
|
836 (if (boundp 'outline-mode-map)
|
|
837 (eval proc)
|
|
838 (var:append 'outline-mode-hook proc)))
|
|
839
|
|
840 (defun smart-outline ()
|
|
841 "Collapses, expands, and moves outline entries.
|
|
842 Invoked via a key press when in outline-mode. It assumes that
|
|
843 its caller has already checked that the key was pressed in an appropriate
|
|
844 buffer and has moved the cursor to the selected buffer.
|
|
845
|
|
846 If key is pressed:
|
|
847 (1) after an outline heading has been cut via the Action Key, then paste the
|
|
848 cut heading at point;
|
|
849 (2) at the end of buffer, show all buffer text
|
|
850 (3) at the beginning of a heading line, cut the headings subtree from the
|
|
851 buffer;
|
|
852 (4) on a header line but not at the beginning or end, if headings subtree is
|
|
853 hidden then show it, otherwise hide it;
|
|
854 (5) anywhere else, scroll up a windowful."
|
|
855
|
|
856 (interactive)
|
|
857 (cond (smart-outline-cut
|
|
858 (setq smart-outline-cut nil) (yank))
|
|
859 ((eobp) (show-all))
|
|
860 ((and (bolp) (looking-at outline-regexp))
|
|
861 (setq smart-outline-cut t)
|
|
862 (kill-region
|
|
863 (point)
|
|
864 (or (outline-get-next-sibling)
|
|
865 ;; Skip past start of current entry
|
|
866 (progn (re-search-forward outline-regexp nil t)
|
|
867 (smart-outline-to-entry-end t (outline-level))))))
|
|
868
|
|
869 ((or (eolp) (zerop (save-excursion (beginning-of-line)
|
|
870 (outline-level))))
|
|
871 (smart-scroll-up))
|
|
872 ;; On an outline header line but not at the start/end of line.
|
|
873 ((smart-outline-subtree-hidden-p)
|
|
874 (show-subtree))
|
|
875 (t (hide-subtree))))
|
|
876
|
|
877
|
|
878 (defun smart-outline-assist ()
|
|
879 "Collapses, expands, and moves outline entries.
|
|
880 Invoked via an assist-key press when in outline-mode. It assumes that
|
|
881 its caller has already checked that the assist-key was pressed in an appropriate
|
|
882 buffer and has moved the cursor to the selected buffer.
|
|
883
|
|
884 If assist-key is pressed:
|
|
885 (1) after an outline heading has been cut via the action-key, allow multiple
|
|
886 pastes throughout the buffer (last paste should be done with the Action Key,
|
|
887 not the Assist Key);
|
|
888 (2) at the end of buffer, hide all bodies in buffer;
|
|
889 (3) at the beginning of a heading line, cut the current heading (sans
|
|
890 subtree) from the buffer;
|
|
891 (4) on a header line but not at the beginning or end, if heading body is
|
|
892 hidden then show it, otherwise hide it;
|
|
893 (5) anywhere else, scroll down a windowful."
|
|
894
|
|
895 (interactive)
|
|
896 (cond (smart-outline-cut (yank))
|
|
897 ((eobp) (hide-body ))
|
|
898 ((and (bolp) (looking-at outline-regexp))
|
|
899 (setq smart-outline-cut t)
|
|
900 (kill-region (point)
|
|
901 ;; Skip past start of current entry
|
|
902 (progn (re-search-forward outline-regexp nil t)
|
|
903 (smart-outline-to-entry-end
|
|
904 nil (outline-level)))))
|
|
905 ((or (eolp) (zerop (save-excursion (beginning-of-line)
|
|
906 (outline-level))))
|
|
907 (smart-scroll-down))
|
|
908 ;; On an outline header line but not at the start/end of line.
|
|
909 ((smart-outline-subtree-hidden-p)
|
|
910 (show-entry))
|
|
911 (t (hide-entry))))
|
|
912
|
|
913 (defun smart-outline-to-entry-end
|
|
914 (&optional include-sub-entries curr-entry-level)
|
|
915 "Goes to end of whole entry if optional INCLUDE-SUB-ENTRIES is non-nil.
|
|
916 CURR-ENTRY-LEVEL is an integer representing the length of the current level
|
|
917 string which matched to 'outline-regexp'. If INCLUDE-SUB-ENTRIES is nil,
|
|
918 CURR-ENTRY-LEVEL is not needed."
|
|
919 (let (next-entry-exists)
|
|
920 (while (and (setq next-entry-exists
|
|
921 (re-search-forward outline-regexp nil t))
|
|
922 include-sub-entries
|
|
923 (save-excursion
|
|
924 (beginning-of-line)
|
|
925 (> (outline-level)
|
|
926 curr-entry-level))))
|
|
927 (if next-entry-exists
|
|
928 (progn (beginning-of-line) (point))
|
|
929 (goto-char (point-max)))))
|
|
930
|
|
931 (defun smart-outline-subtree-hidden-p ()
|
|
932 "Returns t if at least initial subtree of heading is hidden, else nil."
|
|
933 (save-excursion
|
|
934 (if (re-search-forward "[\n\^M]" nil t) (= (preceding-char) ?\^M))))
|
|
935
|
|
936 ;;; ************************************************************************
|
|
937 ;;; smart-tar functions
|
|
938 ;;; ************************************************************************
|
|
939
|
|
940 (defun smart-tar ()
|
|
941 "Uses a single key or mouse key to manipulate tar file entries.
|
|
942
|
|
943 Invoked via a key press when in tar-mode. It assumes that its
|
|
944 caller has already checked that the key was pressed in an appropriate buffer
|
|
945 and has moved the cursor there.
|
|
946
|
|
947 If key is pressed:
|
|
948 (1) within an entry line, the selected file/directory is displayed for
|
|
949 editing in the other window;
|
|
950 (2) on or after the last line in the buffer, if any deletes are to be
|
|
951 performed, they are executed after user verification, otherwise, this
|
|
952 tar file browser is quit."
|
|
953
|
|
954 (interactive)
|
|
955 (cond ((last-line-p)
|
|
956 (let (flagged)
|
|
957 (save-excursion
|
|
958 (goto-char 1)
|
|
959 (setq flagged (re-search-forward "^D" nil t)))
|
|
960 (if flagged
|
|
961 (tar-expunge)
|
|
962 (kill-buffer nil))))
|
|
963 (t (tar-extract-other-window))))
|
|
964
|
|
965 (defun smart-tar-assist ()
|
|
966 "Uses a single assist-key or mouse assist-key to manipulate tar file entries.
|
|
967
|
|
968 Invoked via an assist-key press when in dired-mode. It assumes that its
|
|
969 caller has already checked that the assist-key was pressed in an appropriate
|
|
970 buffer and has moved the cursor there.
|
|
971
|
|
972 If assist-key is pressed:
|
|
973 (1) on an entry line, the current entry is marked for deletion;
|
|
974 (2) on or after the last line in the buffer, all delete marks on all entries
|
|
975 are undone."
|
|
976
|
|
977 (interactive)
|
|
978 (cond ((last-line-p)
|
|
979 (tar-unflag (- (count-lines (point-min) (point-max))))
|
|
980 (goto-char (point-max)))
|
|
981 (t (tar-flag-deleted 1))))
|
|
982
|
|
983 ;;; ************************************************************************
|
|
984 ;;; smart-wrolo functions
|
|
985 ;;; ************************************************************************
|
|
986
|
|
987 (defun smart-wrolo ()
|
|
988 "In wrolo match buffer, edits current entry.
|
|
989 Uses one key or mouse key.
|
|
990
|
|
991 Invoked via a key press when in the 'rolo-display-buffer'. It assumes that
|
|
992 its caller has already checked that the key was pressed in an appropriate
|
|
993 buffer and has moved the cursor to the selected buffer."
|
|
994 (interactive)
|
|
995 (rolo-edit-entry))
|
|
996
|
|
997 (fset 'smart-wrolo-assist 'smart-wrolo)
|
|
998
|
|
999 (provide 'hui-mouse)
|