735 lines
22 KiB
C
735 lines
22 KiB
C
|
/*
|
||
|
This file is part of MOST.
|
||
|
|
||
|
Copyright (c) 1991, 1999, 2002, 2005-2018, 2019 John E. Davis
|
||
|
|
||
|
This program is free software; you can redistribute it and/or modify it
|
||
|
under the terms of the GNU General Public License as published by the Free
|
||
|
Software Foundation; either version 2 of the License, or (at your option)
|
||
|
any later version.
|
||
|
|
||
|
This program is distributed in the hope that it will be useful, but WITHOUT
|
||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||
|
more details.
|
||
|
|
||
|
You should have received a copy of the GNU General Public License along
|
||
|
with this program; if not, write to the Free Software Foundation, Inc., 675
|
||
|
Mass Ave, Cambridge, MA 02139, USA.
|
||
|
*/
|
||
|
#include "config.h"
|
||
|
#include <stdio.h>
|
||
|
#include <ctype.h>
|
||
|
|
||
|
#include <slang.h>
|
||
|
#include "jdmacros.h"
|
||
|
|
||
|
#include "most.h"
|
||
|
#include "keym.h"
|
||
|
#include "display.h"
|
||
|
#include "window.h"
|
||
|
#include "search.h"
|
||
|
#include "edit.h"
|
||
|
#include "sysdep.h"
|
||
|
#include "file.h"
|
||
|
#include "keyparse.h"
|
||
|
|
||
|
int *Most_Digit_Arg;
|
||
|
static char Last_Char;
|
||
|
static int Edt_Direction = 1;
|
||
|
|
||
|
static void digit_arg_cmd(void);
|
||
|
|
||
|
static void page_down_cmd (void)
|
||
|
{
|
||
|
int n = 1;
|
||
|
|
||
|
if (Most_Digit_Arg != (int *) NULL) n = *Most_Digit_Arg;
|
||
|
if (n < 0) n = 1;
|
||
|
n = Most_C_Line + n * (Most_Win->bot - Most_Win->top + 1);
|
||
|
most_read_to_line (n + 50);
|
||
|
most_update_windows (n);
|
||
|
}
|
||
|
|
||
|
static void page_up_cmd (void)
|
||
|
{
|
||
|
int n = 1;
|
||
|
if (Most_Digit_Arg != (int *) NULL) n = *Most_Digit_Arg;
|
||
|
n = Most_C_Line - n * (Most_Win->bot - Most_Win->top + 1);
|
||
|
if (n < 1) n = 1;
|
||
|
|
||
|
most_update_windows (n);
|
||
|
}
|
||
|
|
||
|
static void page_right_cmd (void)
|
||
|
{
|
||
|
int n = 1;
|
||
|
if (Most_Digit_Arg != (int *) NULL) n = *Most_Digit_Arg;
|
||
|
Most_Column = Most_Column + n * 59;
|
||
|
most_update_windows(Most_C_Line);
|
||
|
}
|
||
|
|
||
|
static void page_left_cmd(void)
|
||
|
{
|
||
|
int n = 1;
|
||
|
if (Most_Digit_Arg != (int *) NULL) n = *Most_Digit_Arg;
|
||
|
Most_Column = Most_Column - n * 59;
|
||
|
most_update_windows(Most_C_Line);
|
||
|
}
|
||
|
|
||
|
static void column_right_cmd (void)
|
||
|
{
|
||
|
int n = 1;
|
||
|
if (Most_Digit_Arg != (int *) NULL) n = *Most_Digit_Arg;
|
||
|
Most_Column = Most_Column + n;
|
||
|
most_update_windows(Most_C_Line);
|
||
|
}
|
||
|
|
||
|
static void column_left_cmd(void)
|
||
|
{
|
||
|
int n = 1;
|
||
|
if (Most_Digit_Arg != (int *) NULL) n = *Most_Digit_Arg;
|
||
|
Most_Column = Most_Column - n;
|
||
|
most_update_windows(Most_C_Line);
|
||
|
}
|
||
|
|
||
|
static void next_line_cmd(void)
|
||
|
{
|
||
|
int n = 1;
|
||
|
if (Most_Digit_Arg != (int *) NULL) n = *Most_Digit_Arg;
|
||
|
|
||
|
most_read_to_line (Most_C_Line + n + 50);
|
||
|
most_update_windows(Most_C_Line + n);
|
||
|
}
|
||
|
|
||
|
static void previous_line_cmd(void)
|
||
|
{
|
||
|
int n = 1;
|
||
|
if (Most_Digit_Arg != (int *) NULL) n = *Most_Digit_Arg;
|
||
|
|
||
|
most_update_windows(Most_C_Line - n);
|
||
|
}
|
||
|
|
||
|
static void tail_mode_cmd (void)
|
||
|
{
|
||
|
Most_Tail_Mode = 1;
|
||
|
|
||
|
do
|
||
|
{
|
||
|
if (0 != most_read_file_dsc (-1, 1))
|
||
|
most_update_windows (-1);
|
||
|
|
||
|
most_message ("Most Tail Mode-- MOST keys are still active.", 0);
|
||
|
most_put_message ();
|
||
|
|
||
|
most_point_cursor ();
|
||
|
SLsmg_refresh ();
|
||
|
}
|
||
|
while (0 == SLang_input_pending (15));
|
||
|
Most_Tail_Mode = 0;
|
||
|
}
|
||
|
|
||
|
static void top_of_buffer_cmd(void)
|
||
|
{
|
||
|
most_update_windows(1);
|
||
|
}
|
||
|
|
||
|
static void end_of_buffer_cmd(void)
|
||
|
{
|
||
|
unsigned int count = 0;
|
||
|
/* This will loop forever if the file is changing too fast. */
|
||
|
while ((Most_Buf->fd != -1)
|
||
|
&& (count < 5)
|
||
|
&& (0 != most_read_file_dsc(-1, 1)))
|
||
|
count++;
|
||
|
most_update_windows (-1);
|
||
|
Most_Curs_Offset = (Most_Eob - Most_Beg);
|
||
|
}
|
||
|
#ifdef unix
|
||
|
# include <signal.h>
|
||
|
#endif
|
||
|
static void sys_spawn_cmd(void)
|
||
|
{
|
||
|
#ifdef IBMPC_SYSTEM
|
||
|
most_message ("Not implemented.", 1);
|
||
|
#else
|
||
|
int update = 0;
|
||
|
# ifndef VMS
|
||
|
static int can_suspend = -1;
|
||
|
|
||
|
if (can_suspend == -1)
|
||
|
{
|
||
|
can_suspend = 0;
|
||
|
# ifdef SIGTSTP
|
||
|
if (SIG_DFL == SLsignal (SIGTSTP, SIG_DFL))
|
||
|
can_suspend = 1;
|
||
|
# endif
|
||
|
}
|
||
|
if (can_suspend == 0)
|
||
|
{
|
||
|
most_message ("Shell forbids suspension.", 1);
|
||
|
return;
|
||
|
}
|
||
|
# endif
|
||
|
|
||
|
if (Most_Secure_Mode || Most_Captive_Mode)
|
||
|
{
|
||
|
most_message ("Operation not permitted by this account.", 1);
|
||
|
return;
|
||
|
}
|
||
|
most_reset_tty();
|
||
|
most_reset_display();
|
||
|
# ifdef VMS
|
||
|
if (Last_Char == '\032') exit(0);
|
||
|
if (most_do_shell_command()) update = 1; /* scroll region reset by message facility */
|
||
|
# else
|
||
|
# ifdef SIGTSTP
|
||
|
kill(0, SIGTSTP);
|
||
|
# endif
|
||
|
update = 1;
|
||
|
# endif
|
||
|
most_init_tty();
|
||
|
most_init_display ();
|
||
|
if (update) most_redraw_display();
|
||
|
#endif /* IBMPC_SYSTEM */
|
||
|
}
|
||
|
|
||
|
static void redraw_cmd(void)
|
||
|
{
|
||
|
most_redraw_display();
|
||
|
}
|
||
|
|
||
|
static int read_integer (char *prompt, MOST_INT *n)
|
||
|
{
|
||
|
int status;
|
||
|
Most_Mini_Buf[0] = 0;
|
||
|
|
||
|
status = most_read_from_minibuffer(prompt, NULL, (char *) Most_Mini_Buf, MOST_MINI_BUF_LEN);
|
||
|
if (status < 0)
|
||
|
return -1;
|
||
|
|
||
|
if (1 != sscanf((char *) Most_Mini_Buf, MOST_INT_D_FMT, n))
|
||
|
{
|
||
|
most_message ("Expecting an integer", 1);
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
Most_Mini_Buf[0] = 0;
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
static void goto_line_cmd(void)
|
||
|
{
|
||
|
MOST_INT n;
|
||
|
|
||
|
if (Most_Digit_Arg != (int *) NULL) n = *Most_Digit_Arg;
|
||
|
else
|
||
|
{
|
||
|
if (-1 == read_integer ("Goto Line: ", &n))
|
||
|
return;
|
||
|
}
|
||
|
most_update_windows ((int)n);
|
||
|
}
|
||
|
|
||
|
static void goto_percent_cmd(void)
|
||
|
{
|
||
|
unsigned char *pos;
|
||
|
MOST_INT n;
|
||
|
|
||
|
if (Most_Digit_Arg != NULL) n = *Most_Digit_Arg;
|
||
|
else
|
||
|
{
|
||
|
if (-1 == read_integer ("Goto Percent: ", &n))
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (n < 0) n = 0; else if (n > 100) n = 100;
|
||
|
if (Most_Buf->fd != -1) most_read_file_dsc(-1, 1);
|
||
|
pos = Most_Beg + (n * (Most_Eob - Most_Beg))/100;
|
||
|
n = most_what_line(pos);
|
||
|
most_update_windows (n);
|
||
|
}
|
||
|
|
||
|
static void set_mark_cmd(void)
|
||
|
{
|
||
|
Most_Buf->mark = Most_C_Line;
|
||
|
most_message("Mark Set.",0);
|
||
|
}
|
||
|
|
||
|
static void goto_mark_cmd(void)
|
||
|
{
|
||
|
int mark = Most_Buf->mark;
|
||
|
Most_Buf->mark = Most_C_Line;
|
||
|
most_update_window(mark);
|
||
|
most_message("Mark Set.",0);
|
||
|
}
|
||
|
|
||
|
static void one_window_cmd(void)
|
||
|
{
|
||
|
most_one_window();
|
||
|
}
|
||
|
|
||
|
static void two_window_cmd(void)
|
||
|
{
|
||
|
most_two_windows();
|
||
|
}
|
||
|
|
||
|
static void del_window_cmd(void)
|
||
|
{
|
||
|
most_delete_window();
|
||
|
}
|
||
|
|
||
|
static void other_window_cmd(void)
|
||
|
{
|
||
|
int n = 1;
|
||
|
if (Most_Digit_Arg != (int *) NULL) n = *Most_Digit_Arg;
|
||
|
most_other_window(n);
|
||
|
}
|
||
|
|
||
|
static void find_next_cmd(void)
|
||
|
{
|
||
|
MOST_INT col, line, n = 1;
|
||
|
unsigned long ofs;
|
||
|
|
||
|
if (Most_Digit_Arg != NULL) n = *Most_Digit_Arg;
|
||
|
line = most_search ((Most_Beg + Most_Curs_Offset) + Most_Search_Dir, n, &col);
|
||
|
if (line < 1) return;
|
||
|
|
||
|
ofs = Most_Curs_Offset;
|
||
|
|
||
|
if ((line < Most_Win->beg_line) || (line > Most_Win->beg_line + Most_Win->bot - Most_Win->top))
|
||
|
most_update_window(line);
|
||
|
|
||
|
Most_Curs_Offset = ofs;
|
||
|
|
||
|
Most_Curs_Row = line - Most_C_Line + 1;
|
||
|
Most_Curs_Col = col;
|
||
|
}
|
||
|
|
||
|
static void find_next_opposite_dir_cmd (void)
|
||
|
{
|
||
|
Most_Search_Dir = -Most_Search_Dir;
|
||
|
find_next_cmd ();
|
||
|
Most_Search_Dir = -Most_Search_Dir;
|
||
|
}
|
||
|
|
||
|
static void search_cmd_dir (char *prompt, int dir)
|
||
|
{
|
||
|
char buf[MOST_SEARCH_BUF_LEN];
|
||
|
|
||
|
if (-1 == most_read_from_minibuffer(prompt, NULL, buf, MOST_SEARCH_BUF_LEN))
|
||
|
return;
|
||
|
|
||
|
Most_Search_Dir = dir;
|
||
|
if (*buf)
|
||
|
strcpy (Most_Search_Str, buf); /* no buffer overflow here */
|
||
|
Most_Curs_Offset = Most_C_Offset;
|
||
|
find_next_cmd ();
|
||
|
}
|
||
|
|
||
|
static void search_cmd(void)
|
||
|
{
|
||
|
char *prompt = "Regexp-Search: ";
|
||
|
if (Most_Do_Regexp_Search == 0)
|
||
|
prompt += 7;
|
||
|
search_cmd_dir (prompt,1);
|
||
|
}
|
||
|
|
||
|
static void search_back_cmd(void)
|
||
|
{
|
||
|
char *prompt = "Regexp-Search Backwards: ";
|
||
|
if (Most_Do_Regexp_Search == 0)
|
||
|
prompt += 7;
|
||
|
search_cmd_dir (prompt, -1);
|
||
|
}
|
||
|
|
||
|
static void help_cmd(void)
|
||
|
{
|
||
|
most_do_help_command();
|
||
|
}
|
||
|
|
||
|
static void find_file_cmd(void)
|
||
|
{
|
||
|
most_user_get_file();
|
||
|
}
|
||
|
|
||
|
static void time_cmd(void)
|
||
|
{
|
||
|
most_message(most_get_time(),0);
|
||
|
}
|
||
|
|
||
|
static void toggle_width_cmd(void)
|
||
|
{
|
||
|
if (SLtt_Screen_Cols == 80)
|
||
|
{
|
||
|
if (!Most_Restore_Width_To) Most_Restore_Width_To = 80;
|
||
|
most_set_width(132, 1);
|
||
|
}
|
||
|
else if (SLtt_Screen_Cols == 132)
|
||
|
{
|
||
|
if (!Most_Restore_Width_To) Most_Restore_Width_To = 132;
|
||
|
most_set_width(80, 1);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void edt_forward_cmd(void)
|
||
|
{
|
||
|
Edt_Direction = 1;
|
||
|
}
|
||
|
|
||
|
static void edt_back_cmd(void)
|
||
|
{
|
||
|
Edt_Direction = 0;
|
||
|
}
|
||
|
|
||
|
static void edt_page_cmd(void)
|
||
|
{
|
||
|
if (Edt_Direction == 0)
|
||
|
{
|
||
|
page_up_cmd();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
page_down_cmd();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void edt_line_cmd(void)
|
||
|
{
|
||
|
if (Edt_Direction == 0)
|
||
|
{
|
||
|
previous_line_cmd();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
next_line_cmd();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void edt_find_cmd(void)
|
||
|
{
|
||
|
if (Edt_Direction == 0)
|
||
|
{
|
||
|
search_back_cmd();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
search_cmd();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void edt_find_next_cmd(void)
|
||
|
{
|
||
|
if (Edt_Direction == 0)
|
||
|
{
|
||
|
Most_Search_Dir = -1;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Most_Search_Dir = 1;
|
||
|
}
|
||
|
find_next_cmd();
|
||
|
}
|
||
|
|
||
|
#define A_KEY(s, f) {s, (int (*)(void)) f}
|
||
|
SLKeymap_Function_Type Most_Functions [] =
|
||
|
{
|
||
|
A_KEY("edit", most_edit_cmd),
|
||
|
A_KEY("suspend", sys_spawn_cmd),
|
||
|
A_KEY("next_file", most_next_file),
|
||
|
A_KEY("toggle_options", most_toggle_options),
|
||
|
A_KEY("toggle_lock", most_toggle_lock),
|
||
|
A_KEY("extended_key", most_extended_key_cmd),
|
||
|
A_KEY("toggle_case", most_toggle_case),
|
||
|
A_KEY("delete_file", most_delete_file_cmd),
|
||
|
A_KEY("bob", top_of_buffer_cmd),
|
||
|
A_KEY("delete_window", del_window_cmd),
|
||
|
A_KEY("digit_arg", digit_arg_cmd),
|
||
|
A_KEY("down", next_line_cmd),
|
||
|
A_KEY("edt_backward", edt_back_cmd),
|
||
|
A_KEY("edt_find", edt_find_cmd),
|
||
|
A_KEY("edt_find_next", edt_find_next_cmd),
|
||
|
A_KEY("edt_forward", edt_forward_cmd),
|
||
|
A_KEY("edt_line", edt_line_cmd),
|
||
|
A_KEY("edt_page", edt_page_cmd),
|
||
|
A_KEY("eob", end_of_buffer_cmd),
|
||
|
A_KEY("exit", most_exit_most),
|
||
|
A_KEY("find_file", find_file_cmd),
|
||
|
A_KEY("find_next", find_next_cmd),
|
||
|
A_KEY("find_next_other_dir", find_next_opposite_dir_cmd),
|
||
|
A_KEY("goto_line", goto_line_cmd),
|
||
|
A_KEY("goto_mark", goto_mark_cmd),
|
||
|
A_KEY("goto_percent", goto_percent_cmd),
|
||
|
A_KEY("help", help_cmd),
|
||
|
A_KEY("one_window", one_window_cmd),
|
||
|
A_KEY("other_window", other_window_cmd),
|
||
|
A_KEY("page_down", page_down_cmd ),
|
||
|
A_KEY("page_left", page_left_cmd),
|
||
|
A_KEY("page_right", page_right_cmd ),
|
||
|
A_KEY("page_up", page_up_cmd ),
|
||
|
A_KEY("column_left", column_left_cmd ),
|
||
|
A_KEY("column_right", column_right_cmd ),
|
||
|
A_KEY("redraw", redraw_cmd),
|
||
|
A_KEY("search_backward", search_back_cmd),
|
||
|
A_KEY("search_forward", search_cmd),
|
||
|
A_KEY("set_mark", set_mark_cmd),
|
||
|
A_KEY("show_time", time_cmd),
|
||
|
A_KEY("tail_mode", tail_mode_cmd),
|
||
|
A_KEY("toggle_width", toggle_width_cmd),
|
||
|
A_KEY("two_windows", two_window_cmd),
|
||
|
A_KEY("up", previous_line_cmd),
|
||
|
{(char *) NULL, NULL}
|
||
|
};
|
||
|
|
||
|
SLKeyMap_List_Type *Most_Keymap;
|
||
|
|
||
|
#ifdef IBMPC_SYSTEM
|
||
|
static void gobble_mouse_cmd(void)
|
||
|
{
|
||
|
SLang_flush_input ();
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
void most_init_keymaps (void)
|
||
|
{
|
||
|
char *err = "Unable to create keymaps!";
|
||
|
char esc[3], gold[5], dig[2];
|
||
|
int i;
|
||
|
|
||
|
if (NULL == (Most_Keymap = SLang_create_keymap ("Most", NULL)))
|
||
|
most_exit_error (err);
|
||
|
|
||
|
Most_Keymap->functions = Most_Functions;
|
||
|
|
||
|
esc[0] = 27; esc[2] = 0;
|
||
|
gold[0] = 27; gold[1] = 'O'; gold[2] = 'P'; gold[4] = 0;
|
||
|
dig[1] = 0;
|
||
|
|
||
|
for (i = '0'; i <= '9'; i++)
|
||
|
{
|
||
|
dig[0] = (char) i;
|
||
|
esc[1] = (char) i;
|
||
|
gold[3] = (char) i;
|
||
|
SLkm_define_key (dig, (FVOID_STAR) digit_arg_cmd, Most_Keymap);
|
||
|
SLkm_define_key (esc, (FVOID_STAR) digit_arg_cmd, Most_Keymap);
|
||
|
SLkm_define_key (gold, (FVOID_STAR) digit_arg_cmd, Most_Keymap);
|
||
|
}
|
||
|
|
||
|
dig[0] = '-'; esc[1] = '-'; gold[3] = '-';
|
||
|
SLkm_define_key (dig, (FVOID_STAR) digit_arg_cmd, Most_Keymap);
|
||
|
SLkm_define_key (esc, (FVOID_STAR) digit_arg_cmd, Most_Keymap);
|
||
|
SLkm_define_key (gold, (FVOID_STAR) digit_arg_cmd, Most_Keymap);
|
||
|
|
||
|
SLkm_define_key (" ", (FVOID_STAR) page_down_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("$", (FVOID_STAR) sys_spawn_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("%", (FVOID_STAR) goto_percent_cmd, Most_Keymap);
|
||
|
SLkm_define_key (",", (FVOID_STAR) goto_mark_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("/", (FVOID_STAR) search_cmd, Most_Keymap);
|
||
|
SLkm_define_key (":", (FVOID_STAR) most_extended_key_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("<", (FVOID_STAR) page_left_cmd, Most_Keymap);
|
||
|
SLkm_define_key (">", (FVOID_STAR) page_right_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("?", (FVOID_STAR) search_back_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("B", (FVOID_STAR) end_of_buffer_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("D", (FVOID_STAR) page_down_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("E", (FVOID_STAR) most_edit_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("F", (FVOID_STAR) tail_mode_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("G", (FVOID_STAR) goto_line_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("H", (FVOID_STAR) help_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("J", (FVOID_STAR) goto_line_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("L", (FVOID_STAR) most_toggle_lock, Most_Keymap);
|
||
|
SLkm_define_key ("M", (FVOID_STAR) set_mark_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("n", (FVOID_STAR) find_next_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("N", (FVOID_STAR) find_next_opposite_dir_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("O", (FVOID_STAR) other_window_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("Q", (FVOID_STAR) most_exit_most, Most_Keymap);
|
||
|
SLkm_define_key ("R", (FVOID_STAR) redraw_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("S", (FVOID_STAR) search_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("T", (FVOID_STAR) top_of_buffer_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("U", (FVOID_STAR) page_up_cmd , Most_Keymap);
|
||
|
SLkm_define_key ("V", (FVOID_STAR) next_line_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("W", (FVOID_STAR) toggle_width_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("X", (FVOID_STAR) most_exit_most, Most_Keymap);
|
||
|
SLkm_define_key ("\033$", (FVOID_STAR) sys_spawn_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\033<", (FVOID_STAR) top_of_buffer_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\033>", (FVOID_STAR) end_of_buffer_cmd, Most_Keymap);
|
||
|
#if !defined(IBMPC_SYSTEM)
|
||
|
SLkm_define_key ("\033OA", (FVOID_STAR) previous_line_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\033OB", (FVOID_STAR) next_line_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\033OC", (FVOID_STAR) column_right_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\033OD", (FVOID_STAR) column_left_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\033OPE", (FVOID_STAR) most_exit_most, Most_Keymap);
|
||
|
SLkm_define_key ("\033OPO", (FVOID_STAR) one_window_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\033OPQ", (FVOID_STAR) most_exit_most, Most_Keymap);
|
||
|
SLkm_define_key ("\033OPS", (FVOID_STAR) sys_spawn_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\033OPV", (FVOID_STAR) del_window_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\033OPX", (FVOID_STAR) two_window_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\033OP\033OR", (FVOID_STAR) edt_find_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\033OP\033On", (FVOID_STAR) goto_mark_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\033OP\033Ot", (FVOID_STAR) end_of_buffer_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\033OP\033Ou", (FVOID_STAR) top_of_buffer_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\033OP\033[A", (FVOID_STAR) other_window_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\033OP\033[B", (FVOID_STAR) other_window_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\033OP\033[C", (FVOID_STAR) page_right_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\033OP\033[D", (FVOID_STAR) page_left_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\033OQ", (FVOID_STAR) help_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\033OR", (FVOID_STAR) edt_find_next_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\033On", (FVOID_STAR) set_mark_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\033Op", (FVOID_STAR) edt_line_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\033Ot", (FVOID_STAR) edt_forward_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\033Ou", (FVOID_STAR) edt_back_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\033Ox", (FVOID_STAR) edt_page_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\033V", (FVOID_STAR) page_up_cmd , Most_Keymap);
|
||
|
SLkm_define_key ("\033[1~", (FVOID_STAR) search_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\033[2~", (FVOID_STAR) goto_mark_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\033[28~", (FVOID_STAR) help_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\033[4~", (FVOID_STAR) set_mark_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\033[5~", (FVOID_STAR) page_up_cmd , Most_Keymap);
|
||
|
SLkm_define_key ("\033[6~", (FVOID_STAR) page_down_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\033[A", (FVOID_STAR) previous_line_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\033[B", (FVOID_STAR) next_line_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\033[C", (FVOID_STAR) column_right_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\033[D", (FVOID_STAR) column_left_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\033[7~", (FVOID_STAR) top_of_buffer_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\033[8~", (FVOID_STAR) end_of_buffer_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("^@", (FVOID_STAR) set_mark_cmd, Most_Keymap);
|
||
|
#else
|
||
|
SLkm_define_key ("^@H", (FVOID_STAR) previous_line_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("^@P", (FVOID_STAR) next_line_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("^@M", (FVOID_STAR) column_right_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("^@K", (FVOID_STAR) column_left_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("^@Q", (FVOID_STAR) page_down_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("^@I", (FVOID_STAR) page_up_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("^@G", (FVOID_STAR) top_of_buffer_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("^@O", (FVOID_STAR) end_of_buffer_cmd, Most_Keymap);
|
||
|
|
||
|
SLkm_define_key ("\xE0H", (FVOID_STAR) previous_line_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\xE0P", (FVOID_STAR) next_line_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\xE0M", (FVOID_STAR) column_right_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\xE0K", (FVOID_STAR) column_left_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\xE0Q", (FVOID_STAR) page_down_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\xE0I", (FVOID_STAR) page_up_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\xE0G", (FVOID_STAR) top_of_buffer_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\xE0O", (FVOID_STAR) end_of_buffer_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("\033[M", (FVOID_STAR) gobble_mouse_cmd, Most_Keymap);
|
||
|
#endif
|
||
|
SLkm_define_key ("\t", (FVOID_STAR) page_right_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("^", (FVOID_STAR) previous_line_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("^?", (FVOID_STAR) page_up_cmd , Most_Keymap);
|
||
|
SLkm_define_key ("^D", (FVOID_STAR) page_down_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("^F", (FVOID_STAR) search_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("^H", (FVOID_STAR) help_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("^KE", (FVOID_STAR) most_exit_most, Most_Keymap);
|
||
|
SLkm_define_key ("^KG", (FVOID_STAR) find_file_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("^K^B", (FVOID_STAR) set_mark_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("^K^J", (FVOID_STAR) goto_mark_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("^K^M", (FVOID_STAR) goto_mark_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("^L", (FVOID_STAR) redraw_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("^M", (FVOID_STAR) next_line_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("^N", (FVOID_STAR) next_line_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("^P", (FVOID_STAR) previous_line_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("^R", (FVOID_STAR) redraw_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("^T", (FVOID_STAR) time_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("^U", (FVOID_STAR) page_up_cmd , Most_Keymap);
|
||
|
SLkm_define_key ("^V", (FVOID_STAR) page_down_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("^W0", (FVOID_STAR) del_window_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("^W1", (FVOID_STAR) one_window_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("^W2", (FVOID_STAR) two_window_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("^WO", (FVOID_STAR) other_window_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("^X0", (FVOID_STAR) del_window_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("^X1", (FVOID_STAR) one_window_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("^X2", (FVOID_STAR) two_window_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("^XO", (FVOID_STAR) other_window_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("^X^C", (FVOID_STAR) most_exit_most, Most_Keymap);
|
||
|
SLkm_define_key ("^X^F", (FVOID_STAR) find_file_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("^Z", (FVOID_STAR) sys_spawn_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("b", (FVOID_STAR) end_of_buffer_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("d", (FVOID_STAR) page_down_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("e", (FVOID_STAR) most_edit_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("f", (FVOID_STAR) search_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("g", (FVOID_STAR) goto_line_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("j", (FVOID_STAR) goto_line_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("l", (FVOID_STAR) most_toggle_lock, Most_Keymap);
|
||
|
SLkm_define_key ("m", (FVOID_STAR) set_mark_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("n", (FVOID_STAR) find_next_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("o", (FVOID_STAR) other_window_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("q", (FVOID_STAR) most_exit_most, Most_Keymap);
|
||
|
SLkm_define_key ("r", (FVOID_STAR) redraw_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("s", (FVOID_STAR) search_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("t", (FVOID_STAR) top_of_buffer_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("v", (FVOID_STAR) next_line_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("w", (FVOID_STAR) toggle_width_cmd, Most_Keymap);
|
||
|
SLkm_define_key ("x", (FVOID_STAR) most_exit_most, Most_Keymap);
|
||
|
if (SLang_get_error()) most_exit_error (err);
|
||
|
|
||
|
(void) most_load_user_keymaps ();
|
||
|
}
|
||
|
|
||
|
static void sldo_key (void)
|
||
|
{
|
||
|
SLang_Key_Type *key;
|
||
|
|
||
|
key = SLang_do_key (Most_Keymap, most_getkey);
|
||
|
SLKeyBoard_Quit = 0;
|
||
|
SLang_set_error (0);
|
||
|
Last_Char = SLang_Last_Key_Char;
|
||
|
|
||
|
if ((key == NULL) || (key->f.f == NULL) || (key->type != SLKEY_F_INTRINSIC))
|
||
|
{
|
||
|
SLtt_beep ();
|
||
|
}
|
||
|
else (((void (*)(void))(key->f.f)) ());
|
||
|
}
|
||
|
|
||
|
static void digit_arg_cmd(void)
|
||
|
{
|
||
|
char num[15], ch;
|
||
|
int j = 0;
|
||
|
static int digits;
|
||
|
|
||
|
num[j++] = Last_Char;
|
||
|
ch = most_getkey();
|
||
|
while ((ch >= '0') && (ch <= '9'))
|
||
|
{
|
||
|
if (j == 15) return;
|
||
|
|
||
|
num[j++] = ch;
|
||
|
ch = most_getkey();
|
||
|
}
|
||
|
|
||
|
if (((j == 1) && (Last_Char != '-')) || (j > 1))
|
||
|
{
|
||
|
num[j] = '\0';
|
||
|
sscanf(num,"%d",&digits);
|
||
|
Most_Digit_Arg = &digits;
|
||
|
}
|
||
|
Last_Char = ch;
|
||
|
SLang_ungetkey (ch);
|
||
|
sldo_key ();
|
||
|
}
|
||
|
|
||
|
void most_execute_key (void)
|
||
|
{
|
||
|
static int refresh_pending = 0;
|
||
|
|
||
|
if (Most_Want_Exit) return;
|
||
|
|
||
|
most_check_minibuffer ();
|
||
|
if (Most_Mini_Buf[0] != '\0') most_put_message ();
|
||
|
Most_Digit_Arg = (int *) NULL;
|
||
|
|
||
|
most_point_cursor ();
|
||
|
|
||
|
if (SLang_input_pending (0))
|
||
|
refresh_pending++;
|
||
|
else
|
||
|
refresh_pending = 0;
|
||
|
|
||
|
if ((refresh_pending == 0) || (refresh_pending > 4))
|
||
|
{
|
||
|
refresh_pending = 0;
|
||
|
SLsmg_refresh ();
|
||
|
}
|
||
|
|
||
|
sldo_key ();
|
||
|
}
|