File: //usr/share/jed/lib/most.sl
%%
%% Most/more/less file viewing
%%
define most_edit ()
{
set_readonly(0);
getbuf_info(); pop(); pop(); pop();
file_type(); runhooks("mode_hook");
set_status_line("", 0);
}
variable Most_N_Windows = 1;
define most_exit_most ()
{
variable flags;
most_edit ();
ifnot (buffer_modified ())
delbuf (whatbuf ());
otherwindow ();
if (Most_N_Windows == 2) onewindow ();
message ("Done.");
}
define most_help ()
{
message (
"SPC:pg dn, DEL:pg up, /:search forw, ?:search back, q:quit, e:edit, h:this help"
);
}
variable Most_Map = "Most";
ifnot (keymap_p (Most_Map))
{
make_keymap (Most_Map);
_for ('A', 'z', 1)
{
undefinekey (char (), Most_Map);
}
definekey ("page_up", char (127), Most_Map); % delete
definekey ("page_down", char (' '), Most_Map);
definekey ("most_exit_most", char ('q'), Most_Map);
definekey ("most_edit", char ('e'), Most_Map);
definekey ("most_find_f", char ('s'), Most_Map);
definekey ("most_find_f", char ('S'), Most_Map);
definekey ("most_find_f", char ('/'), Most_Map);
definekey ("most_find_b", char ('?'), Most_Map);
definekey ("most_find_n", char ('N'), Most_Map);
definekey ("most_help", char ('h'), Most_Map);
definekey ("eob", char ('B'), Most_Map);
definekey ("bob", char ('T'), Most_Map);
}
%!%+
%\function{most_mode}
%\synopsis{most_mode}
%\description
% Emulates MOST fileviewer
% The following keys are defined:
%#v+
% SPACE next screen
% DELETE previous screen
% / search_forward
% ? search_backward
% n find next occurrence
% q quit most mode (usually kills buffer if not modified)
% e edit buffer
% h help summary
% t Top of Buffer
% b End of Buffer
%#v-
%!%-
define most_mode ()
{
use_keymap (Most_Map);
set_readonly (1);
set_mode (Most_Map, 0);
set_status_line (" MOST : press 'h' for help. %b (%p)", 0);
Most_N_Windows = nwindows ();
}
variable Most_Search_Dir = 1;
define most_find_n ()
{
variable r;
ifnot (strlen (LAST_SEARCH))
error ("Find What?");
if (Most_Search_Dir > 0)
{
r = right (1);
if (fsearch (LAST_SEARCH)) return;
go_left (r);
}
else
{
if (bsearch (LAST_SEARCH)) return;
}
error ("Not Found.");
}
define most_find_b ()
{
Most_Search_Dir = -1;
search_backward ();
}
define most_find_f ()
{
Most_Search_Dir = 1;
search_forward ();
}
%%% Emulate MOST fileviewer.
variable Most_Min_Arg, Most_Current_Arg;
define run_most (arg)
{
Most_Min_Arg = arg;
Most_Current_Arg = arg;
if (arg != __argc) () = find_file (__argv[arg]);
most_mode ();
definekey ("most_next_file", ":N", Most_Map);
definekey ("exit_jed", "q", Most_Map);
definekey ("exit_jed", "Q", Most_Map);
definekey ("most_exit_most", ":Q", Most_Map);
help_for_help_string =
"Most Mode: SPC- next screen, DEL- prev screen, Q Quit, :n next file, :Q edit";
}
define most_next_file ()
{
variable f, file, dir = 1;
forever
{
Most_Current_Arg += dir;
if (Most_Current_Arg == __argc) Most_Current_Arg = Most_Min_Arg;
if (Most_Current_Arg < Most_Min_Arg) Most_Current_Arg = __argc - 1;
file = __argv[Most_Current_Arg];
flush (strcat ("Next File (Use Arrow keys to select): ", file));
(,f) = get_key_binding ();
if (typeof (f) == String_Type)
{
if (f == "previous_line_cmd")
{
dir = 1;
continue;
}
if (f == "next_line_cmd")
{
dir = -1;
continue;
}
break;
}
else beep ();
}
() = find_file (file);
message (Null_String);
most_mode ();
}
provide ("most");