Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 22 Oct 2013 12:16:23 +0000
From:      Gary Kline <kline@thought.org>
To:        Polytropon <freebsd@edvax.de>
Cc:        FreeBSD Mailing List <freebsd-questions@freebsd.org>
Subject:   Re: howto recognize the Shift and Alt keys when /pressed\
Message-ID:  <20131022121555.GA24386@ethic.thought.org>
In-Reply-To: <20131022125901.6f3366fd.freebsd@edvax.de>
References:  <20131021161200.GA18556@ethic.thought.org> <20131022012804.98a017fa.freebsd@edvax.de> <20131021164926.GA19974@ethic.thought.org> <20131022125901.6f3366fd.freebsd@edvax.de>

next in thread | previous in thread | raw e-mail | index | archive | help
Organization: Thought Unlimited.  Public service Unix since 1986.
Of_Interest: With 27 years  of service  to the  Unix  community.

On Tue, Oct 22, 2013 at 12:59:01PM +0200, Polytropon wrote:
> On Mon, 21 Oct 2013 16:49:26 +0000, Gary Kline wrote:
> > 	since im using curses/ncurses, I just use getch(0.  I.e., 
> > 
> > 		c = getch(); 
> > 
> > 	which works fine for everything except the modifier keys like ahift
> > 	and alt and ctl.  if there is another way within X11, let's hear
> > 	it!
> 
> In this case I have to remain silent. As far as I know,
> there is no way to capture modifier keys with this means
> as _individual_ key presses.
> 
> In case you really want to implement that functionality,
> you'll have to "go down a few levels" and hook directly
> into the keyboard driver which, unlike the ncurses library
> that is tied to the console driver, is able to recognize
> modifier keys as individual keys. In "upper levels", this
> information is fully lost (press and release Shift key) or
> combined with other information (press Shift key, press
> letter 'k', release both, a capital 'K' will be written
> to the keyboard buffer that terminal-based applications
> can then read).


	getting dow to the keyboard driver level is what I was going to
	do--actually, what I did do way, way back.  there was a crash that
	cost me a month+  worth of work and I bought a "clicky" keyboard
	for $80.  I would up buying two of them and both got  ruined!

	you are right on the money that I can do nothing directly with 
	the shift, the caps-lock, [[nd alt, and other of the "modifier" 
	keys ]].  

	I just *barely* understand this python code that the guy has in
	"xlib.py", but I see what he's done (I think) to grab onto the 
	modifyer keys::


  def _setup_lookup(self):
    """Setup the key lookups."""
    for name in dir(XK):
      if name[:3] == "XK_":
        code = getattr(XK, name)
        self.keycode_to_symbol[code] = 'KEY_' + name[3:].upper()
    self.keycode_to_symbol[65027] = 'KEY_ISO_LEVEL3_SHIFT'
    self.keycode_to_symbol[269025062] = 'KEY_BACK'
    self.keycode_to_symbol[269025063] = 'KEY_FORWARD'
    self.keycode_to_symbol[16777215] = 'KEY_CAPS_LOCK'
    self.keycode_to_symbol[269025067] = 'KEY_WAKEUP'


	I'll have to look into his code further to see where he's got
	the ints from. "65027", "29...62", etc.  I'm not going to ask him 
	because he was a bit steamed about my asking him for the key-click
	code.  ---long story-short, this is how I'm going to have to do it
	to grab the modifiers... .  

	{more backstory, a bit OT: in school, I hated curses.  ken arnold
	invented the stuff in 1978 or 1979; ken was lightyears ahead of me
	since he was messing with computers as a teenager.  }


> The only way I'd see would be to assign a totally different
> keysym to the modifier keys, but that again would prevent
> them from working as they are intended.
> 
> Here's an example for a ~/.modmaprc that would map the
> modifier keys to additional PF keys (PF25 to PF33).
> 
> 	! left control
> 	keycode 37 = F25
> 	! left meta
> 	keycode 115 = F26
> 	! left alt
> 	keycode 67 = F27
> 	! left shift
> 	keycode 50 = F28
> 	! caps lock
> 	keycode 66 = F29
> 	! right shift
> 	keycode 64 = F30
> 	! right alt, alt gr
> 	keycode 113 = F31
> 	! right meta
> 	keycode 116 = F32
> 	! compose
> 	keycode 117 = F33
> 
> Note that I've generated this example from a Sun USB Type 7
> keyboard with has Meta keys, a Compose key, but no right
> Control key, so I can't check that. The keycodes can be
> easily obtained with "xev".
> 
> Also consider Num Lock: It's not a modifier key, but does
> not emit anything into the keyboard buffer. It's key code
> in X is 77. :-)
> 


	Hmmm!  interesting.  do you see any way that I could set up an 
	xmod when the computer first boots and the assign the modifiers
	to some never-used keys, then make those keys click, or am I
	off in the weeds??

	gary


> 
> 
> -- 
> Polytropon
> Magdeburg, Germany
> Happy FreeBSD user since 4.0
> Andra moi ennepe, Mousa, ...
> _______________________________________________
> freebsd-questions@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-questions
> To unsubscribe, send any mail to "freebsd-questions-unsubscribe@freebsd.org"

-- 
 Gary Kline  kline@thought.org  http://www.thought.org  Public Service Unix
             Twenty-seven years of service to the Unix community.
                            http://www.thought.org/HOPE





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20131022121555.GA24386>