Cuda się dzieją z rxvt... z xterm też.
Marcin 'Qrczak' Kowalczyk
mk167280 w zodiac.mimuw.edu.pl
Śro, 22 Lis 2000, 18:58:55 CET
Wed, 22 Nov 2000 16:03:00 +0100, Michal Kochanowicz <mkochano w ee.pw.edu.pl> pisze:
> 1. Uruchamiam rxvt przez wybór z menu WindowMakera.
> 2. Uruchamiam rxvt z xterma.
>
> W (1) BackSpace działa, w (2) generuje '^?'. Środowiska obu nie
> zawierają istotnych różnic.
Różnią się pewnie parametry terminala w jądrze:
stty
Ale nie wiem dlaczego.
U mnie w każdej sytuacji erase jest ^?, o czym wie jądro (tzn.
parametr, do którego interfejs jest przez stty), terminfo i emulatory
terminala - więc wszystko się zgadza.
Nie zgadzały się za to inne klawisze. Na przykład F1-F4 miały inne
kody w gnome-terminalu (^[OP ^[OQ ^[OR ^[OS) i we wszystkich innych
emulatorach terminala jakie mam pod ręką (^[11~ ^[12~ ^[13~ ^[14~, jak
na konsoli). Co ciekawe, w terminfo jest łata pochodzącega z XFree,
która terminalowi xterm-color przypisuje takie ciągi jak generuje
gnome-terminal - ale nawet xterm z XFree używa innych!
Uznałem ^[11..14~ za słuszniejsze i poprawiłem sobie gnome-libs
przez zamianę łaty fix_bs_del_keys na następującą. Przy okazji
z Shift+F1..F10 robią się F11-F20.
------------------------------------------------------------------------
diff -urN gnome-libs-1.2.8.orig/zvt/zvtterm.c gnome-libs-1.2.8/zvt/zvtterm.c
--- gnome-libs-1.2.8.orig/zvt/zvtterm.c Tue Oct 24 01:12:43 2000
+++ gnome-libs-1.2.8/zvt/zvtterm.c Sun Nov 19 16:25:45 2000
@@ -2337,8 +2337,8 @@
*/
/* remapping table for function keys 5-20 */
-static unsigned char f5_f20_remap[] =
- {15,17,18,19,20,21,23,24,25,26,28,29,31,32,33,34};
+static unsigned char f1_f20_remap[] =
+ {11,12,13,14,15,17,18,19,20,21,23,24,25,26,28,29,31,32,33,34};
static gint
zvt_term_key_press (GtkWidget *widget, GdkEventKey *event)
@@ -2366,17 +2366,11 @@
handled = TRUE;
switch (event->keyval) {
case GDK_BackSpace:
- if (event->state & GDK_MOD1_MASK)
- *p++ = '\033';
-
- if (term->swap_del_key)
- *p++ = '\177';
- else
- *p++ = 8;
+ *p++ = '\177';
break;
case GDK_KP_Right:
case GDK_Right:
- cursor ="C";
+ cursor = "C";
goto do_cursor;
case GDK_KP_Left:
case GDK_Left:
@@ -2397,21 +2391,14 @@
break;
case GDK_KP_Insert:
case GDK_Insert:
- if ((event->state & GDK_SHIFT_MASK) == GDK_SHIFT_MASK){
+ if (event->state & GDK_SHIFT_MASK){
request_paste (widget, 0, event->time);
} else {
p+=sprintf (p, "\033[2~");
}
break;
- case GDK_Delete:
- if (event->state & GDK_MOD1_MASK)
- *p++ = '\033';
- if (term->swap_del_key)
- *p++ = 8;
- else
- *p++ = '\177';
- break;
case GDK_KP_Delete:
+ case GDK_Delete:
p+=sprintf (p, "\033[3~");
break;
case GDK_KP_Home:
@@ -2438,26 +2425,28 @@
break;
case GDK_KP_F1:
- case GDK_F1:
- p+=sprintf (p, "\033OP");
+ p+=sprintf (p, "\033[11~");
break;
case GDK_KP_F2:
- case GDK_F2:
- p+=sprintf (p, "\033OQ");
+ p+=sprintf (p, "\033[12~");
break;
case GDK_KP_F3:
- case GDK_F3:
- p+=sprintf (p, "\033OR");
+ p+=sprintf (p, "\033[13~");
break;
case GDK_KP_F4:
- case GDK_F4:
- p+=sprintf (p, "\033OS");
+ p+=sprintf (p, "\033[14~");
break;
+ case GDK_F1: case GDK_F2: case GDK_F3: case GDK_F4:
case GDK_F5: case GDK_F6: case GDK_F7: case GDK_F8:
- case GDK_F9: case GDK_F10: case GDK_F11: case GDK_F12:
- case GDK_F13: case GDK_F14: case GDK_F15: case GDK_F16:
- case GDK_F17: case GDK_F18: case GDK_F19: case GDK_F20:
- p+=sprintf (p, "\033[%d~", f5_f20_remap[event->keyval-GDK_F5]);
+ case GDK_F9: case GDK_F10:
+ if (event->state & GDK_SHIFT_MASK) {
+ p+=sprintf (p, "\033[%d~", f1_f20_remap[event->keyval-GDK_F1+10]);
+ break;
+ }
+ case GDK_F11: case GDK_F12: case GDK_F13: case GDK_F14:
+ case GDK_F15: case GDK_F16: case GDK_F17: case GDK_F18:
+ case GDK_F19: case GDK_F20:
+ p+=sprintf (p, "\033[%d~", f1_f20_remap[event->keyval-GDK_F1]);
break;
case GDK_KP_0: case GDK_KP_1: case GDK_KP_2: case GDK_KP_3:
@@ -3302,8 +3291,6 @@
{
g_return_if_fail (term != NULL);
g_return_if_fail (ZVT_IS_TERM (term));
-
- term->swap_del_key = state != 0;
}
/*
diff -urN gnome-libs-1.2.8.orig/zvt/zvtterm.h gnome-libs-1.2.8/zvt/zvtterm.h
--- gnome-libs-1.2.8.orig/zvt/zvtterm.h Sat Mar 18 08:57:13 2000
+++ gnome-libs-1.2.8/zvt/zvtterm.h Sun Nov 19 16:11:44 2000
@@ -124,7 +124,6 @@
unsigned int scroll_on_output:1;
unsigned int transparent:1; /*transparent background*/
unsigned int shaded:1; /*transparent background with shade*/
- unsigned int swap_del_key:1; /* swap the del and backspace keys */
};
struct _ZvtTermClass
------------------------------------------------------------------------
Do tego trzeba poprawić ncurses:
------------------------------------------------------------------------
diff -urN ncurses-5.1.orig/misc/terminfo.src ncurses-5.1/misc/terminfo.src
--- ncurses-5.1.orig/misc/terminfo.src Sun Nov 19 16:38:55 2000
+++ ncurses-5.1/misc/terminfo.src Sun Nov 19 16:52:31 2000
@@ -2530,7 +2530,7 @@
ka3=\EOu,
kb2=\EOy,
kbeg=\EOE,
- kbs=^H,
+ kbs=\177,
kc1=\EOq,
kc3=\EOs,
kcub1=\EOD,
@@ -2540,7 +2540,7 @@
kdch1=\E[3~,
kend=\E[4~,
kent=\EOM,
- kf1=\EOP,
+ kf1=\E[11~,
kf10=\E[21~,
kf11=\E[23~,
kf12=\E[24~,
@@ -2551,10 +2551,10 @@
kf17=\E[31~,
kf18=\E[32~,
kf19=\E[33~,
- kf2=\EOQ,
+ kf2=\E[12~,
kf20=\E[34~,
- kf3=\EOR,
- kf4=\EOS,
+ kf3=\E[13~,
+ kf4=\E[14~,
kf5=\E[15~,
kf6=\E[17~,
kf7=\E[18~,
@@ -2657,7 +2657,7 @@
op=\E[m,
setab=\E[4%p1%dm,
setaf=\E[3%p1%dm,
- use=xterm-r6,
+ use=xterm-xfree86,
#
xterm-boldso|xterm with bold for standout (X Window System),
rmso=\E[m,
------------------------------------------------------------------------
Dzięki temu większość klawiszy działa sensownie pod większością
emulatorów terminala. Tylko rxvt generuje inne ciągi dla Home
i End, a kvt, aterm i Eterm dla strzałek. Poza tym kvt nie rozumie
Shift-F1..F10 (ale mam stare kvt z KDE-1.0, być może potem to
poprawili). Może ktoś ma ochotę zrobić z tym porządek.
Można uznać, że kvt, aterm i Eterm mają rację w sprawie strzałek
i terminal xterm-color powinien wyrażać je tak jak konsola: ^[[A ^[[B
^[[C ^[[D, a nie ^[OA ^[OB ^[OC ^[OD. W takiej sytuacji xterm,
gnome-libs i terminfo są do poprawki.
--
__("< Marcin Kowalczyk * qrczak w knm.org.pl http://qrczak.ids.net.pl/
\__/
^^ SYGNATURA ZASTĘPCZA
QRCZAK
Więcej informacji o liście dyskusyjnej pld-devel-pl