File: //usr/share/jed/lib/digraph.sl
% digraph.sl -*- Slang -*-
%
% This is digraph.sl. It allows for easy input of accented characters and
% other 8-bit characters. It is an alternative to the mutekeys.sl package.
% I wrote it because I don't like mutekeys. I added a lot of characters not
% found in mutekeys.sl.
%
% Usage: put this file in $JED_ROOT/lib and add a line
%
% autoload ("digraph_cmd", "digraph"); setkey ("digraph_cmd", "\ek");
%
% to your ~/.jedrc file, restart jed so that this setkey takes effect before
% any other keymaps are defined. The digraphs are now available by typing
% Esc-K 'accent' 'letter'.
%
% Thanks to John Davis for reducing the number of case statements in the
% original code and for adding the user-friendly interface (don't type too
% fast, otherwise you can't read it).
%
% DONE: This does not work yet under MSDOS and OS2 . Any volunteers?
%
% Ronald Rietman, 1995/03/05
%%%
% - added MSDOS, OS/2 digraphs
% - changed key for British Pounds from $ to # (pounds) so that it occurs in
% the same place as a UK keyboard
% - added European-style double quotes
% - moved inverted punctuation marks to use a period accent and added DOS
% line-drawing characters to the same. Letters for lines correspond to
% curses ACS (Alternate Character Set), except 'P' invented to == `Plus'
%
% Mark Olesen 16 Aug 1995
% Modified by JED, Feb 2006.
% This function has the effect of converting an ISO-Latin string UTF-8 if in
% UTF-8 mode. It does not work on DOS/Windows.
#ifndef IBMPC_SYSTEM
private define convert_string (str)
{
variable new_str = "";
_for (0, strbytelen (str)-1, 1)
{
variable i = ();
new_str = strcat (new_str, char (str[i]));
}
return new_str;
}
#endif
define digraph_cmd ()
{
variable i, accent, letters;
#iffalse
EXIT_BLOCK
{
message (Null_String);
}
#endif
switch (get_mini_response ("Enter an accent character: [/`'^\"~,.:]"))
{ case '/':
#ifdef IBMPC_SYSTEM
"aAeEs#yc";
"\d134\d143\d145\d146\d225\d156\d157\d155";
#else
"aAdDeEoOstT#yc";
"\d229\d197\d240\d208\d230\d198\d248\d216\d223\d254\d222\d163\d165\d162";
#endif
}
{ case '"':
#ifdef IBMPC_SYSTEM
"`aAeioOsuUy'";
%"\d174\d132\d142\d137\d139\d148\d153\d129\d225\d154\d152\d175";
"\d174\d132\d142\d137\d139\d148\d153\d225\d129\d154\d152\d175";
#else
"`aAeEiIoOsuU'";
"\d171\d228\d196\d235\d203\d239\d207\d246\d214\d223\d252\d220\d187";
#endif
}
{ case '\'':
#ifdef IBMPC_SYSTEM
"aeEiou'";
"\d160\d130\d144\d161\d162\d163\d175";
#else
"aAeEiIoOuU'";
"\d225\d193\d233\d201\d237\d205\d243\d211\d250\d218\d187";
#endif
}
{ case '`':
#ifdef IBMPC_SYSTEM
"`aeiou";
"\d174\d133\d138\d141\d149\d151";
#else
"`aAeEiIoOuU";
"\d171\d224\d192\d232\d200\d236\d204\d242\d210\d249\d217";
#endif
}
{ case '^':
#ifdef IBMPC_SYSTEM
"aeiou";
"\d131\d136\d140\d147\d150";
#else
"aAeEiIoOuU";
"\d226\d194\d234\d202\d238\d206\d244\d212\d251\d219";
#endif
}
{ case '~':
#ifdef IBMPC_SYSTEM
"nN";
"\d164\d165";
#else
"aAnNoO";
"\d227\d195\d241\d209\d245\d213";
#endif
}
{ case ',':
"cC";
#ifdef IBMPC_SYSTEM
"\d135\d128";
#else
"\d231\d199";
#endif
}
{ case '.':
#ifdef IBMPC_SYSTEM
"!?aAjJkKlLmMpPqQtTuUvVwWxX";
"\d173\d168\d177\d178\d217\d188\d191\d187\d218\d201\d192\d200\d197\d206\d196\d205\d195\d204\d180\d185\d194\d203\d193\d202\d179\d186";
#else
"!?1/";
"\d161\d191\d161\d191";
#endif
}
{
case ':':
#ifdef IBMPC_SYSTEM
return;
#else
"aAeEiIoOuU";
"\d228\d196\d235\d203\d239\d207\d246\d214\d252\d220";
#endif
}
{ return; } % default
(letters, accent) = ();
#ifndef IBMPC_SYSTEM
accent = convert_string (accent);
#endif
i = is_substr (letters,
char (get_mini_response (sprintf ("Enter [%s] to get [%s]",
letters, accent))));
ifnot (i)
{
beep ();
return;
}
insert (substr (accent, i, 1));
}