161 lines
		
	
	
	
		
			5.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
		
		
			
		
	
	
			161 lines
		
	
	
	
		
			5.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									NEW FEATURE IN BETA-2 OVER BETA-1 (ONLY TWIDDLER CHANGES)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Fixed typo in twiddler.c which prevented compiling
							 | 
						||
| 
								 | 
							
								Fixed segfault when using more than one thumb-key at a time
							 | 
						||
| 
								 | 
							
								Should fix problem when non-ascii chars appear in the cfg file
							 | 
						||
| 
								 | 
							
								Changed algorithm for dhouble-click
							 | 
						||
| 
								 | 
							
								Added shift etc. support
							 | 
						||
| 
								 | 
							
								Added VT change and Execution of commands
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									DETAILED DESCRIPTION OF GPM SUPPORT FOR THE TWIDDLER KEYBOARD
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Gpm-1.14 and later support the twiddler keyboard, by HandyKey Corp.
							 | 
						||
| 
								 | 
							
								(the keyboard is described at www.handykey.com). This document
							 | 
						||
| 
								 | 
							
								describes the current status of the gpm decoder.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									Mouse support
							 | 
						||
| 
								 | 
							
									=============
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									Motion
							 | 
						||
| 
								 | 
							
									------
							 | 
						||
| 
								 | 
							
								The mouse functionality of the keyboard is supported by gpm. Three
							 | 
						||
| 
								 | 
							
								decoders are currently available:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									- a "static" decoder, which turns twiddler position to mouse
							 | 
						||
| 
								 | 
							
										displacement.  The decoder locks the mouse when the
							 | 
						||
| 
								 | 
							
										``mouse'' button is pressed and any further motion
							 | 
						||
| 
								 | 
							
										moves the cursor, as long as ``mouse'' is kept down.
							 | 
						||
| 
								 | 
							
										This is compiled if "-DTWIDDLER_STATIC" (for example
							 | 
						||
| 
								 | 
							
										by invoking ``make CC="gcc -DTWIDDLER_STATIC"''.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									- a "ballistic" decoder, which turns twiddler position to
							 | 
						||
| 
								 | 
							
										mouse speed. If the keyboard is hole vertical the mouse
							 | 
						||
| 
								 | 
							
										cursor won't be moved. To compile this decoder
							 | 
						||
| 
								 | 
							
										-DTWIDDLER_BALLISTIC must be used.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									- a "mixed" decoder, that behaves like the static one when the
							 | 
						||
| 
								 | 
							
										device is near-to-vertical and like the ballistic one
							 | 
						||
| 
								 | 
							
										for large inclination. This is compiled by default
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									Problems
							 | 
						||
| 
								 | 
							
									........
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The current decoder doesn't allow tuning the parameters at run time.
							 | 
						||
| 
								 | 
							
								I plan to implement twiddler chords to change the resolution,
							 | 
						||
| 
								 | 
							
								acceleration and threshold of the mixed decoder, and the other ones as
							 | 
						||
| 
								 | 
							
								well. If different people routinely use different decoders, I'll make
							 | 
						||
| 
								 | 
							
								it possible to choose which decoder to run.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								I will also implement the chord to switch up/down.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									Buttons
							 | 
						||
| 
								 | 
							
									-------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The first (left) mouse button is bound to the right key ("a", green,
							 | 
						||
| 
								 | 
							
								R000).  The other buttons are bound to M000 ("e", blue) and L000
							 | 
						||
| 
								 | 
							
								("SP", red). This is consistent with the twiddler manual.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								To ease using the fingers like with conventional mice, keys 0R00 and
							 | 
						||
| 
								 | 
							
								00R0 (i.e., "b" and "c") are bound to the middle and right button as
							 | 
						||
| 
								 | 
							
								well.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Since someone prefers to reverse the order of the keys (i.e., L000 is
							 | 
						||
| 
								 | 
							
								the left mouse button), they will use "-B 321" on the gpm command
							 | 
						||
| 
								 | 
							
								line. To ease them, 0L00 is bound to the middle button, and 00L0 is
							 | 
						||
| 
								 | 
							
								bound to the *left* button. Thus, with "-B 321" it will be the right
							 | 
						||
| 
								 | 
							
								button.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								In summary:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									Left button (B1):   R000 R000
							 | 
						||
| 
								 | 
							
									Middle button (B2): M000 0R00
							 | 
						||
| 
								 | 
							
									Right button (B3):  L000 00R0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								For people using "-B 321"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									Left button (B1):   L000 L000
							 | 
						||
| 
								 | 
							
									Middle button (B2): M000 0L00
							 | 
						||
| 
								 | 
							
									Right button (B3):  R000 00L0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									Problems
							 | 
						||
| 
								 | 
							
									........
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								None, by now.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									Keyboard support
							 | 
						||
| 
								 | 
							
									================
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									Configuration file
							 | 
						||
| 
								 | 
							
									------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The keyboard map is stored in run-time tables within gpm. There is no
							 | 
						||
| 
								 | 
							
								precompiled table, so a configuration file is needed. I chose not to
							 | 
						||
| 
								 | 
							
								precompile values because that would mean to pre-parse a configurazion
							 | 
						||
| 
								 | 
							
								file, and provide documentation as well. Using a compulsory
							 | 
						||
| 
								 | 
							
								configuration file reliefs my workload :-)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The file "gpm-twiddler.conf" that appears in the gpm configuration
							 | 
						||
