123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %
- % Browser-Support.SL - General Browser Support
- %
- % Author: Alan Snyder
- % Hewlett-Packard/CRC
- % Date: 18 October 1982
- % Revised: 3 February 1983
- %
- % 3-Feb-83 Alan Snyder
- % Revised to use Browser objects.
- %
- % This file contains support functions for browsers, such as the Buffer
- % Browser and DIRED. A browser is a buffer that displays a set of items,
- % one item per line, and allows the individual items to be manipulated.
- %
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- (compiletime (load numeric-operators))
- (on fast-integers)
- % External variables:
- (fluid '(
- nmode-current-buffer
- nmode-current-window
- nmode-command-argument
- nmode-command-argument-given
- ))
- % Global options:
- (fluid '(
- browser-split-screen
- ))
- (setf browser-split-screen NIL)
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- % General Browser Support Functions
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- (de browser-enter (b)
- % Start up a browser using the buffer B.
- (=> b set-previous-buffer nmode-current-buffer)
- (let ((wp (nmode-window-position)))
- (=> b put 'window-status wp)
- (if browser-split-screen
- (if (eq wp 'bottom) (nmode-switch-windows))
- (nmode-1-window)
- ))
- (buffer-select b)
- )
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- % Browser commands: attach these to keys in your browser mode
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- (de browser-kill-and-exit-command ()
- (browser-kill-deleted-items-command)
- (browser-exit-command)
- )
- (de browser-exit-command ()
- (let ((ws (=> nmode-current-buffer get 'window-status))
- (browser (=> nmode-current-buffer get 'browser))
- )
- (window-kill-buffer)
- (nmode-set-window-position ws)
- (=> browser exit)
- ))
-
- (de browser-delete-command ()
- % Mark items as 'deleted'.
- (browser-do-repeated-command 'delete-item () nil)
- )
- (de browser-undelete-command ()
- % Mark items as not 'deleted'.
- (browser-do-repeated-command 'undelete-item () nil)
- )
-
- (de browser-undelete-backwards-command ()
- % Mark items as not 'deleted'.
- (setf nmode-command-argument (- nmode-command-argument))
- (browser-do-repeated-command 'undelete-item () nil)
- )
-
- (de browser-kill-command ()
- % Kill items.
- (browser-do-repeated-command 'kill-item () t)
- )
- (de browser-ignore-command ()
- % Ignore items: filter them out.
- (browser-do-repeated-command 'ignore-item () t)
- )
-
- (de browser-view-command ()
- % View the current item.
- (let* ((use-other (xor browser-split-screen nmode-command-argument-given))
- (w (if use-other (nmode-other-window) nmode-current-window))
- )
- (if (browser-view-item w)
- (if use-other
- (nmode-2-windows) % display the other window
- (set-message "C-M-L returns to browser.")
- )
- (Ding)
- )))
- (de browser-edit-command ()
- % Edit the current item.
- (let* ((use-other (xor browser-split-screen nmode-command-argument-given))
- (w (if use-other (nmode-other-window) nmode-current-window))
- )
- (if (browser-view-item w)
- (cond (use-other
- (nmode-2-windows) % display the other window
- (nmode-select-window w)
- (set-message "C-X O returns to browser.")
- )
- (t
- (set-message "C-M-L returns to browser.")
- ))
- (Ding)
- )))
- (de browser-kill-deleted-items-command ()
- (let ((browser (=> nmode-current-buffer get 'browser)))
- (=> browser kill-deleted-items)
- ))
- (de browser-undo-filter-command ()
- (let* ((browser (=> nmode-current-buffer get 'browser))
- (filter (=> browser undo-filter))
- )
- (if filter
- (set-prompt (bldmsg "Application of %w undone." filter))
- (nmode-error "No filters have been applied to create this list.")
- )))
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- % Browser functions: use these in browser commands
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- (de browser-sort (prompt sorter)
- (let ((browser (=> nmode-current-buffer get 'browser)))
- (=> browser sort sorter)
- (write-prompt prompt)
- ))
- (de browser-view-item (w)
- % View the current item in the specified window. Return T if successful,
- % NIL otherwise.
- (let* ((browser (=> nmode-current-buffer get 'browser))
- (buffer (=> browser view-item))
- )
- (when buffer
- (=> buffer set-previous-buffer nmode-current-buffer)
- (window-select-buffer w buffer)
- T
- )))
- (de browser-do-repeated-command (msg args removes?)
- % Perform a browser command that takes a signed numeric argument to mean
- % a repetition count. On each iteration, the browser is sent
- % the specified message with the specified arguments. If REMOVES? is
- % true, then the browser operation may remove the current item and
- % it will return true if it does.
- (let ((browser (=> nmode-current-buffer get 'browser)))
- (if (> nmode-command-argument 0)
- (for (from i 1 nmode-command-argument)
- (do (when (not (=> browser current-item))
- (Ding) (exit))
- (if (not (and (lexpr-send browser msg args) removes?))
- (move-to-next-line)
- )))
- (for (from i 1 (- nmode-command-argument))
- (do (when (current-line-is-first?)
- (Ding) (exit))
- (move-to-previous-line)
- (when (not (=> browser current-item))
- (move-to-next-line) (Ding) (exit))
- (lexpr-send browser msg args)
- ))
- )))
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- (off fast-integers)
|