40 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
| #!/usr/bin/env python3
 | |
| """Extract key symbol encodings from X11 header files."""
 | |
| 
 | |
| from pathlib import Path
 | |
| from pprint import pprint
 | |
| from re import findall
 | |
| from subprocess import run
 | |
| from tempfile import TemporaryDirectory
 | |
| 
 | |
| repo = "https://gitlab.freedesktop.org/xorg/proto/xorgproto.git"
 | |
| pattern = r"#define XK_(\w+)\s+0x(\w+)(?:\s+/\*\s+U\+(\w+))?"
 | |
| xf86pattern = r"#define XF86XK_(\w+)\s+0x(\w+)(?:\s+/\*\s+U\+(\w+))?"
 | |
| 
 | |
| 
 | |
| def main():
 | |
|     keysymdef = {}
 | |
|     keysym_files = [
 | |
|         ("include/X11/keysymdef.h", pattern, ""),
 | |
|         ("include/X11/XF86keysym.h", xf86pattern, "XF86_"),
 | |
|     ]
 | |
| 
 | |
|     with TemporaryDirectory() as temp:
 | |
|         run(["git", "clone", repo, "."], cwd=temp)
 | |
| 
 | |
|         for filename, extraction_pattern, prefix in keysym_files:
 | |
|             text = Path(temp, filename).read_text()
 | |
|             for name, sym, _ in findall(extraction_pattern, text):
 | |
|                 sym = int(sym, 16)
 | |
|                 if keysymdef.get(f"{prefix}{name}", None):
 | |
|                     print(f"KEY DUP {prefix}{name}")
 | |
|                 keysymdef[f"{prefix}{name}"] = sym
 | |
| 
 | |
|     with open("keysymdef.py", "w") as f:
 | |
|         f.write("# flake8: noqa\nkey_symbols = \\\n")
 | |
|         pprint(keysymdef, f)
 | |
| 
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|     main()
 |