File: //usr/share/jed/lib/emacs.sl
%
% Emacs like bindings for Jed.
%
% A subset of the emacs global map is implemented here. If you
% are lacking a useful keybinding, contact jed@jedsoft.org
_Jed_Emulation = "emacs";
set_status_line("(Jed %v) Emacs: %b (%m%a%n%o) %p %t", 1);
Help_File = "emacs.hlp";
KILL_LINE_FEATURE = 0;
#ifdef UNIX
enable_flow_control(0); %turns off ^S/^Q processing (Unix only)
#endif
%
% The default keybindings for Jed use ^W, ^F, and ^K keymaps. Emacs
% does not bind these so turn them off
unset_ctrl_keys ();
set_abort_char (7); % ^G
_Reserved_Key_Prefix = "\003"; % ^C
% Jed default binding of the tab char ^I is to indent line. Here just insert
% the tab
% setkey("self_insert_cmd", "^I");
%% The default binding for the quote keys (", ') is 'text_smart_quote'.
%% Most users do not seem to like this so it is unset here.
%%
setkey("self_insert_cmd", "\"");
setkey("self_insert_cmd", "'");
% setkey("backward_delete_char", "^?");
setkey("backward_delete_char_untabify", "^?");
#ifdef IBMPC_SYSTEM
setkey("smart_set_mark_cmd", "^@^C");
#else
setkey("smart_set_mark_cmd", "^@");
#endif
setkey("beg_of_line", "^A");
setkey("previous_char_cmd", "^B");
setkey("delete_char_cmd", "^D");
setkey("eol_cmd", "^E");
setkey("next_char_cmd", "^F");
setkey("kbd_quit", "^G");
if (_Backspace_Key != "\x08")
setkey("help_prefix", "^H");
setkey("newline", "^J");
setkey("emacs_yp_kill_line", "^K");
setkey("emacs_recenter", "^L");
setkey("newline_and_indent", "^M");
setkey("next_line_cmd", "^N");
setkey("emacs_open_line", "^O");
setkey("previous_line_cmd", "^P");
setkey("quoted_insert", "^Q");
setkey("isearch_backward", "^R");
setkey("isearch_forward", "^S");
setkey("transpose_chars", "^T");
setkey("universal_argument", "^U");
setkey("page_down", "^V");
setkey("yp_kill_region", "^W");
%
% ^X map
%
setkey("list_buffers", "^X^B");
setkey("exit_jed", "^X^C");
setkey("list_directory", "^X^D");
setkey("find_file", "^X^F");
setkey(". 'd'xform_region", "^X^L");
setkey("delete_blank_lines", "^X^O");
setkey("toggle_readonly", "^X^Q");
setkey("find_file_read_only", "^X^R");
setkey("save_buffer", "^X^S");
setkey("transpose_lines", "^X^T");
setkey(". 'u'xform_region", "^X^U");
setkey("find_alternate_file", "^X^V");
setkey("write_buffer", "^X^W");
setkey("exchange", "^X^X");
setkey("evaluate_cmd", "^X\e");
setkey("set_selective_display", "^X$");
setkey("compile_parse_errors", "^X'");
setkey("begin_macro", "^X(");
setkey("end_macro", "^X)");
setkey("mark_spot", "^X/");
setkey("delete_window", "^X0");
setkey("one_window", "^X1");
setkey("split_window", "^X2");
setkey("changelog_add_change", "^X4A");
setkey("find_buffer_other_window","^X4B");
setkey("find_file_other_window","^X4F");
setkey("digraph_cmd", "^X8");
setkey("comment_region_or_line","^X;");
setkey("scroll_left", "^X<");
setkey("whatpos", "^X=");
setkey("scroll_right", "^X>");
setkey("whatpos", "^X?");
setkey("switch_to_buffer", "^XB");
setkey("dired", "^XD");
setkey("execute_macro", "^XE");
setkey("set_fill_column", "^XF");
setkey("reg_insert_register", "^XG");
setkey("emacs_mark_buffer", "^XH");
setkey("insert_file", "^XI");
setkey("pop_spot", "^XJ");
setkey("kill_buffer", "^XK");
#ifdef UNIX
setkey("mail", "^XM");
#endif
setkey("narrow_to_region", "^XN");
setkey("other_window", "^XO");
setkey("macro_query", "^XQ");
setkey("kill_rect", "^XRK");
setkey("open_rect", "^XRO");
setkey("copy_rect", "^XRR");
setkey("insert_rect", "^XRY");
setkey("string_rectangle", "^XRT");
setkey("save_some_buffers", "^XS");
setkey("undo", "^XU");
setkey("widen_region", "^XW");
setkey("reg_copy_to_register", "^XX");
setkey("enlarge_window", "^X^");
setkey("yp_yank", "^Y");
setkey("sys_spawn_cmd", "^Z");
setkey("goto_match", "^\\");
setkey("undo", "^_");
%
% The escape map
%
setkey("forward_sexp", "\e^F");
setkey("backward_sexp", "\e^B");
setkey("kill_sexp", "\e^K");
setkey(". bskip_white trim insert_single_space", "\e ");
setkey("bskip_word", "\eb");
setkey("delete_word", "\eD");
setkey("bdelete_word", "\e^?");
setkey("skip_word", "\ef");
setkey("replace_cmd", "\e%");
setkey("beg_of_buffer", "\e<");
setkey("end_of_buffer", "\e>");
setkey("narrow_paragraph", "\eN");
setkey ("goto_line_cmd", "\eg");
setkey("scroll_down_in_place", "\ep");
setkey("scroll_up_in_place", "\en");
setkey("format_paragraph", "\eQ");
setkey("page_up", "\eV"); % see emacs_pageup below
setkey("copy_region", "\ew");
setkey("trim_whitespace", "\e\\");
setkey ("forward_paragraph", "\e}");
setkey ("backward_paragraph", "\e{");
setkey ("yp_yank_pop", "\ey");
setkey ("yp_kill_word", "\eD");
setkey ("yp_bkill_word", "\e^?");
setkey ("yp_copy_region_as_kill", "\ew");
autoload ("find_file_other_window", "emacsmsc");
autoload ("find_buffer_other_window", "emacsmsc");
autoload ("find_alternate_file", "emacsmsc");
autoload ("delete_blank_lines", "emacsmsc");
autoload ("forward_sexp", "emacsmsc");
autoload ("backward_sexp", "emacsmsc");
autoload ("kill_sexp", "emacsmsc");
autoload ("scroll_up_in_place", "emacsmsc");
autoload ("scroll_down_in_place", "emacsmsc");
autoload ("string_rectangle", "emacsmsc");
%% misc functions
%%
#iffalse
% Is this more emacs-like??? Anyone?
define emacs_pageup ()
{
variable n = prefix_argument (-1);
variable m;
if (n == -1)
{
call ("page_up");
return;
}
m = window_line ();
go_up (n);
recenter (m);
}
#endif
define emacs_mark_buffer()
{
mark_buffer ();
exchange_point_and_mark ();
}
define emacs_open_line()
{
newline(); go_left_1 ();
}
define emacs_recenter() { recenter(0); }
public define emacs_yp_kill_line ()
{
variable n = prefix_argument (-1);
if (n == -1)
{
yp_kill_line ();
return;
}
push_mark ();
if (n != down (n))
eol ();
yp_kill_region ();
}
define transpose_chars ()
{
variable c, err;
err = "Top of Buffer";
if (eolp()) go_left_1 ();
ifnot (left(1)) error(err);
c = what_char();
del();
go_right_1 ();
insert_char(c);
}
%%0 9 1 { "^U" exch string strcat "digit_arg" exch setkey } _for
%
% Emacs Universal argument--- bound to ^U
%
define universal_argument ()
{
variable n, key, count, msg, cu, force;
n = 4; count = 0; cu = "C-u"; msg = cu; force = 0;
forever
{
ifnot (force) ifnot(input_pending(10)) force = 1;
if (force)
{
message(msg + "-");
update_sans_update_hook (0);
}
msg += " ";
key = getkey();
switch(key)
{
isdigit(char(key)) :
key = key - '0';
count = 10 * count + key;
msg += string(key);
}
{
case 21 : % ^U
ifnot (count) n = 4 * n;
count = 0;
msg += cu;
}
{
ungetkey(key);
ifnot (count) count = n;
count = string(count);
n = strlen(count);
_for (n, 1, -1)
{
count; exch();
ungetkey(int (substr((), (), 1)));
}
ungetkey(27);
return;
}
}
}
runhooks ("keybindings_hook", _Jed_Emulation);