small problems with rxvt-20050409-6

Charles Wilson cygwin@cwilson.fastmail.fm
Tue Aug 28 02:08:00 GMT 2007


Lapo Luchini wrote:
> Just a quick comment of the new package...
> 
> a) I guess the font system has changed, as it now both looks nicer and
> kindly ignore my previously working .Xsession line

Yeesh. you beat me to the announcement...

Short version: there is now an /etc/X11/app-defaults/Rxvt file.  You can 
edit in-place for persistent global defaults, create a ~/.Xdefaults file 
for per-user overrides -- and command line options always take 
precedence.  I'm not sure why .Xsession ever worked: rxvt, even in X11 
mode, never asks the Xserver for resources; it parses the ~/.X* files 
itself.

> b) alt-backspace deletes TWO words instead of one in both bash and zsh

Confirmed -- and windows-only (in X11 mode, I don't see this behavior). 
This is probably related to Corinna's patch that added some additional 
Alt- related keyevents to the main handling loop in the "W11" library:

   case WM_SYSKEYDOWN: /* some alt-keys go here */

maybe this causes the Alt-BS to get sent to the application twice? 
However, it doesn't happen on ALL alt-key combos.  Adding the following


"\e\e[D":backward-word
"\e\e[C":forward-word


to my .inputrc, and I was able to get word skip behavior with 
alt-left/alt-right.  So I'm reluctant to entirely remove Corinna's 
patch, because this wasn't possible before.

However, I think I found the problem.  Most of the time, W11 passes 
virtualkey events to the w32api TranslateMessate() -- which in turn 
inserts the translated char BACK into the message queue.

However, certain key events need to bypass this:
   shift-KP-plus and shift-KP-minus: are supposed to be intercepted
     by rxvt and used to increase/decrease the font size.  This
     doesn't really work.
   backspace -- regardless of shift/alt/ctrl -- is handled by rxvt
     itself, and (possible) translated to ^? or ^H depending on
     rxvt's settings.

This bypassing is handled here:

static void
doTranslateMessage(MSG *m)
{
    if ((m->message == WM_KEYDOWN) &&
        ((m->wParam == VK_BACK) ||
         (((m->wParam == VK_ADD) || (m->wParam == VK_SUBTRACT)) &&
          (GetKeyState(VK_SHIFT) & 0x8000))))
       return;

    TranslateMessage(m);
}

With Corinna's patch, we now hit this function with WM_SYSKEYDOWN and 
not just WM_KEYDOWN.  The following change seems to fix it:

static void
doTranslateMessage(MSG *m)
{
     if (((m->message == WM_KEYDOWN) || (m->message == WM_SYSKEYDOWN)) &&
         ((m->wParam == VK_BACK) ||
          (((m->wParam == VK_ADD) || (m->wParam == VK_SUBTRACT)) &&
           (GetKeyState(VK_SHIFT) & 0x8000))))
        return;

     TranslateMessage(m);
}

Look for rxvt-20050409-7 soon, and thanks for the report.

--
Chuck

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/



More information about the Cygwin mailing list