Mon 21 Jul 22:43:21 CEST 2025
This commit is contained in:
		
							parent
							
								
									f4d3b78660
								
							
						
					
					
						commit
						82d1859425
					
				
							
								
								
									
										69
									
								
								js/x11/core/examples/key-recognition.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								js/x11/core/examples/key-recognition.js
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,69 @@ | |||
| var x11 = require('..'); | ||||
| 
 | ||||
| // The list provided by GetKeyboardMapping has sublists where each position
 | ||||
| // represents the result for some key composition.
 | ||||
| keyComposition = [ | ||||
|   'Key', | ||||
|   'shift + Key', | ||||
|   'modeSwitch + Key', | ||||
|   'modeSwitch + shift + Key', | ||||
|   'altGr + Key', | ||||
|   'altGr + shift + Key' | ||||
| ] | ||||
| 
 | ||||
| x11.createClient(function(err, display){ | ||||
|   if (err) throw err | ||||
| 
 | ||||
|   var min = display.min_keycode,  // TODO: explain min_keycode
 | ||||
|       max = display.max_keycode,  // TODO: explain max_keycode
 | ||||
|       chr2Data = [],              // allow us to find a char by the charcode
 | ||||
|       key2Data = [];              // associate chars to a keycode
 | ||||
| 
 | ||||
|   // The keySyms is a hash of mnemonic char names, associated to an integer
 | ||||
|   // charcode and its description.
 | ||||
|   for (codeName in x11.keySyms) { | ||||
|     keyData = x11.keySyms[codeName]; | ||||
|     chr2Data[keyData.code] = { codeName: codeName, description: keyData.description }; | ||||
|   } | ||||
| 
 | ||||
|   var X = display.client, | ||||
|       wid = X.AllocID(),                     // Get a free integer id to a new window.
 | ||||
|       root = display.screen[0].root,         // The mother window. Like your window manager.
 | ||||
|       evKeyPress = x11.eventMask.KeyPress,   // Allow to filter for KeyPress events.
 | ||||
|       white = display.screen[0].white_pixel; // Will paint the window.
 | ||||
| 
 | ||||
|   // Get the local key mapping to build key2Data.
 | ||||
|   X.GetKeyboardMapping(min, max-min, function(err, list) { | ||||
|     for (var i=0; i < list.length; ++i) { | ||||
|       var name = key2Data[i+min] = []; | ||||
|       var sublist = list[i]; | ||||
|       for (var j=0; j < sublist.length; ++j) | ||||
|         name.push(chr2Data[sublist[j]]); | ||||
|     } | ||||
|   }); | ||||
| 
 | ||||
|   // Launch a window to listen by key events:
 | ||||
|   X.CreateWindow(wid, root, 0, 0, 100, 100, 0, 0, 0, 0, { backgroundPixel: white, eventMask: evKeyPress }); | ||||
|   X.MapWindow(wid); | ||||
| 
 | ||||
|   X.on('event', function(ev) { | ||||
|     if (ev.type == 2) {  // filter by KeyPress. Useful if you have a more open eventMask.
 | ||||
|       var key = key2Data[ev.keycode];  // key is a list of chars related to the pressed key.
 | ||||
|       if (key) { | ||||
|         console.log('\n>> key pressed:', ev.keycode); | ||||
|         for (var i=0; i<key.length; i++) // Describe each related char
 | ||||
|           if (key[i]) | ||||
|             console.log( | ||||
|               key[i].codeName, '\t', ( | ||||
|                 key[i].description ? key[i].description : 'no description' | ||||
|               ), ( | ||||
|                 keyComposition[i] ? '\t' + keyComposition[i] : '' | ||||
|               ) | ||||
|             ); | ||||
|       } | ||||
|       else | ||||
|         console.log('>> keyCode '+ ev.keycode +' was not recognized.'); | ||||
|     } | ||||
|   }); | ||||
| 
 | ||||
| }); | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user