Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1#!/usr/bin/env python 

2# This file is part of Xpra. 

3# Copyright (C) 2008 Nathaniel Smith <njs@pobox.com> 

4# Copyright (C) 2011-2020 Antoine Martin <antoine@xpra.org> 

5# Xpra is released under the terms of the GNU GPL v2, or, at your option, any 

6# later version. See the file COPYING for details. 

7 

8 

9from xpra.log import Logger 

10 

11log = Logger("keyboard") 

12 

13#this allows platforms to inject keyname workarounds 

14# the key is a tuple (keyname, keyval, keycode) 

15# the value is the keyname override 

16KEY_TRANSLATIONS = {} 

17 

18 

19def get_gtk_keymap(ignore_keys=(None, "VoidSymbol", "0xffffff")): 

20 """ 

21 Augment the keymap we get from gtk.gdk.keymap_get_default() 

22 by adding the keyval_name. 

23 We can also ignore some keys 

24 """ 

25 from gi.repository import Gdk 

26 display = Gdk.Display.get_default() 

27 return do_get_gtk_keymap(display, ignore_keys) 

28 

29def do_get_gtk_keymap(display, ignore_keys): 

30 if not display: 

31 return () 

32 from gi.repository import Gdk 

33 keymap = Gdk.Keymap.get_for_display(display) 

34 log("keymap_get_for_display(%s)=%s, direction=%s, bidirectional layouts: %s", 

35 display, keymap, keymap.get_direction(), keymap.have_bidi_layouts()) 

36 keycodes=[] 

37 for i in range(0, 2**8): 

38 entries = keymap.get_entries_for_keycode(i) 

39 if not entries: # pragma: no cover 

40 continue 

41 found, keys, keyvals = entries 

42 if not found: 

43 log("get_entries_for_keycode(%s)=()", i) 

44 continue 

45 added = [] 

46 for j, key in enumerate(keys): 

47 keyval = keyvals[j] 

48 keycode = key.keycode 

49 name = Gdk.keyval_name(keyval) 

50 name = KEY_TRANSLATIONS.get((name, keyval, keycode), name) 

51 group = key.group or 0 

52 if name not in ignore_keys: 

53 kdef = keyval or 0, name or "", keycode or 0, group, key.level or 0 

54 keycodes.append(kdef) 

55 added.append(kdef) 

56 log("keycode %3i: %s", i, added) 

57 log("get_gtk_keymap(%s)=%s (keymap=%s)", ignore_keys, keycodes, keymap) 

58 return keycodes 

59 

60 

61def main(): # pragma: no cover 

62 import sys 

63 from xpra.platform import program_context 

64 from xpra.log import enable_color 

65 with program_context("Keymap-Tool", "Keymap Information Tool"): 

66 enable_color() 

67 if "-v" in sys.argv or "--verbose" in sys.argv: 

68 log.enable_debug() 

69 gtk_keymap = get_gtk_keymap() 

70 sizes = [16, 28, 8, 8, 8] 

71 def pkey(*entries): 

72 print(("".join([str(x).ljust(sizes[i]) for i,x in enumerate(entries)])).strip()) 

73 pkey("keyval", "name", "keycode", "group", "level") 

74 for x in gtk_keymap: 

75 pkey(*x) 

76 return 0 

77 

78 

79if __name__ == "__main__": # pragma: no cover 

80 main()