keysyms that also have string translations, when not --enable-xim.
reported by joel reed.
- countless minor bugfixes.
+ - removed greek support.
1.8 Mon Feb 2 20:09:18 CET 2004
- almost total conversion to C++. Except for introducing
/* Define if you want the depth of scrollbars and menus to be less */
#undef HALFSHADOW
-/* Define if you want support for Greek Elot-928 & IBM-437 keyboard */
-#undef GREEK_SUPPORT
-
/* Define to change gid of ttys to group tty */
#undef TTY_GID_SUPPORT
support_xim=$enableval
fi])
-AC_ARG_ENABLE(greek,
- [ --enable-greek enable greek keyboard support],
- [if test x$enableval = xyes; then
- AC_DEFINE(GREEK_SUPPORT, 1, Define if you want support for Greek Elot-928 & IBM-437 keyboard)
- fi])
-
AC_ARG_ENABLE(ttygid,
[ --enable-ttygid enable tty setting to group named "tty"],
[if test x$enableval = xyes; then
+++ /dev/null
- -------------------------------
- rxvt support for greek keyboard
- -------------------------------
-
- A. Haritsis <ah@doc.ic.ac.uk>
-
-rxvt supports both ELOT-928 (ISO-8859-7 standard) and IBM-437 keyboard
-translations for greek character entry. It is possible to start rxvt windows
-in any of the two translations, making it possible to use both translations
-modes simultanesuly on the same screen! No need to convert your files back
-and forth if you don't want to.
-
-When in greek mode, type ; or : twice to emit the respective symbol.
-No need to switch language mode back and forth!
-
-rxvt ISO-8859-7 includes mappings for the following (usually forgotten):
-anw teleia = ;.
-<< = ;<
->> = ;>
- Also:
-Copyright = ;c
-Section = ;s
-
-For Greek Elot-928 or IBM-437 keyboard for rxvt & X greek entry support
-you will need to:
-
-1) compile rxvt with an ANSI C compiler (eg gcc) as follows:
-
- Use the --enable-greek option in configure , or edit config.h and
- define GREEK_SUPPORT
-
- Then your rxvt executable with greek support should be created. Install
- it as you would do for the normal rxvt. There is no need to change its
- name. It works fully as a normal rxvt but if you press the 'toggle'
- keysym (see below) it will switch into greek translation mode. The extra
- memory it takes in less than 4 kBytes.
-
-2) install greek elot & ibm437 fonts(s) for X-windows
- eg.
- cp a_greek_font.pcf.Z /usr/lib/X11/misc/
-
- and ammend the fonts.dir and fonts.alias in /usr/lib/X11/misc/. Greek
- fonts are available as a separate file which you can download from
- sunsite (/pub/Linux/X11/misc/greek-xfont-pack.tgz). A new release of a
- FULL set of fixed (and proportional and Type1 for use by netscape etc)
- can be found in the HCR archive - see at end). I might upload them at
- sunsite et all as well.
-
-3) include the following in your X resources:
- rxvt.font: grfixed (or the name of your preferred greek font)
- rxvt.bits: 8 (default)
- rxvt.greektoggle_key: Mode_switch (default)
-
- where grfixed is an alias for one of the elot-928 font in the pack.
-
- Remember that the default keyboard translation is ELOT928. If you need
- to start rxvt with suppport for IBM437, use the command line of rxvt to
- set mode & font (command line option -grk4 can do this). Remember to use
- an Elot font with the Elot translation mode and a 437 font with the
- IBM437 mode.
-
- You can choose any keysym you wish as the "toggler" greek_switch_keysym.
- Choosing `VoidSymbol' will effectively _disable_ the greek keyboard.
- The default is keysym `Mode_switch'.
-
- For XFree86 this is defined in the /usr/lib/X11/Xmodmap.* files as:
- keycode 113 = Mode_switch (it is the Right Alt key or ALtGr)
- You may define it to be something else with a command like:
-
- xmodmap -e "keycode ... = Mode_switch"
-
- or changing your ~/.Xmodmap file (see xmodmap(1) and X(1) about this).
- I personally prefer the AltGr key on PC X terminals since it allows fast
- switching. Of course this might not be liked by left-handed people. You
- can redefine it to whtever you like under X, but I would NOT recommend
- keycodes that have other uses.
-
-5) Not all programs are 8-bit clean -- ie, they sometimes strip the top bit
- of a character which is essential for the greek fonts.
-
- Unfortunately bash is one of these programs (at least I couldn't figure
- out how to make it to work). Use tcsh instead: it is 8-bit clean.
-
- You will generally need to include in your ...rc files:
-
- For sh/bash:
- LC_CTYPE=iso_8859_1; export LC_CTYPE
- LESSCHARSET=latin1; export LESSCHARSET
-
- For bash to be 8-bit clean, add the following lines to ~/.inputrc:
- set meta-flag on
- set convert-meta off
- set output-meta on
-
- For csh/tcsh:
- setenv LC_CTYPE iso_8859_1
- setenv LESSCHARSET latin1
-
-Still some applications will have problems. Emacs has its own support for
-greek characters achieved with the .el script written by sarantos@csd.uch.gr
-(for 19.20 +). It might be possible to have greek support via emacs
-invocations with the -nw argument (with this version of rxvt) but I have not
-tried it. Elvis (vi clone) works fine. I highly recommend vim version 3.15
-and later. I have added support for making native languge vi'ing very easy
-(see langmap option). It's by far the most powerful vi (or maybe editor :-)
-I have ever seen.
-
-If some (terminal-based) applications do not work, please direct complaints
-to their authors stating that you would like them to be 8-bit clean.
-
-I will soon release a linux version of an 8-bit clean curses lib and
-versions of some useful programs that work with it (eg ytalk). Watch the
-HCR archive.
-
-Do not expect programs that are not running within an rxvt window to have greek
-keyboard support. For this, it will be needed to change the Xlib so that it
-supports 4-state FSMs (rather than only 2 - I do not count shift keys or caps
-lock) for keyboard entry (required for greek keyboards).
-
-And something amusing and (maybe) useful: some filesystems (including SunOS
-and Linux filesystems -- haven't checked others) allow names with 8-bit
-characters; so you can create files or directories with names containing
-greek characters!
-
-Enjoy,
-
-Angelo Haritsis <ah@doc.ic.ac.uk>
-
-For more greek related tools/fonts etc, have a look at the
-HELLENIC RESOURCES ARCHIVE (HCR) : ftp://dolphin.doc.ic.ac.uk/pub/greek/
-maintained by the above author.
-# $Id: Makefile.in,v 1.11 2004-02-09 07:11:49 pcg Exp $
+# $Id: Makefile.in,v 1.12 2004-02-22 08:09:36 pcg Exp $
@MCOMMON@
LINT = lint -DNARROWPROTO=1 $(XINC) -chapbxz
first_rule: all
dummy:
-LIBSRCS = command.C defaultfont.C grkelot.C init.C logging.C \
+LIBSRCS = command.C defaultfont.C init.C logging.C \
main.C menubar.C misc.C netdisp.C ptytty.C screen.C scrollbar.C \
scrollbar-rxvt.C scrollbar-next.C scrollbar-xterm.C strings.C \
xdefaults.C xpm.C encoding.C rxvtcolor.C rxvtstl.C iom.C \
SRCS = rxvt.C $(LIBSRCS)
-HDRS = command.h defaultfont.h feature.h grkelot.h init.h logging.h \
+HDRS = command.h defaultfont.h feature.h init.h logging.h \
menubar.h netdisp.h protos.h rxvt.h rxvtgrx.h version.h encoding.h \
rxvtstl.h iom.h iom_conf.h
EXTRAHDRS = rxvtlib.h rxvtdaemon.h
-OBJS = command.o defaultfont.o init.o grkelot.o logging.o \
+OBJS = command.o defaultfont.o init.o logging.o \
main.o menubar.o misc.o netdisp.o ptytty.o screen.o \
scrollbar.o scrollbar-next.o scrollbar-rxvt.o scrollbar-xterm.o scrollbar-plain.o \
strings.o xdefaults.o xpm.o rxvt.o encoding.o rxvtcolor.o rxvtstl.o iom.o
-LIBOBJS = command.lo defaultfont.lo init.lo grkelot.lo logging.lo \
+LIBOBJS = command.lo defaultfont.lo init.lo logging.lo \
main.lo menubar.lo misc.lo netdisp.lo ptytty.lo screen.lo \
scrollbar.lo scrollbar-next.lo scrollbar-rxvt.lo scrollbar-xterm.lo scrollbar-plain.lo \
strings.lo xdefaults.lo xpm.lo encoding.lo rxvt.lo rxvtcolor.lo rxvtstl.lo iom.lo
RXVTD_VERNAME=$(DESTDIR)$(bindir)/$(RXVT_BASENAME)d-$(VERSION)$(EXEEXT)
RXVT_OLDNAME=$(DESTDIR)$(bindir)/$(RXVT_BASENAME)-old$(EXEEXT)
-EXTPROS = command.extpro defaultfont.extpro grkelot.extpro \
+EXTPROS = command.extpro defaultfont.extpro \
init.extpro logging.extpro main.extpro menubar.extpro misc.extpro \
netdisp.extpro ptytty.extpro screen.extpro scrollbar.extpro \
scrollbar-rxvt.extpro scrollbar-next.extpro scrollbar-xterm.extpro scrollbar-plain.intpro \
strings.extpro xdefaults.extpro xpm.extpro
-INTPROS = command.intpro defaultfont.intpro grkelot.intpro \
+INTPROS = command.intpro defaultfont.intpro \
init.intpro logging.intpro main.intpro menubar.intpro misc.intpro \
netdisp.intpro ptytty.intpro screen.intpro scrollbar.intpro \
scrollbar-rxvt.intpro scrollbar-next.intpro scrollbar-xterm.intpro scrollbar-plain.intpro \
command.o: command.C $(DEPS) command.intpro command.h version.h
defaultfont.o: defaultfont.C $(DEPS) defaultfont.intpro defaultfont.h
-grkelot.o: grkelot.C $(DEPS) grkelot.intpro grkelot.h
init.o: init.C $(DEPS) init.intpro init.h defaultfont.h
logging.o: logging.C $(DEPS) logging.intpro logging.h
main.o: main.C $(DEPS) main.intpro
command.lo: command.C $(DEPS) command.intpro command.h version.h
defaultfont.lo: defaultfont.C $(DEPS) defaultfont.intpro defaultfont.h encoding.h
-grkelot.lo: grkelot.C $(DEPS) grkelot.intpro grkelot.h
init.lo: init.C $(DEPS) init.intpro init.h
logging.lo: logging.C $(DEPS) logging.intpro logging.h
main.lo: main.C $(DEPS) main.intpro
return;
}
#endif
-#ifdef GREEK_SUPPORT
- if (keysym == ks_greekmodeswith)
- {
- greek_mode = !greek_mode;
- if (greek_mode)
- {
- xterm_seq (XTerm_title,
- (greek_getmode () == GREEK_ELOT928
- ? "[Greek: iso]" : "[Greek: ibm]"), CHAR_ST);
- greek_reset ();
- }
- else
- xterm_seq (XTerm_title, APL_NAME "-" VERSION, CHAR_ST);
- return;
- }
-#endif
if (keysym >= 0xFF00 && keysym <= 0xFFFF)
{
*ch |= 0x80;
meta = 0;
}
-#endif
-#ifdef GREEK_SUPPORT
- if (greek_mode)
- len = greek_xlat (kbuf, len);
#endif
/* nil */ ;
}
if (menubar_visible () && isMenuBarWindow (ev.xany.window))
menubar_expose ();
#endif
-#ifdef RXVT_GRAPHICS
- Gr_expose (ev.xany.window);
-#endif
-
}
break;
*/
if (ev.window == TermWin.vt)
{
-#if RXVT_GRAPHICS
- if (ev.subwindow != None)
- rxvt_Gr_ButtonPress (ev.x, ev.y);
- else
-#endif
-
+ clickintime = ev.time - MEvent.time < MULTICLICK_TIME;
+ if (reportmode)
{
- clickintime = ev.time - MEvent.time < MULTICLICK_TIME;
- if (reportmode)
- {
- /* mouse report from vt window */
- /* save the xbutton state (for ButtonRelease) */
- MEvent.state = ev.state;
+ /* mouse report from vt window */
+ /* save the xbutton state (for ButtonRelease) */
+ MEvent.state = ev.state;
#ifdef MOUSE_REPORT_DOUBLECLICK
- if (ev.button == MEvent.button && clickintime)
- {
- /* same button, within alloted time */
- MEvent.clicks++;
- if (MEvent.clicks > 1)
- {
- /* only report double clicks */
- MEvent.clicks = 2;
- mouse_report (ev);
-
- /* don't report the release */
- MEvent.clicks = 0;
- MEvent.button = AnyButton;
- }
- }
- else
+ if (ev.button == MEvent.button && clickintime)
+ {
+ /* same button, within alloted time */
+ MEvent.clicks++;
+ if (MEvent.clicks > 1)
{
- /* different button, or time expired */
- MEvent.clicks = 1;
- MEvent.button = ev.button;
+ /* only report double clicks */
+ MEvent.clicks = 2;
mouse_report (ev);
+
+ /* don't report the release */
+ MEvent.clicks = 0;
+ MEvent.button = AnyButton;
}
-#else
+ }
+ else
+ {
+ /* different button, or time expired */
+ MEvent.clicks = 1;
MEvent.button = ev.button;
mouse_report (ev);
+ }
+#else
+ MEvent.button = ev.button;
+ mouse_report (ev);
#endif /* MOUSE_REPORT_DOUBLECLICK */
- }
- else
+ }
+ else
+ {
+ if (ev.button != MEvent.button)
+ MEvent.clicks = 0;
+ switch (ev.button)
{
- if (ev.button != MEvent.button)
- MEvent.clicks = 0;
- switch (ev.button)
- {
- case Button1:
- /* allow shift+left click to extend selection */
- if (ev.state & ShiftMask && ! (PrivateModes & PrivMode_mouse_report))
- {
- if (MEvent.button == Button1 && clickintime)
- selection_rotate (ev.x, ev.y);
- else
- selection_extend (ev.x, ev.y, 1);
- }
+ case Button1:
+ /* allow shift+left click to extend selection */
+ if (ev.state & ShiftMask && ! (PrivateModes & PrivMode_mouse_report))
+ {
+ if (MEvent.button == Button1 && clickintime)
+ selection_rotate (ev.x, ev.y);
else
- {
- if (MEvent.button == Button1 && clickintime)
- MEvent.clicks++;
- else
- MEvent.clicks = 1;
+ selection_extend (ev.x, ev.y, 1);
+ }
+ else
+ {
+ if (MEvent.button == Button1 && clickintime)
+ MEvent.clicks++;
+ else
+ MEvent.clicks = 1;
- selection_click (MEvent.clicks, ev.x, ev.y);
- }
+ selection_click (MEvent.clicks, ev.x, ev.y);
+ }
- MEvent.button = Button1;
- break;
+ MEvent.button = Button1;
+ break;
- case Button3:
- if (MEvent.button == Button3 && clickintime)
- selection_rotate (ev.x, ev.y);
- else
- selection_extend (ev.x, ev.y, 1);
- MEvent.button = Button3;
- break;
- }
+ case Button3:
+ if (MEvent.button == Button3 && clickintime)
+ selection_rotate (ev.x, ev.y);
+ else
+ selection_extend (ev.x, ev.y, 1);
+ MEvent.button = Button3;
+ break;
}
- MEvent.time = ev.time;
- return;
}
+ MEvent.time = ev.time;
+ return;
}
/*
#endif
if (ev.window == TermWin.vt)
{
-#ifdef RXVT_GRAPHICS
- if (ev.subwindow != None)
- rxvt_Gr_ButtonRelease (ev.x, ev.y);
- else
-#endif
-
+ if (reportmode)
{
- if (reportmode)
- {
- /* mouse report from vt window */
- /* don't report release of wheel "buttons" */
- if (ev.button >= 4)
- return;
+ /* mouse report from vt window */
+ /* don't report release of wheel "buttons" */
+ if (ev.button >= 4)
+ return;
#ifdef MOUSE_REPORT_DOUBLECLICK
- /* only report the release of 'slow' single clicks */
- if (MEvent.button != AnyButton
- && (ev.button != MEvent.button
- || (ev.time - MEvent.time
- > MULTICLICK_TIME / 2)))
- {
- MEvent.clicks = 0;
- MEvent.button = AnyButton;
- mouse_report (ev);
- }
-#else /* MOUSE_REPORT_DOUBLECLICK */
+ /* only report the release of 'slow' single clicks */
+ if (MEvent.button != AnyButton
+ && (ev.button != MEvent.button
+ || (ev.time - MEvent.time
+ > MULTICLICK_TIME / 2)))
+ {
+ MEvent.clicks = 0;
MEvent.button = AnyButton;
mouse_report (ev);
-#endif /* MOUSE_REPORT_DOUBLECLICK */
- return;
}
- /*
- * dumb hack to compensate for the failure of click-and-drag
- * when overriding mouse reporting
- */
- if (PrivateModes & PrivMode_mouse_report
- && bypass_keystate
- && ev.button == Button1 && MEvent.clicks <= 1)
- selection_extend (ev.x, ev.y, 0);
+#else /* MOUSE_REPORT_DOUBLECLICK */
+ MEvent.button = AnyButton;
+ mouse_report (ev);
+#endif /* MOUSE_REPORT_DOUBLECLICK */
+ return;
+ }
+ /*
+ * dumb hack to compensate for the failure of click-and-drag
+ * when overriding mouse reporting
+ */
+ if (PrivateModes & PrivMode_mouse_report
+ && bypass_keystate
+ && ev.button == Button1 && MEvent.clicks <= 1)
+ selection_extend (ev.x, ev.y, 0);
- switch (ev.button)
- {
- case Button1:
- case Button3:
- selection_make (ev.time);
- break;
- case Button2:
- selection_request (ev.time, ev.x, ev.y);
- break;
+ switch (ev.button)
+ {
+ case Button1:
+ case Button3:
+ selection_make (ev.time);
+ break;
+ case Button2:
+ selection_request (ev.time, ev.x, ev.y);
+ break;
#ifdef MOUSE_WHEEL
- case Button4:
- case Button5:
- {
- int i;
- page_dirn v;
-
- v = (ev.button == Button4) ? UP : DN;
- if (ev.state & ShiftMask)
- i = 1;
- else if ((Options & Opt_mouseWheelScrollPage))
- i = TermWin.nrow - 1;
- else
- i = 5;
+ case Button4:
+ case Button5:
+ {
+ int i;
+ page_dirn v;
+
+ v = (ev.button == Button4) ? UP : DN;
+ if (ev.state & ShiftMask)
+ i = 1;
+ else if ((Options & Opt_mouseWheelScrollPage))
+ i = TermWin.nrow - 1;
+ else
+ i = 5;
# ifdef MOUSE_SLIP_WHEELING
- if (ev.state & ControlMask)
- {
- mouse_slip_wheel_speed += (v ? -1 : 1);
- mouse_slip_wheel_delay = SCROLLBAR_CONTINUOUS_DELAY;
- }
+ if (ev.state & ControlMask)
+ {
+ mouse_slip_wheel_speed += (v ? -1 : 1);
+ mouse_slip_wheel_delay = SCROLLBAR_CONTINUOUS_DELAY;
+ }
# endif
# ifdef JUMP_MOUSE_WHEEL
- scr_page (v, i);
+ scr_page (v, i);
+ scr_refresh (SMOOTH_REFRESH);
+ scrollbar_show (1);
+# else
+ while (i--)
+ {
+ scr_page (v, 1);
scr_refresh (SMOOTH_REFRESH);
scrollbar_show (1);
-# else
- while (i--)
- {
- scr_page (v, 1);
- scr_refresh (SMOOTH_REFRESH);
- scrollbar_show (1);
- }
+ }
# endif
- }
- break;
+ }
+ break;
#endif
- }
}
}
#ifdef MENUBAR
{
unsigned char ch, cmd = cmd_getc ();
-#ifndef RXVT_GRAPHICS
if (cmd == 'Q')
{ /* query graphics */
tt_printf ("\033G0\n"); /* no graphics */
do
ch = cmd_getc ();
while (ch != ':');
-#else
- unsigned int nargs;
- int args[NGRX_PTS];
- unsigned char *text = NULL;
-
- if (cmd == 'Q')
- { /* query graphics */
- tt_printf ("\033G1\n"); /* yes, graphics (color) */
- return;
- }
- for (nargs = 0; nargs < (sizeof (args) / sizeof (args[0])) - 1;)
- {
- int neg;
-
- ch = cmd_getc ();
- neg = (ch == '-');
- if (neg || ch == '+')
- ch = cmd_getc ();
-
- for (args[nargs] = 0; isdigit (ch); ch = cmd_getc ())
- args[nargs] = args[nargs] * 10 + (ch - '0');
- if (neg)
- args[nargs] = -args[nargs];
-
- nargs++;
- args[nargs] = 0;
- if (ch != ';')
- break;
- }
-
- if ((cmd == 'T') && (nargs >= 5))
- {
- int i, len = args[4];
-
- text = (unsigned char *)rxvt_malloc ((len + 1) * sizeof (char));
-
- if (text != NULL)
- {
- for (i = 0; i < len; i++)
- text[i] = cmd_getc ();
- text[len] = '\0';
- }
- }
- Gr_do_graphics (cmd, nargs, args, text);
-#endif
}
/*}}} */
/* #define CTRL_TAB_MAKES_META */
/* #define MOD4_TAB_MAKES_META */
-/*
- * default mode switch when greek keyboard is enabled (i.e. GREEK_SUPPORT)
- */
-#ifndef GREEK_KEYBOARD_MODESWITCH
-# define GREEK_KEYBOARD_MODESWITCH XK_Mode_switch
-#endif
-
/*--------------------------------MOUSE---------------------------------*/
/*
* Disable sending escape sequences (up, down, page up/down)
+++ /dev/null
-/*---------------------------------*C*--------------------------------------*
- * File: grkelot.c
- *--------------------------------------------------------------------------*
- *
- * All portions of code are copyright by their respective author/s.
- * Copyright (c) 1994,1995 Angelo Haritsis. All rights reserved.
- * - original version
- * Copyright (c) 1997,1998 Oezger Kesim <kesim@math.fu-berlin.de>
- *
- * 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.
- *--------------------------------------------------------------------------*
- * Synopsis: string -> greek ELOT928 or IBM437 string;
- * 4-state FSM implementation.
- *
- * System: Any (ANSI C)
- *
- * This is code derived from a more generic key remapper written by the same
- * author and used in other environments. It was not written only
- * for greek kbd bindings. An extension to other languages is easy
- * (well don't know how the FSM lends itself to Far East languages).
- *
- * The FSM can have MAX_STATES states (change it for more).
- * Each state contains:
- * 1. many tranlsation tables (registered via kstate_add_xlat ())
- * 2. many switch codes for transition to other states (registered via
- * kstate_add_switcher ()) : limit is static now: MAX_SWITCHER
- * 3. life: the number of xlations allowed in a state (0 = unlimited)
- *
- * Format of tranlation strings:
- * <first>-<last>:n1,n2,n3,...
- * Format of switcher string:
- * A<char>:<state_no>
- * (other switchers apart from A=ascii can be supported; not in this context)
- * Format of life string:
- * L<N> (N=0,1,...)
- *-------------------------------------------------------------------------*
- * Written by Angelo Haritis.
- *
- * Redistribution and use in source and binary forms are permitted provided
- * that the above copyright notice and this paragraph are duplicated in all
- * such forms and that any documentation, advertising materials, and other
- * materials related to such distribution and use acknowledge that the
- * software was developed by Angelo Haritsis.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- *
- * NB: DO NOT ALTER! THIS CODE IS USED IN MANY PLATFORMS!!!
- *
- * TODO: make it more dynamic (linked lists is an idea but slower)
- */
-
-#define RXVT /* define for use by rxvt */
-
-#ifdef RXVT
-#include "../config.h" /* NECESSARY */
-#include "rxvt.h" /* NECESSARY */
-#include "grkelot.intpro" /* PROTOS for internal routines */
-#endif /* RXVT */
-
-#ifdef GREEK_SUPPORT
-#include "grkelot.h"
-#include <stdlib.h>
-#include <string.h>
-
-/* --- Macros, Types --------- */
-#define MAX_STATES 4 /* max # states for the FSM */
-#define MAX_SWITCHER 2U /* per state */
-#define MAX_VAL 256 /* for temp allocation */
-
-typedef unsigned char u_char;
-typedef unsigned int u_int;
-typedef unsigned long u_long;
-
-typedef struct s_xlat
- {
- u_int first, last;
- u_int *pval; /* array of translated values */
- }
-K_XLAT;
-
-typedef struct s_switch
- {
- u_char type; /* Ascii, Virtual, Scan */
- u_int code;
- u_char nextstate;
- u_char on; /* current state of key: 0 = off */
- }
-K_SWITCH;
-
-typedef struct s_state
- {
- u_int num_xlat; /* number of translations */
- K_XLAT *xlat; /* State translations ((dynamic - realloc'ed) */
- u_int num_switcher; /* number of switcher keys */
- K_SWITCH switcher[MAX_SWITCHER]; /* switcher keys to other states */
- u_char life; /* 0 = until switched by key */
- u_char prev_state; /* filled when jumped to a new state */
- }
-K_STATE;
-
-/* type for each one of the different greek standards (xlat types) */
-typedef struct s_xlat_type
- {
- char *plain;
- char *accent;
- char *accent_xtra;
- char *umlaut;
- char *acc_uml;
- }
-XLAT_TYPE;
-
-/* --- Local Data ------------ */
-static K_STATE State[MAX_STATES];
-
-/* Current State */
-static u_char nStateNow = 0;
-static K_STATE *pStateNow = &State[0];
-static int GreekMode = GREEK_ELOT928;
-
-/*
- * The following are hard-coded for now. The idea is that such strings would
- * be read from a config file making it possible to change language/encodings
- * more flexibly.
- */
-/* elot 928 xlations */
-static char elot_xlat_plain[] = "65-122:193,194,216,196,197,214,195,199,201,206,202,203,204,205,207,208,81,209,211,212,200,217,87,215,213,198,91,92,93,94,95,96,225,226,248,228,229,246,227,231,233,238,234,235,236,237,239,240,113,241,243,244,232,249,242,247,245,230";
-
-/* c and s give copyright and section sign */
-static char elot_xlat_acc[] = "65-122:182,194,216,196,184,214,195,185,186,206,202,203,204,205,188,208,81,209,211,212,200,191,87,215,190,198,91,92,93,94,95,96,220,226," /*248 */ "169,228,221,246,227,222,223,238,234,235,236,237,252,240,113,241," /*243 */ "167,244,232,254,242,247,253,230";
-static char elot_xlat_acc_xtra[] = "46-62:183,47,48,49,50,51,52,53,54,55,56,57,58,59,171,61,187"; /* anw teleia, quotes */
-static char elot_xlat_uml[] = "65-122:193,194,216,196,197,214,195,199,218,206,202,203,204,205,207,208,81,209,211,212,200,217,87,215,219,198,91,92,93,94,95,96,225,226,248,228,229,246,227,231,250,238,234,235,236,237,239,240,113,241,243,244,232,249,242,247,251,230";
-static char elot_xlat_umacc[] = "65-122:193,194,216,196,197,214,195,199,201,206,202,203,204,205,207,208,81,209,211,212,200,217,87,215,213,198,91,92,93,94,95,96,225,226,248,228,229,246,227,231,192,238,234,235,236,237,239,240,113,241,243,244,232,249,242,247,224,230";
-
-/* ibm 437 xlations */
-static char i437_xlat_plain[] = "65-122:128,129,150,131,132,148,130,134,136,141,137,138,139,140,142,143,81,144,145,146,135,151,87,149,147,133,91,92,93,94,95,96,152,153,175,155,156,173,154,158,160,165,161,162,163,164,166,167,113,168,169,171,159,224,170,174,172,157";
-static char i437_xlat_acc[] = "65-122:234,129,150,131,235,148,130,236,237,141,137,138,139,140,238,143,81,144,145,146,135,240,87,149,239,133,91,92,93,94,95,96,225,153,175,155,226,173,154,227,229,165,161,162,163,164,230,167,113,168,169,171,159,233,170,174,231,157";
-static char i437_xlat_acc_xtra[] = "46-46:250"; /* anw teleia */
-static char i437_xlat_uml[] = "65-122:128,129,150,131,132,148,130,134,136,141,137,138,139,140,142,143,81,144,145,146,135,151,87,149,147,133,91,92,93,94,95,96,152,153,175,155,156,173,154,158,228,165,161,162,163,164,166,167,113,168,169,171,159,224,170,174,232,157";
-static char i437_xlat_umacc[] = "65-122:128,129,150,131,132,148,130,134,136,141,137,138,139,140,142,143,81,144,145,146,135,151,87,149,147,133,91,92,93,94,95,96,152,153,175,155,156,173,154,158,42,165,161,162,163,164,166,167,113,168,169,171,159,224,170,174,42,157";
-
-/*
- * currently ELOT928 and IBM437 are supported; easy to include others
- * (not recommended: stick to just these 2 if not only the ELOT one)
- */
-static XLAT_TYPE xlat_type[] =
- {
- {elot_xlat_plain, elot_xlat_acc, elot_xlat_acc_xtra, elot_xlat_uml, elot_xlat_umacc},
- {i437_xlat_plain, i437_xlat_acc, i437_xlat_acc_xtra, i437_xlat_uml, i437_xlat_umacc},
- };
-
-/* the current trasnaltion type */
-static XLAT_TYPE *xlat_now = &xlat_type[GREEK_ELOT928];
-
-#define NUM_XLAT_TYPES (sizeof(xlat_type) / sizeof(xlat_type[0]))
-
-static void kstate_add_xlat (char *str);
-static void kstate_add_switcher (char *str);
-static void kstate_set_life (char *str);
-
-/* --- Functions ------------- */
-void
-kstate_setcurr (int stateno)
-{
- u_char prev_state;
-
- if ((u_int) stateno > (u_int) MAX_STATES)
- return;
- if (pStateNow->life == 1)
- prev_state = pStateNow->prev_state;
- else
- prev_state = nStateNow;
- pStateNow = &State[nStateNow = stateno];
- pStateNow->prev_state = prev_state;
-}
-
-void
-kstate_init (void)
-{
- pStateNow->num_xlat = pStateNow->num_switcher = pStateNow->life = pStateNow->prev_state = 0;
- pStateNow->xlat = NULL;
-}
-
-void
-kstate_end (void)
-{
- int i;
-
- for (i = 0; i < pStateNow->num_xlat; i++)
- free (pStateNow->xlat[i].pval);
- if (pStateNow->num_xlat > 0)
- free (pStateNow->xlat);
-}
-
-/*
- * Hard coded ELOT-928 translations. Could read these from an rc-type file
- * to support other remappers.
- */
-void
-kstate_init_all (int greek_mode)
-{
- /* the translation tables for the 4 FSM states for ELOT-928 mappings */
- int i;
-
- for (i = 0; i < MAX_STATES; i++)
- {
- kstate_setcurr (i);
- kstate_init ();
- }
- if (greek_mode < 0 || greek_mode >= NUM_XLAT_TYPES) /* avoid death */
- greek_mode = GREEK_ELOT928;
- xlat_now = &xlat_type[greek_mode];
- kstate_setcurr (0);
- kstate_add_xlat (xlat_now->plain);
- kstate_add_switcher ("A;:1");
- kstate_add_switcher ("A::2");
- kstate_set_life ("L0");
-
- kstate_setcurr (1);
- kstate_add_xlat (xlat_now->accent);
- kstate_add_xlat (xlat_now->accent_xtra);
- kstate_add_switcher ("A::3");
- kstate_set_life ("L1");
-
- kstate_setcurr (2);
- kstate_add_xlat (xlat_now->umlaut);
- kstate_add_switcher ("A;:3");
- kstate_set_life ("L1");
-
- kstate_setcurr (3);
- kstate_add_xlat (xlat_now->acc_uml);
- kstate_set_life ("L1");
-}
-
-void
-kstate_end_all (void)
-{
- int i;
-
- for (i = 0; i < MAX_STATES; i++)
- {
- kstate_setcurr (i);
- kstate_end ();
- }
- kstate_setcurr (0);
-}
-
-/*
- * reset FSM
- */
-void
-kstate_reset (void)
-{
- kstate_setcurr (0);
-}
-
-void
-kstate_add_xlat (char *str)
-{
- K_XLAT *xlat;
- u_int *pval_tmp;
- char *sval;
- int i;
-
- if (str == NULL)
- return;
- /* add a new xlat table in state */
- if (pStateNow->num_xlat == 0)
- {
- pStateNow->xlat = malloc (sizeof (K_XLAT));
- }
- else /* prefer contiguous data, realloc */
- pStateNow->xlat = realloc (pStateNow->xlat, (pStateNow->num_xlat + 1) * sizeof (K_XLAT));
- xlat = &pStateNow->xlat[pStateNow->num_xlat];
- /* parse str and derive first, last, values */
- xlat->first = (u_int) atoi (strtok (str, "-"));
- xlat->last = (u_int) atoi (strtok (NULL, ":"));
- i = 0;
- pval_tmp = calloc (MAX_VAL, sizeof (K_XLAT));
- while ((sval = strtok (NULL, ",")) != NULL)
- pval_tmp[i++] = (u_int) (atoi (sval));
- xlat->pval = calloc (i, sizeof (K_XLAT));
- if (xlat->pval != NULL)
- memcpy (xlat->pval, pval_tmp, i * sizeof (u_int));
- free (pval_tmp);
- pStateNow->num_xlat++;
-}
-
-/*
- * Ascii only for this implementation
- */
-void
-kstate_add_switcher (char *str)
-{
- K_SWITCH *switcher;
-
- if (str == NULL)
- return;
- if (pStateNow->num_switcher >= MAX_SWITCHER)
- return;
- switcher = &pStateNow->switcher[pStateNow->num_switcher];
- switch (switcher->type = str[0])
- {
- case 'A': /* ascii eg: A;:2 */
- switcher->code = str[1];
- switcher->nextstate = atoi (&str[3]);
- break;
- }
- switcher->on = 0;
- pStateNow->num_switcher++;
-}
-
-/* L1 or L0 */
-void
-kstate_set_life (char *str)
-{
- pStateNow->life = atoi (&str[1]);
-}
-
-unsigned int
-kstate_cxlat (unsigned int c)
-{
- int i;
-
- /* check for ascii switcher */
- for (i = 0; i < pStateNow->num_switcher; i++)
- if (pStateNow->switcher[i].type == 'A' && /* only ascii here */
- c == pStateNow->switcher[i].code)
- {
- kstate_setcurr (pStateNow->switcher[i].nextstate);
- pStateNow->switcher[i].on = 1;
- return ((unsigned int)-1);
- }
- /* do translation */
- for (i = 0; i < pStateNow->num_xlat; i++)
- if (c >= pStateNow->xlat[i].first && c <= pStateNow->xlat[i].last)
- {
- c = pStateNow->xlat[i].pval[c - pStateNow->xlat[i].first];
- break;
- }
- /* switch back to previous state if life of current is 1 */
- if (pStateNow->life == 1)
- kstate_setcurr (pStateNow->prev_state);
- return (c);
-}
-
-#ifdef RXVT
-void
-greek_init (void)
-{
- kstate_init_all (GreekMode);
-}
-
-void
-greek_end (void)
-{
- kstate_end_all ();
-}
-
-void
-greek_reset (void)
-{
- kstate_reset ();
-}
-
-void
-greek_setmode (int greek_mode)
-{
- GreekMode = greek_mode;
-}
-
-int
-greek_getmode (void)
-{
- return (GreekMode);
-}
-
-/*
- * xlate a given string in-place - return new string length
- */
-int
-greek_xlat (char *s, int num_chars)
-{
- int i, count;
- unsigned int c;
-
- for (i = 0, count = 0; i < num_chars; i++)
- {
- c = kstate_cxlat ((unsigned int)s[i]);
- if (c != -1)
- s[count++] = (char)c;
- }
- s[count] = '\0';
- return (count);
-
-}
-
-#ifdef TEST
-int
-main (void)
-{
- /*char text[] = "abcdef;aGDZXC"; */
- char text[] = "abcdef;a:ibgdezhuiklmnjoprstyfxcv";
-
- kstate_init_all (GREEK_ELOT928);
- printf ("text: %s\n", text);
- greek_xlat (text, strlen (text));
- printf ("xlat'ed text: %s\n", text);
- kstate_end_all ();
- return 0;
-}
-#endif
-#endif /* RXVT */
-
-#endif /* GREEK_SUPPORT */
+++ /dev/null
-/*
- * File: grkelot.h
- *
- * Synopsis: string -> greek ELOT928 string; 4-state FSM.
- *
- * Copyright (c) 1994 Angelo Haritsis. All rights reserved.
- * Copyright (c) 1997,1998 Oezguer Kesim <kesim@math.fu-berlin.de>
- *
- * 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.
- */
-
-#ifndef GRKELOT_H
-#define GRKELOT_H
-
-#define GREEK_ELOT928 0
-#define GREEK_IBM437 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
- extern void greek_init (void);
- extern void greek_end (void);
- extern void greek_reset (void);
- extern void greek_setmode (int greek_mode);
- extern int greek_getmode (void);
- extern int greek_xlat (char *s, int num_chars);
-#ifdef __cplusplus
-}
-#endif
-#endif /* _GRKELOT_H */
ks_smallfont = XK_less;
#endif
-#ifdef GREEK_SUPPORT
- ks_greekmodeswith = GREEK_KEYBOARD_MODESWITCH;
-#endif
-
refresh_limit = 1;
refresh_type = SLOW_REFRESH;
prev_nrow = prev_ncol = 0;
SavedModes |= PrivMode_menuBar;
}
-#ifdef GREEK_SUPPORT
- greek_init ();
-#endif
-
#ifdef CURSOR_BLINK
if (Options & Opt_cursorBlink)
(void)gettimeofday (&lastcursorchange, NULL);
init_xlocale ();
scr_reset (); /* initialize screen */
-#ifdef RXVT_GRAPHICS
- Gr_reset (); /* reset graphics */
-#endif
#if 0
XSynchronize (display->display, True);
XMoveResizeWindow (display->display, TermWin.vt, window_vt_x,
window_vt_y, TermWin_TotalWidth (),
TermWin_TotalHeight ());
-#ifdef RXVT_GRAPHICS
- if (old_height)
- Gr_Resize (old_width - szHint.base_width,
- old_height - szHint.base_height);
-#endif
scr_clear ();
#ifdef XPM_BACKGROUND
resize_pixmap ();
#include "defaultfont.extpro"
-#ifdef RXVT_GRAPHICS
-# include "graphics.extpro"
-#endif
-#ifdef GREEK_SUPPORT
-# include "grkelot.extpro"
-#endif
-
#include "init.extpro"
#ifdef UTMP_SUPPORT
} ttymode_t;
#endif
-#ifdef GREEK_SUPPORT
-# include "grkelot.h"
-#endif
#ifdef XPM_BACKGROUND
# ifdef XPM_INC_X11
# include <X11/xpm.h>
#endif
#if (MENUBAR_MAX)
Rs_menu,
-#endif
-#ifdef GREEK_SUPPORT
- Rs_greek_keyboard,
- Rs_greektoggle_key,
#endif
Rs_loginShell,
Rs_jumpScroll,
selection_wait,
selection_type;
/* ---------- */
-#ifdef GREEK_SUPPORT
- short greek_mode; /* greek keyboard mode */
-#endif
short rvideo;
int16_t num_scr; /* screen: number lines scrolled */
unsigned int prev_ncol, /* screen: previous number of columns */
prev_nrow; /* screen: previous number of rows */
-#ifdef RXVT_GRAPHICS
- uint16_t gr_prev_start;
-#endif
/* ---------- */
rend_t rstyle;
/* ---------- */
#if defined (HOTKEY_CTRL) || defined (HOTKEY_META)
KeySym ks_bigfont, ks_smallfont;
#endif
-#ifdef GREEK_SUPPORT
- KeySym ks_greekmodeswith;
-#endif
#ifdef USE_XIM
rxvt_xim *input_method;
XIC Input_Context;
#endif
struct mouse_event MEvent;
XComposeStatus compose;
-#ifdef RXVT_GRAPHICS
- int graphics_up;
- struct grwin_t *gr_root;
-#endif
ttymode_t tio;
#ifdef UTMP_SUPPORT
# ifdef HAVE_STRUCT_UTMP
bgPixmap_t bgPixmap;
XpmAttributes xpmAttr; /* originally loaded pixmap and its scaling */
#endif
-#ifdef MULTICHAR_SET
- int oldcursormulti;
- void (*multichar_decode) (unsigned char *str, int len);
-#endif
#ifndef RESET_TTY_TO_COMMON_DEFAULTS
struct stat ttyfd_stat; /* original status of our tty */
#endif
bar_t BarList;
# endif /* (MENUBAR_MAX > 1) */
#endif
-#ifdef RXVT_GRAPHICS
- Window gr_last_id;
-#endif
#ifdef CURSOR_BLINK
struct timeval lastcursorchange;
#endif
scr_clear ();
scr_refresh (SLOW_REFRESH);
-#ifdef RXVT_GRAPHICS
- Gr_reset ();
-#endif
}
/* ------------------------------------------------------------------------- *
SWAP_IT (screen.flags, swap.flags, int);
screen.flags |= Screen_VisibleCursor;
swap.flags |= Screen_VisibleCursor;
-
-# ifdef RXVT_GRAPHICS
-
- if (Gr_Displayed ())
- {
- Gr_scroll (0);
- Gr_ChangeScreen ();
- }
-# endif
#else
# ifdef SCROLL_ON_NO_SECONDARY
-# ifdef RXVT_GRAPHICS
- if (Gr_Displayed ())
- Gr_ClearScreen ();
-# endif
- if (current_screen == PRIMARY
-# ifdef RXVT_GRAPHICS
- && !Gr_Displayed ()
-# endif
- )
+ if (current_screen == PRIMARY)
scr_scroll_text (0, (prev_nrow - 1), prev_nrow, 0);
# endif
#endif
(unsigned int)j, rstyle);
}
-#ifdef RXVT_GRAPHICS
- if (Gr_Displayed ())
- Gr_scroll (count);
-#endif
-
return count;
}
{
want_refresh = 1;
ZERO_SCROLLBACK ();
-#ifdef RXVT_GRAPHICS
- if (Gr_Displayed ())
- Gr_scroll (0);
-#endif
D_SCREEN ((stderr, "rxvt_scr_gotorc (r:%s%d,c:%s%d): from (r:%d,c:%d)", (relative & R_RELATIVE ? "+" : ""), row, (relative & C_RELATIVE ? "+" : ""), col, screen.cur.row, screen.cur.col));
ZERO_SCROLLBACK ();
-#ifdef RXVT_GRAPHICS
- if (Gr_Displayed ())
- Gr_scroll (0);
-#endif
-
screen.flags &= ~Screen_WrapNext;
if ((screen.cur.row == screen.bscroll && direction == UP)
|| (screen.cur.row == screen.tscroll && direction == DN))
D_SCREEN ((stderr, "rxvt_scr_erase_line (%d) at screen row: %d", mode, screen.cur.row));
ZERO_SCROLLBACK ();
-#ifdef RXVT_GRAPHICS
- if (Gr_Displayed ())
- Gr_scroll (0);
-#endif
-
selection_check (1);
screen.flags &= ~Screen_WrapNext;
break;
case 2: /* erase whole screen */
selection_check (3);
-#ifdef RXVT_GRAPHICS
- Gr_ClearScreen ();
-#endif
row = 0;
num = TermWin.nrow;
break;
ZERO_SCROLLBACK ();
-#ifdef RXVT_GRAPHICS
- if (Gr_Displayed ())
- Gr_scroll (0);
-#endif
-
selection_check (1);
if (screen.cur.row > screen.bscroll)
want_refresh = 1;
ZERO_SCROLLBACK ();
-#ifdef RXVT_GRAPHICS
- if (Gr_Displayed ())
- Gr_scroll (0);
-#endif
-
if (count <= 0)
return;
if (TermWin.view_start != oldviewstart)
{
want_refresh = 1;
-#ifdef RXVT_GRAPHICS
- if (Gr_Displayed ())
- Gr_scroll (0);
-#endif
num_scr -= (TermWin.view_start - oldviewstart);
}
return (int) (TermWin.view_start - oldviewstart);
/*--------------------------------*-C-*---------------------------------*
* File: xdefaults.c
*----------------------------------------------------------------------*
- * $Id: xdefaults.C,v 1.11 2004-02-13 12:16:21 pcg Exp $
+ * $Id: xdefaults.C,v 1.12 2004-02-22 08:09:38 pcg Exp $
*
* All portions of code are copyright by their respective author/s.
* Copyright (c) 1994 Robert Nation <nation@rocket.sanders.lockheed.com>
STRG (Rs_imLocale, "imLocale", "imlocale", "string", "locale to use for input method"),
#endif
#endif /* USE_XIM */
-#ifdef GREEK_SUPPORT
- STRG (Rs_greek_keyboard, "greek_keyboard", "grk", "mode",
- "greek keyboard mapping; mode = iso | ibm"),
- RSTRG (Rs_greektoggle_key, "greektoggle_key", "keysym"),
-#endif
STRG (Rs_name, NULL, "name", "string",
"client instance, icon, and title strings"),
STRG (Rs_title, "title", "title", "string", "title name for window"),
# endif
#endif
","
-#if defined(GREEK_SUPPORT)
- "Greek,"
-#endif
-#if defined(RXVT_GRAPHICS)
- "graphics,"
-#endif
#if defined(NO_BACKSPACE_KEY)
"no_backspace,"
#endif
* even without resources, at least do this setup for command-line
* options and command-line long options
*/
-#ifdef MULTICHAR_SET
- set_multichar_encoding (rs[Rs_multichar_encoding]);
-#endif
-#ifdef GREEK_SUPPORT
- /* this could be a function in grkelot.c */
- /* void set_greek_keyboard (const char * str); */
- if (rs[Rs_greek_keyboard])
- {
- if (!STRCMP (rs[Rs_greek_keyboard], "iso"))
- greek_setmode (GREEK_ELOT928); /* former -grk9 */
- else if (!STRCMP (rs[Rs_greek_keyboard], "ibm"))
- greek_setmode (GREEK_IBM437); /* former -grk4 */
- }
- {
- KeySym sym;
-
- if (rs[Rs_greektoggle_key]
- && ((sym = XStringToKeysym (rs[Rs_greektoggle_key])) != 0))
- ks_greekmodeswith = sym;
- }
-#endif /* GREEK_SUPPORT */
#if defined (HOTKEY_CTRL) || defined (HOTKEY_META)
-
- {
- KeySym sym;
-
- if (rs[Rs_bigfont_key]
- && ((sym = XStringToKeysym (rs[Rs_bigfont_key])) != 0))
- ks_bigfont = sym;
- if (rs[Rs_smallfont_key]
- && ((sym = XStringToKeysym (rs[Rs_smallfont_key])) != 0))
- ks_smallfont = sym;
- }
+ KeySym sym;
+
+ if (rs[Rs_bigfont_key]
+ && ((sym = XStringToKeysym (rs[Rs_bigfont_key])) != 0))
+ ks_bigfont = sym;
+ if (rs[Rs_smallfont_key]
+ && ((sym = XStringToKeysym (rs[Rs_smallfont_key])) != 0))
+ ks_smallfont = sym;
#endif
}