| 
								 | 
							
								includes the default keyboard map, and can be used right away. If the
							 | 
						||
| 
								 | 
							
								file is not in place, gpm will complain about its absence. By default
							 | 
						||
| 
								 | 
							
								the file must live in /usr/etc (or /usr/local/etc, or whatever you
							 | 
						||
| 
								 | 
							
								gave as a prefix to ./configure). The behaviour is similar for
							 | 
						||
| 
								 | 
							
								different installation prefixes. The file is not installed by "make
							 | 
						||
| 
								 | 
							
								install".  If the file is missing, gpm will exit producing a message
							 | 
						||
| 
								 | 
							
								like this:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									./gpm: /usr/etc/gpm-twiddler.conf: No such file or directory
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The distributed configuration file includes its own documentation.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								If you want to add keys to the default file, you can avoid editing it
							 | 
						||
| 
								 | 
							
								by writing a "gpm-twiddler.user" file and putting it in the same
							 | 
						||
| 
								 | 
							
								directory as gpm-twiddler.conf. Gpm will read both files, in sequence,
							 | 
						||
| 
								 | 
							
								but won't complain if gpm-twiddler.user doesn't exist.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Gpm will print an error message for any incorrect line in any of the
							 | 
						||
| 
								 | 
							
								configuration files: error messages include the file name and the
							 | 
						||
| 
								 | 
							
								line number where the error appears, as well as a description of the
							 | 
						||
| 
								 | 
							
								type of error. If any error is encountered, gpm will exit.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The daemon will print a warning message for any redefined key, but will
							 | 
						||
| 
								 | 
							
								use the new definition. Therefore, if you want to redefine keys in your
							 | 
						||
| 
								 | 
							
								user file, just redirect standard error to /dev/null after checking
							 | 
						||
| 
								 | 
							
								you are willing to override default definitions.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									General information
							 | 
						||
| 
								 | 
							
									-------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								A key press is reported when any key of the chord is released: this
							 | 
						||
| 
								 | 
							
								avoides reporting false keys when a multi-key chord is being composed.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The twiddler driver in gpm implements auto-repeat. Auto-repeat is
							 | 
						||
| 
								 | 
							
								invoked by double-clicking a chord and keeping it pressed. If the
							 | 
						||
| 
								 | 
							
								double-click takes more than .3 seconds, it won't be considered a
							 | 
						||
| 
								 | 
							
								double-click; auto-repeat will start .5 seconds after the
							 | 
						||
| 
								 | 
							
								double-click.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Gpm unblanks the screen when keys are composed using the twiddler.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									Problems
							 | 
						||
| 
								 | 
							
									--------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Gpm doesn't currently report keypresses to the X server. You should
							 | 
						||
| 
								 | 
							
								use other twiddler drivers for Linux if you need this functionality.
							 | 
						||
| 
								 | 
							
								For example get the driver by Jeff Levine (there is a link to the
							 | 
						||
| 
								 | 
							
								driver in www.handykey.com).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								I would like to thank HandyKey Corp. for sending a twiddler keyboard
							 | 
						||
| 
								 | 
							
								to me and Torben Fjerdingstad for his help in testing out the driver.
							 |