[libvirt] [PATCH v2 0/2] Use the shared keycodemap database

Changed in v2: - Fixed make syntax-check errors - Auto-generate man pages listing value key codes for use with the virDomainSendKey API / virsh send-key command Daniel P. Berrange (2): util: switch over to use keycodemapdb GIT submodule Add ability to generate man page describing key code names & values .gitignore | 3 +- .gitmodules | 3 + libvirt.spec.in | 1 + mingw-libvirt.spec.in | 2 + src/Makefile.am | 81 ++++++-- src/keycodemapdb | 1 + src/util/keymaps.csv | 464 ------------------------------------------ src/util/virkeycode-mapgen.py | 97 --------- src/util/virkeycode.c | 94 ++++----- tests/virkeycodetest.c | 5 + tools/virsh.pod | 20 ++ 11 files changed, 148 insertions(+), 623 deletions(-) create mode 160000 src/keycodemapdb delete mode 100644 src/util/keymaps.csv delete mode 100755 src/util/virkeycode-mapgen.py -- 2.9.3

A long time ago we imported the keymaps.csv file from GTK-VNC so we can do conversions between keycode sets. Meanwhile lots of bug fixes have gone into this CSV file and libvirt hasn't kept in sync. The keymaps.csv file and associated generator script has been pulled out of GTK-VNC into a dedicated GIT repo for use as a submodule. This allows GTK-VNC, SPICE-GTK, QEMU and libvirt to share the same master database and tools and pushing updates merely requires a submodule commit update as with gnulib. The test suite is updated to cover some extra boundary conditions. Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- .gitignore | 3 +- .gitmodules | 3 + src/Makefile.am | 45 ++-- src/keycodemapdb | 1 + src/util/keymaps.csv | 464 ------------------------------------------ src/util/virkeycode-mapgen.py | 97 --------- src/util/virkeycode.c | 94 ++++----- tests/virkeycodetest.c | 5 + 8 files changed, 89 insertions(+), 623 deletions(-) create mode 160000 src/keycodemapdb delete mode 100644 src/util/keymaps.csv delete mode 100755 src/util/virkeycode-mapgen.py diff --git a/.gitignore b/.gitignore index 7b71bd1..6892885 100644 --- a/.gitignore +++ b/.gitignore @@ -159,7 +159,8 @@ /src/test_libvirt*.aug /src/test_virtlockd.aug /src/test_virtlogd.aug -/src/util/virkeymaps.h +/src/util/virkeycodetable*.h +/src/util/virkeynametable*.h /src/virt-aa-helper /src/virtlockd /src/virtlogd diff --git a/.gitmodules b/.gitmodules index 7acb1ea..cae8f18 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "gnulib"] path = .gnulib url = git://git.sv.gnu.org/gnulib.git +[submodule "src/keycodemapdb"] + path = src/keycodemapdb + url = https://gitlab.com/keycodemap/keycodemapdb.git diff --git a/src/Makefile.am b/src/Makefile.am index a85cd0d..24c1a0e 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -50,7 +50,7 @@ AM_LDFLAGS = $(DRIVER_MODULES_LDFLAGS) \ $(MINGW_EXTRA_LDFLAGS) \ $(NULL) -EXTRA_DIST = $(conf_DATA) util/keymaps.csv +EXTRA_DIST = $(conf_DATA) BUILT_SOURCES = CLEANFILES = @@ -132,7 +132,6 @@ UTIL_SOURCES = \ util/virjson.c util/virjson.h \ util/virkeycode.c util/virkeycode.h \ util/virkeyfile.c util/virkeyfile.h \ - util/virkeymaps.h \ util/virlease.c util/virlease.h \ util/virlockspace.c util/virlockspace.h \ util/virlog.c util/virlog.h \ @@ -190,16 +189,38 @@ UTIL_SOURCES = \ util/virxml.c util/virxml.h \ $(NULL) -EXTRA_DIST += $(srcdir)/util/keymaps.csv $(srcdir)/util/virkeycode-mapgen.py - -BUILT_SOURCES += util/virkeymaps.h -MAINTAINERCLEANFILES += util/virkeymaps.h - -util/virkeymaps.h: $(srcdir)/util/keymaps.csv \ - $(srcdir)/util/virkeycode-mapgen.py - $(MKDIR_P) util/ - $(AM_V_GEN)$(PYTHON) $(srcdir)/util/virkeycode-mapgen.py \ - <$(srcdir)/util/keymaps.csv >util/virkeymaps.h +EXTRA_DIST += $(srcdir)/keycodemapdb/data/keymaps.csv \ + $(srcdir)/keycodemapdb/tools/keymap-gen + +util/virkeycodetable_%.h: $(srcdir)/keycodemapdb/data/keymaps.csv \ + $(srcdir)/keycodemapdb/tools/keymap-gen Makefile.am + $(AM_V_GEN)export NAME=`echo $@ | sed -e 's,util/virkeycodetable_,,' \ + -e 's,\.h,,'` && \ + $(MKDIR_P) util/ && \ + $(PYTHON) $(srcdir)/keycodemapdb/tools/keymap-gen \ + --lang stdc --varname virKeyCodeTable_$$NAME code-table \ + $(srcdir)/keycodemapdb/data/keymaps.csv $$NAME > \ + $@-tmp && mv $@-tmp $@ || rm $@-tmp + +util/virkeynametable_%.h: $(srcdir)/keycodemapdb/data/keymaps.csv \ + $(srcdir)/keycodemapdb/tools/keymap-gen Makefile.am + $(AM_V_GEN)export NAME=`echo $@ | sed -e 's,util/virkeynametable_,,' \ + -e 's,\.h,,'` && \ + $(MKDIR_P) util/ && \ + $(PYTHON) $(srcdir)/keycodemapdb/tools/keymap-gen \ + --lang stdc --varname virKeyNameTable_$$NAME name-table \ + $(srcdir)/keycodemapdb/data/keymaps.csv $$NAME > \ + $@-tmp && mv $@-tmp $@ || rm $@-tmp + +KEYCODES = linux osx atset1 atset2 atset3 xt xtkbd usb win32 rfb +KEYNAMES = linux osx win32 + +KEYTABLES = $(KEYCODES:%=util/virkeycodetable_%.h) \ + $(KEYNAMES:%=util/virkeynametable_%.h) + +UTIL_SOURCES += $(KEYTABLES) +BUILT_SOURCES += $(KEYTABLES) +MAINTAINERCLEANFILES += $(KEYTABLES) # Internal generic driver infrastructure NODE_INFO_SOURCES = nodeinfo.h nodeinfo.c diff --git a/src/keycodemapdb b/src/keycodemapdb new file mode 160000 index 0000000..bd754b8 --- /dev/null +++ b/src/keycodemapdb @@ -0,0 +1 @@ +Subproject commit bd754b861e7de5c7919aa249a975913cb207b85d diff --git a/src/util/keymaps.csv b/src/util/keymaps.csv deleted file mode 100644 index 98c723b..0000000 --- a/src/util/keymaps.csv +++ /dev/null @@ -1,464 +0,0 @@ -"Linux Name","Linux Keycode","OS-X Name","OS-X Keycode","AT set1 keycode","AT set2 keycode","AT set3 keycode",XT,"XT KBD","USB Keycodes","Win32 Name","Win32 Keycode","Xwin XT","Xfree86 KBD XT" -KEY_RESERVED,0,,,,,,,,,,,, -KEY_ESC,1,Escape,0x35,1,118,8,1,1,41,VK_ESCAPE,0x1b,1,1 -KEY_1,2,ANSI_1,0x12,2,22,22,2,2,30,VK_1,0x31,2,2 -KEY_2,3,ANSI_2,0x13,3,30,30,3,3,31,VK_2,0x32,3,3 -KEY_3,4,ANSI_3,0x14,4,38,38,4,4,32,VK_3,0x33,4,4 -KEY_4,5,ANSI_4,0x15,5,37,37,5,5,33,VK_4,0x34,5,5 -KEY_5,6,ANSI_5,0x17,6,46,46,6,6,34,VK_5,0x35,6,6 -KEY_6,7,ANSI_6,0x16,7,54,54,7,7,35,VK_6,0x36,7,7 -KEY_7,8,ANSI_7,0x1a,8,61,61,8,8,36,VK_7,0x37,8,8 -KEY_8,9,ANSI_8,0x1c,9,62,62,9,9,37,VK_8,0x38,9,9 -KEY_9,10,ANSI_9,0x19,10,70,70,10,10,38,VK_9,0x39,10,10 -KEY_0,11,ANSI_0,0x1d,11,69,69,11,11,39,VK_0,0x30,11,11 -KEY_MINUS,12,ANSI_Minus,0x1b,12,78,78,12,12,45,VK_OEM_MINUS,0xbd,12,12 -KEY_EQUAL,13,ANSI_Equal,0x18,13,85,85,13,13,46,VK_OEM_PLUS,0xbb,13,13 -KEY_BACKSPACE,14,Delete,0x33,14,102,102,14,14,42,VK_BACK,0x08,14,14 -KEY_TAB,15,Tab,0x30,15,13,13,15,15,43,VK_TAB,0x09,15,15 -KEY_Q,16,ANSI_Q,0xc,16,21,21,16,16,20,VK_Q,0x51,16,16 -KEY_W,17,ANSI_W,0xd,17,29,29,17,17,26,VK_W,0x57,17,17 -KEY_E,18,ANSI_E,0xe,18,36,36,18,18,8,VK_E,0x45,18,18 -KEY_R,19,ANSI_R,0xf,19,45,45,19,19,21,VK_R,0x52,19,19 -KEY_T,20,ANSI_T,0x11,20,44,44,20,20,23,VK_T,0x54,20,20 -KEY_Y,21,ANSI_Y,0x10,21,53,53,21,21,28,VK_Y,0x59,21,21 -KEY_U,22,ANSI_U,0x20,22,60,60,22,22,24,VK_U,0x55,22,22 -KEY_I,23,ANSI_I,0x22,23,67,67,23,23,12,VK_I,0x49,23,23 -KEY_O,24,ANSI_O,0x1f,24,68,68,24,24,18,VK_O,0x4f,24,24 -KEY_P,25,ANSI_P,0x23,25,77,77,25,25,19,VK_P,0x50,25,25 -KEY_LEFTBRACE,26,ANSI_LeftBracket,0x21,26,84,84,26,26,47,VK_OEM_4,0xdb,26,26 -KEY_RIGHTBRACE,27,ANSI_RightBracket,0x1e,27,91,91,27,27,48,VK_OEM_6,0xdd,27,27 -KEY_ENTER,28,Return,0x24,28,90,90,28,28,40,VK_RETURN,0x0d,28,28 -KEY_LEFTCTRL,29,Control,0x3b,29,20,17,29,29,224,VK_LCONTROL,0xa2,29,29 -KEY_LEFTCTRL,29,Control,0x3b,29,20,17,29,29,224,VK_CONTROL,0x11,29,29 -KEY_A,30,ANSI_A,0x0,30,28,28,30,30,4,VK_A,0x41,30,30 -KEY_S,31,ANSI_S,0x1,31,27,27,31,31,22,VK_S,0x53,31,31 -KEY_D,32,ANSI_D,0x2,32,35,35,32,32,7,VK_D,0x44,32,32 -KEY_F,33,ANSI_F,0x3,33,43,43,33,33,9,VK_F,0x46,33,33 -KEY_G,34,ANSI_G,0x5,34,52,52,34,34,10,VK_G,0x47,34,34 -KEY_H,35,ANSI_H,0x4,35,51,51,35,35,11,VK_H,0x48,35,35 -KEY_J,36,ANSI_J,0x26,36,59,59,36,36,13,VK_J,0x4a,36,36 -KEY_K,37,ANSI_K,0x28,37,66,66,37,37,14,VK_K,0x4b,37,37 -KEY_L,38,ANSI_L,0x25,38,75,75,38,38,15,VK_L,0x4c,38,38 -KEY_SEMICOLON,39,ANSI_Semicolon,0x29,39,76,76,39,39,51,VK_OEM_1,0xba,39,39 -KEY_APOSTROPHE,40,ANSI_Quote,0x27,40,82,82,40,40,52,VK_OEM_2,0xbf,40,40 -KEY_GRAVE,41,ANSI_Grave,0x32,41,14,14,41,41,53,VK_OEM_3,0xc0,41,41 -KEY_SHIFT,42,Shift,0x38,42,18,18,42,42,225,VK_SHIFT,0x10,42,42 -KEY_LEFTSHIFT,42,Shift,0x38,42,18,18,42,42,225,VK_LSHIFT,0xa0,42,42 -KEY_BACKSLASH,43,ANSI_Backslash,0x2a,43,93,93,43,43,50,VK_OEM_5,0xdc,43,43 -KEY_Z,44,ANSI_Z,0x6,44,26,26,44,44,29,VK_Z,0x5a,44,44 -KEY_X,45,ANSI_X,0x7,45,34,34,45,45,27,VK_X,0x58,45,45 -KEY_C,46,ANSI_C,0x8,46,33,33,46,46,6,VK_C,0x43,46,46 -KEY_V,47,ANSI_V,0x9,47,42,42,47,47,25,VK_V,0x56,47,47 -KEY_B,48,ANSI_B,0xb,48,50,50,48,48,5,VK_B,0x42,48,48 -KEY_N,49,ANSI_N,0x2d,49,49,49,49,49,17,VK_N,0x4e,49,49 -KEY_M,50,ANSI_M,0x2e,50,58,58,50,50,16,VK_M,0x4d,50,50 -KEY_COMMA,51,ANSI_Comma,0x2b,51,65,65,51,51,54,VK_OEM_COMMA,0xbc,51,51 -KEY_DOT,52,ANSI_Period,0x2f,52,73,73,52,52,55,VK_OEM_PERIOD,0xbe,52,52 -KEY_SLASH,53,ANSI_Slash,0x2c,53,74,74,53,53,56,VK_OEM_2,0xbf,53,53 -KEY_RIGHTSHIFT,54,RightShift,0x3c,54,89,89,54,54,229,VK_RSHIFT,0xa1,54,54 -KEY_KPASTERISK,55,ANSI_KeypadMultiply,0x43,55,124,126,55,55,85,VK_MULTIPLY,0x6a,55,55 -KEY_LEFTALT,56,Option,0x3a,56,17,25,56,56,226,VK_LMENU,0xa4,56,56 -KEY_LEFTALT,56,Option,0x3a,56,17,25,56,56,226,VK_MENU,0x12,56,56 -KEY_SPACE,57,Space,0x31,57,41,41,57,57,44,VK_SPACE,0x20,57,57 -KEY_CAPSLOCK,58,CapsLock,0x39,58,88,20,58,58,57,VK_CAPITAL,0x14,58,58 -KEY_F1,59,F1,0x7a,59,5,7,59,59,58,VK_F1,0x70,59,59 -KEY_F2,60,F2,0x78,60,6,15,60,60,59,VK_F2,0x71,60,60 -KEY_F3,61,F3,0x63,61,4,23,61,61,60,VK_F3,0x72,61,61 -KEY_F4,62,F4,0x76,62,12,31,62,62,61,VK_F4,0x73,62,62 -KEY_F5,63,F5,0x60,63,3,39,63,63,62,VK_F5,0x74,63,63 -KEY_F6,64,F6,0x61,64,11,47,64,64,63,VK_F6,0x75,64,64 -KEY_F7,65,F7,0x62,65,259,55,65,65,64,VK_F7,0x76,65,65 -KEY_F8,66,F8,0x64,66,10,63,66,66,65,VK_F8,0x77,66,66 -KEY_F9,67,F9,0x65,67,1,71,67,67,66,VK_F9,0x78,67,67 -KEY_F10,68,F10,0x6d,68,9,79,68,68,67,VK_F10,0x79,68,68 -KEY_NUMLOCK,69,,,69,119,118,69,69,83,VK_NUMLOCK,0x90,69,69 -KEY_SCROLLLOCK,70,,,70,126,95,70,70,71,VK_SCROLL,0x91,70,70 -KEY_KP7,71,ANSI_Keypad7,0x59,71,108,108,71,71,95,VK_NUMPAD7,0x67,71,71 -KEY_KP8,72,ANSI_Keypad8,0x5b,72,117,117,72,72,96,VK_NUMPAD8,0x68,72,72 -KEY_KP9,73,ANSI_Keypad9,0x5c,73,125,125,73,73,97,VK_NUMPAD9,0x69,73,73 -KEY_KPMINUS,74,ANSI_KeypadMinus,0x4e,74,123,132,74,74,86,VK_SUBTRACT,0x6d,74,74 -KEY_KP4,75,ANSI_Keypad4,0x56,75,107,107,75,75,92,VK_NUMPAD4,0x64,75,75 -KEY_KP5,76,ANSI_Keypad5,0x57,76,115,115,76,76,93,VK_NUMPAD5,0x65,76,76 -KEY_KP6,77,ANSI_Keypad6,0x58,77,116,116,77,77,94,VK_NUMPAD6,0x66,77,77 -KEY_KPPLUS,78,ANSI_KeypadPlus,0x45,78,121,124,78,78,87,VK_ADD,0x6b,78,78 -KEY_KP1,79,ANSI_Keypad1,0x53,79,105,105,79,79,89,VK_NUMPAD1,0x61,79,79 -KEY_KP2,80,ANSI_Keypad2,0x54,80,114,114,80,80,90,VK_NUMPAD2,0x62,80,80 -KEY_KP3,81,ANSI_Keypad3,0x55,81,122,122,81,81,91,VK_NUMPAD3,0x63,81,81 -KEY_KP0,82,ANSI_Keypad0,0x52,82,112,112,82,82,98,VK_NUMPAD0,0x60,82,82 -KEY_KPDOT,83,ANSI_KeypadDecimal,0x41,83,113,113,83,83,99,VK_DECIMAL,0x6e,83,83 -,84,,,,,,,84,,,,, -KEY_ZENKAKUHANKAKU,85,,,118,95,,,118,148,,,, -KEY_102ND,86,,,86,97,19,,86,100,VK_OEM_102,0xe1,, -KEY_F11,87,F11,0x67,87,120,86,101,87,68,VK_F11,0x7a,, -KEY_F12,88,F12,0x6f,88,7,94,102,88,69,VK_F12,0x7b,, -KEY_RO,89,,,115,81,,,115,135,,,, -KEY_KATAKANA,90,JIS_Kana????,0x68,120,99,,,120,146,VK_KANA,0x15,, -KEY_HIRAGANA,91,,,119,98,,,119,147,,,, -KEY_HENKAN,92,,,121,100,134,,121,138,,,, -KEY_KATAKANAHIRAGANA,93,,,112,19,135,,112,136,,,0xc8,0xc8 -KEY_MUHENKAN,94,,,123,103,133,,123,139,,,, -KEY_KPJPCOMMA,95,JIS_KeypadComma,0x5f,92,39,,,92,140,,,, -KEY_KPENTER,96,ANSI_KeypadEnter,0x4c,,158,121,,284,88,,,0x64,0x64 -KEY_RIGHTCTRL,97,RightControl,0x3e,,,88,,285,228,VK_RCONTROL,0xa3,0x65,0x65 -KEY_KPSLASH,98,ANSI_KeypadDivide,0x4b,,181,119,,309,84,VK_DIVIDE,0x6f,0x68,0x68 -KEY_SYSRQ,99,,,84,260,87,,84,70,"VK_SNAPSHOT ???",0x2c,0x67,0x67 -KEY_RIGHTALT,100,RightOption,0x3d,,,57,,312,230,VK_RMENU,0xa5,0x69,0x69 -KEY_LINEFEED,101,,,,,,,91,,,,, -KEY_HOME,102,Home,0x73,,224,110,,327,74,VK_HOME,0x24,0x59,0x59 -KEY_UP,103,UpArrow,0x7e,,236,99,109,328,82,VK_UP,0x26,0x5a,0x5a -KEY_PAGEUP,104,PageUp,0x74,,201,111,,329,75,VK_PRIOR,0x21,0x5b,0x5b -KEY_LEFT,105,LeftArrow,0x7b,,203,97,111,331,80,VK_LEFT,0x25,0x5c,0x5c -KEY_RIGHT,106,RightArrow,0x7c,,205,106,112,333,79,VK_RIGHT,0x27,0x5e,0x5e -KEY_END,107,End,0x77,,225,101,,335,77,VK_END,0x23,0x5f,0x5f -KEY_DOWN,108,DownArrow,0x7d,,254,96,110,336,81,VK_DOWN,0x28,0x60,0x60 -KEY_PAGEDOWN,109,PageDown,0x79,,243,109,,337,78,VK_NEXT,0x22,0x61,0x61 -KEY_INSERT,110,,,,210,103,107,338,73,VK_INSERT,0x2d,0x62,0x62 -KEY_DELETE,111,ForwardDelete,0x75,,244,100,108,339,76,VK_DELETE,0x2e,0x63,0x63 -KEY_MACRO,112,,,,239,142,,367,,,,, -KEY_MUTE,113,Mute,0x4a,,251,156,,288,239,VK_VOLUME_MUTE,0xad,, -KEY_VOLUMEDOWN,114,VolumeDown,0x49,,,157,,302,238,VK_VOLUME_DOWN,0xae,, -KEY_VOLUMEUP,115,VolumeUp,0x48,,233,149,,304,237,VK_VOLUME_UP,0xaf,, -KEY_POWER,116,,,,,,,350,102,,,, -KEY_KPEQUAL,117,ANSI_KeypadEquals,0x51,89,15,,,89,103,,,0x76,0x76 -KEY_KPPLUSMINUS,118,,,,206,,,334,,,,, -KEY_PAUSE,119,,,,198,98,,326,72,VK_PAUSE,0x013,0x66,0x66 -KEY_SCALE,120,,,,,,,267,,,,, -KEY_KPCOMMA,121,ANSI_KeypadClear????,0x47,126,109,,,126,133,VK_SEPARATOR??,0x6c,, -KEY_HANGEUL,122,,,,,,,,144,VK_HANGEUL,0x15,, -KEY_HANJA,123,,,,,,,269,145,VK_HANJA,0x19,, -KEY_YEN,124,JIS_Yen,0x5d,125,106,,,125,137,,,0x7d,0x7d -KEY_LEFTMETA,125,Command,0x37,,,139,,347,227,VK_LWIN,0x5b,0x6b,0x6b -KEY_RIGHTMETA,126,,,,,140,,348,231,VK_RWIN,0x5c,0x6c,0x6c -KEY_COMPOSE,127,Function,0x3f,,,141,,349,101,VK_APPS,0x5d,0x6d,0x6d -KEY_STOP,128,,,,,10,,360,243,VK_BROWSER_STOP,0xa9,, -KEY_AGAIN,129,,,,,11,,261,121,,,, -KEY_PROPS,130,,,,,12,,262,118,,,, -KEY_UNDO,131,,,,,16,,263,122,,,, -KEY_FRONT,132,,,,,,,268,119,,,, -KEY_COPY,133,,,,,24,,376,124,,,, -KEY_OPEN,134,,,,,32,,100,116,,,, -KEY_PASTE,135,,,,,40,,101,125,,,, -KEY_FIND,136,,,,,48,,321,244,,,, -KEY_CUT,137,,,,,56,,316,123,,,, -KEY_HELP,138,,,,,9,,373,117,VK_HELP,0x2f,, -KEY_MENU,139,,,,,145,,286,,,,, -KEY_CALC,140,,,,174,163,,289,251,,,, -KEY_SETUP,141,,,,,,,102,,,,, -KEY_SLEEP,142,,,,,,,351,248,VK_SLEEP,0x5f,, -KEY_WAKEUP,143,,,,,,,355,,,,, -KEY_FILE,144,,,,,,,103,,,,, -KEY_SENDFILE,145,,,,,,,104,,,,, -KEY_DELETEFILE,146,,,,,,,105,,,,, -KEY_XFER,147,,,,,162,,275,,,,, -KEY_PROG1,148,,,,,160,,287,,,,, -KEY_PROG2,149,,,,,161,,279,,,,, -KEY_WWW,150,,,,,,,258,240,,,, -KEY_MSDOS,151,,,,,,,106,,,,, -KEY_SCREENLOCK,152,,,,,150,,274,249,,,, -KEY_DIRECTION,153,,,,,,,107,,,,, -KEY_CYCLEWINDOWS,154,,,,,155,,294,,,,, -KEY_MAIL,155,,,,,,,364,,,,, -KEY_BOOKMARKS,156,,,,,,,358,,,,, -KEY_COMPUTER,157,,,,,,,363,,,,, -KEY_BACK,158,,,,,,,362,241,VK_BROWSER_BACK,0xa6,, -KEY_FORWARD,159,,,,,,,361,242,VK_BROWSER_FORWARD,0xa7,, -KEY_CLOSECD,160,,,,,154,,291,,,,, -KEY_EJECTCD,161,,,,,,,108,236,,,, -KEY_EJECTCLOSECD,162,,,,,,,381,,,,, -KEY_NEXTSONG,163,,,,241,147,,281,235,VK_MEDIA_NEXT_TRACK,0xb0,, -KEY_PLAYPAUSE,164,,,,173,,,290,232,VK_MEDIA_PLAY_PAUSE,0xb3,, -KEY_PREVIOUSSONG,165,,,,250,148,,272,234,VK_MEDIA_PREV_TRACK,0xb1,, -KEY_STOPCD,166,,,,164,152,,292,233,VK_MEDIA_STOP,0xb2,, -KEY_RECORD,167,,,,,158,,305,,,,, -KEY_REWIND,168,,,,,159,,280,,,,, -KEY_PHONE,169,,,,,,,99,,,,, -KEY_ISO,170,ISO_Section,0xa,,,,,112,,,,, -KEY_CONFIG,171,,,,,,,257,,,,, -KEY_HOMEPAGE,172,,,,178,151,,306,,VK_BROWSER_HOME,0xac,, -KEY_REFRESH,173,,,,,,,359,250,VK_BROWSER_REFRESH,0xa8,, -KEY_EXIT,174,,,,,,,113,,,,, -KEY_MOVE,175,,,,,,,114,,,,, -KEY_EDIT,176,,,,,,,264,247,,,, -KEY_SCROLLUP,177,,,,,,,117,245,,,, -KEY_SCROLLDOWN,178,,,,,,,271,246,,,, -KEY_KPLEFTPAREN,179,,,,,,,374,182,,,, -KEY_KPRIGHTPAREN,180,,,,,,,379,183,,,, -KEY_NEW,181,,,,,,,265,,,,, -KEY_REDO,182,,,,,,,266,,,,, -KEY_F13,183,F13,0x69,93,47,127,,93,104,VK_F13,0x7c,0x6e,0x6e -KEY_F14,184,F14,0x6b,94,55,128,,94,105,VK_F14,0x7d,0x6f,0x6f -KEY_F15,185,F15,0x71,95,63,129,,95,106,VK_F15,0x7e,0x70,0x70 -KEY_F16,186,F16,0x6a,,,130,,85,107,VK_F16,0x7f,0x71,0x71 -KEY_F17,187,F17,0x40,,,131,,259,108,VK_F17,0x80,0x72,0x72 -KEY_F18,188,F18,0x4f,,,,,375,109,VK_F18,0x81,, -KEY_F19,189,F19,0x50,,,,,260,110,VK_F19,0x82,, -KEY_F20,190,F20,0x5a,,,,,90,111,VK_F20,0x83,, -KEY_F21,191,,,,,,,116,112,VK_F21,0x84,, -KEY_F22,192,,,,,,,377,113,VK_F22,0x85,, -KEY_F23,193,,,,,,,109,114,VK_F23,0x86,, -KEY_F24,194,,,,,,,111,115,VK_F24,0x87,, -,195,,,,,,,277,,,,, -,196,,,,,,,278,,,,, -,197,,,,,,,282,,,,, -,198,,,,,,,283,,,,, -,199,,,,,,,295,,,,, -KEY_PLAYCD,200,,,,,,,296,,,,, -KEY_PAUSECD,201,,,,,,,297,,,,, -KEY_PROG3,202,,,,,,,299,,,,, -KEY_PROG4,203,,,,,,,300,,,,, -KEY_DASHBOARD,204,,,,,,,301,,,,, -KEY_SUSPEND,205,,,,,,,293,,,,, -KEY_CLOSE,206,,,,,,,303,,,,, -KEY_PLAY,207,,,,,,,307,,VK_PLAY,0xfa,, -KEY_FASTFORWARD,208,,,,,,,308,,,,, -KEY_BASSBOOST,209,,,,,,,310,,,,, -KEY_PRINT,210,,,,,,,313,,VK_PRINT,0x2a,, -KEY_HP,211,,,,,,,314,,,,, -KEY_CAMERA,212,,,,,,,315,,,,, -KEY_SOUND,213,,,,,,,317,,,,, -KEY_QUESTION,214,,,,,,,318,,,,, -KEY_EMAIL,215,,,,,,,319,,VK_LAUNCH_MAIL,0xb4,, -KEY_CHAT,216,,,,,,,320,,,,, -KEY_SEARCH,217,,,,,,,357,,VK_BROWSER_SEARCH,0xaa,, -KEY_CONNECT,218,,,,,,,322,,,,, -KEY_FINANCE,219,,,,,,,323,,,,, -KEY_SPORT,220,,,,,,,324,,,,, -KEY_SHOP,221,,,,,,,325,,,,, -KEY_ALTERASE,222,,,,,,,276,,,,, -KEY_CANCEL,223,,,,,,,330,,,,, -KEY_BRIGHTNESSDOWN,224,,,,,,,332,,,,, -KEY_BRIGHTNESSUP,225,,,,,,,340,,,,, -KEY_MEDIA,226,,,,,,,365,,,,, -KEY_SWITCHVIDEOMODE,227,,,,,,,342,,,,, -KEY_KBDILLUMTOGGLE,228,,,,,,,343,,,,, -KEY_KBDILLUMDOWN,229,,,,,,,344,,,,, -KEY_KBDILLUMUP,230,,,,,,,345,,,,, -KEY_SEND,231,,,,,,,346,,,,, -KEY_REPLY,232,,,,,,,356,,,,, -KEY_FORWARDMAIL,233,,,,,,,270,,,,, -KEY_SAVE,234,,,,,,,341,,,,, -KEY_DOCUMENTS,235,,,,,,,368,,,,, -KEY_BATTERY,236,,,,,,,369,,,,, -KEY_BLUETOOTH,237,,,,,,,370,,,,, -KEY_WLAN,238,,,,,,,371,,,,, -KEY_UWB,239,,,,,,,372,,,,, -KEY_UNKNOWN,240,,,,,,,,,,,, -KEY_VIDEO_NEXT,241,,,,,,,,,,,, -KEY_VIDEO_PREV,242,,,,,,,,,,,, -KEY_BRIGHTNESS_CYCLE,243,,,,,,,,,,,, -KEY_BRIGHTNESS_ZERO,244,,,,,,,,,,,, -KEY_DISPLAY_OFF,245,,,,,,,,,,,, -KEY_WIMAX,246,,,,,,,,,,,, -,247,,,,,,,,,,,, -,248,,,,,,,,,,,, -,249,,,,,,,,,,,, -,250,,,,,,,,,,,, -,251,,,,,,,,,,,, -,252,,,,,,,,,,,, -,253,,,,,,,,,,,, -,254,,,,,,,,,,,, -,255,,,,182,,,,,,,, -BTN_MISC,0x100,,,,,,,,,,,, -BTN_0,0x100,,,,,,,,,VK_LBUTTON,0x01,, -BTN_1,0x101,,,,,,,,,VK_RBUTTON,0x02,, -BTN_2,0x102,,,,,,,,,VK_MBUTTON,0x04,, -BTN_3,0x103,,,,,,,,,VK_XBUTTON1,0x05,, -BTN_4,0x104,,,,,,,,,VK_XBUTTON2,0x06,, -BTN_5,0x105,,,,,,,,,,,, -BTN_6,0x106,,,,,,,,,,,, -BTN_7,0x107,,,,,,,,,,,, -BTN_8,0x108,,,,,,,,,,,, -BTN_9,0x109,,,,,,,,,,,, -BTN_MOUSE,0x110,,,,,,,,,,,, -BTN_LEFT,0x110,,,,,,,,,,,, -BTN_RIGHT,0x111,,,,,,,,,,,, -BTN_MIDDLE,0x112,,,,,,,,,,,, -BTN_SIDE,0x113,,,,,,,,,,,, -BTN_EXTRA,0x114,,,,,,,,,,,, -BTN_FORWARD,0x115,,,,,,,,,,,, -BTN_BACK,0x116,,,,,,,,,,,, -BTN_TASK,0x117,,,,,,,,,,,, -BTN_JOYSTICK,0x120,,,,,,,,,,,, -BTN_TRIGGER,0x120,,,,,,,,,,,, -BTN_THUMB,0x121,,,,,,,,,,,, -BTN_THUMB2,0x122,,,,,,,,,,,, -BTN_TOP,0x123,,,,,,,,,,,, -BTN_TOP2,0x124,,,,,,,,,,,, -BTN_PINKIE,0x125,,,,,,,,,,,, -BTN_BASE,0x126,,,,,,,,,,,, -BTN_BASE2,0x127,,,,,,,,,,,, -BTN_BASE3,0x128,,,,,,,,,,,, -BTN_BASE4,0x129,,,,,,,,,,,, -BTN_BASE5,0x12a,,,,,,,,,,,, -BTN_BASE6,0x12b,,,,,,,,,,,, -BTN_DEAD,0x12f,,,,,,,,,,,, -BTN_GAMEPAD,0x130,,,,,,,,,,,, -BTN_A,0x130,,,,,,,,,,,, -BTN_B,0x131,,,,,,,,,,,, -BTN_C,0x132,,,,,,,,,,,, -BTN_X,0x133,,,,,,,,,,,, -BTN_Y,0x134,,,,,,,,,,,, -BTN_Z,0x135,,,,,,,,,,,, -BTN_TL,0x136,,,,,,,,,,,, -BTN_TR,0x137,,,,,,,,,,,, -BTN_TL2,0x138,,,,,,,,,,,, -BTN_TR2,0x139,,,,,,,,,,,, -BTN_SELECT,0x13a,,,,,,,,,,,, -BTN_START,0x13b,,,,,,,,,,,, -BTN_MODE,0x13c,,,,,,,,,,,, -BTN_THUMBL,0x13d,,,,,,,,,,,, -BTN_THUMBR,0x13e,,,,,,,,,,,, -BTN_DIGI,0x140,,,,,,,,,,,, -BTN_TOOL_PEN,0x140,,,,,,,,,,,, -BTN_TOOL_RUBBER,0x141,,,,,,,,,,,, -BTN_TOOL_BRUSH,0x142,,,,,,,,,,,, -BTN_TOOL_PENCIL,0x143,,,,,,,,,,,, -BTN_TOOL_AIRBRUSH,0x144,,,,,,,,,,,, -BTN_TOOL_FINGER,0x145,,,,,,,,,,,, -BTN_TOOL_MOUSE,0x146,,,,,,,,,,,, -BTN_TOOL_LENS,0x147,,,,,,,,,,,, -BTN_TOUCH,0x14a,,,,,,,,,,,, -BTN_STYLUS,0x14b,,,,,,,,,,,, -BTN_STYLUS2,0x14c,,,,,,,,,,,, -BTN_TOOL_DOUBLETAP,0x14d,,,,,,,,,,,, -BTN_TOOL_TRIPLETAP,0x14e,,,,,,,,,,,, -BTN_TOOL_QUADTAP,0x14f,,,,,,,,,,,, -BTN_WHEEL,0x150,,,,,,,,,,,, -BTN_GEAR_DOWN,0x150,,,,,,,,,,,, -BTN_GEAR_UP,0x151,,,,,,,,,,,, -KEY_OK,0x160,,,,,,,,,,,, -KEY_SELECT,0x161,,,,,,,,,VK_SELECT,0x29,, -KEY_GOTO,0x162,,,,,,,,,,,, -KEY_CLEAR,0x163,,,,,,,,,,,, -KEY_POWER2,0x164,,,,,,,,,,,, -KEY_OPTION,0x165,,,,,,,,,,,, -KEY_INFO,0x166,,,,,,,,,,,, -KEY_TIME,0x167,,,,,,,,,,,, -KEY_VENDOR,0x168,,,,,,,,,,,, -KEY_ARCHIVE,0x169,,,,,,,,,,,, -KEY_PROGRAM,0x16a,,,,,,,,,,,, -KEY_CHANNEL,0x16b,,,,,,,,,,,, -KEY_FAVORITES,0x16c,,,,,,,,,VK_BROWSER_FAVOURITES,0xab,, -KEY_EPG,0x16d,,,,,,,,,,,, -KEY_PVR,0x16e,,,,,,,,,,,, -KEY_MHP,0x16f,,,,,,,,,,,, -KEY_LANGUAGE,0x170,,,,,,,,,,,, -KEY_TITLE,0x171,,,,,,,,,,,, -KEY_SUBTITLE,0x172,,,,,,,,,,,, -KEY_ANGLE,0x173,,,,,,,,,,,, -KEY_ZOOM,0x174,,,,,,,,,VK_ZOOM,0xfb,, -KEY_MODE,0x175,,,,,,,,,,,, -KEY_KEYBOARD,0x176,,,,,,,,,,,, -KEY_SCREEN,0x177,,,,,,,,,,,, -KEY_PC,0x178,,,,,,,,,,,, -KEY_TV,0x179,,,,,,,,,,,, -KEY_TV2,0x17a,,,,,,,,,,,, -KEY_VCR,0x17b,,,,,,,,,,,, -KEY_VCR2,0x17c,,,,,,,,,,,, -KEY_SAT,0x17d,,,,,,,,,,,, -KEY_SAT2,0x17e,,,,,,,,,,,, -KEY_CD,0x17f,,,,,,,,,,,, -KEY_TAPE,0x180,,,,,,,,,,,, -KEY_RADIO,0x181,,,,,,,,,,,, -KEY_TUNER,0x182,,,,,,,,,,,, -KEY_PLAYER,0x183,,,,,,,,,,,, -KEY_TEXT,0x184,,,,,,,,,,,, -KEY_DVD,0x185,,,,,,,,,,,, -KEY_AUX,0x186,,,,,,,,,,,, -KEY_MP3,0x187,,,,,,,,,,,, -KEY_AUDIO,0x188,,,,,,,,,,,, -KEY_VIDEO,0x189,,,,,,,,,,,, -KEY_DIRECTORY,0x18a,,,,,,,,,,,, -KEY_LIST,0x18b,,,,,,,,,,,, -KEY_MEMO,0x18c,,,,,,,,,,,, -KEY_CALENDAR,0x18d,,,,,,,,,,,, -KEY_RED,0x18e,,,,,,,,,,,, -KEY_GREEN,0x18f,,,,,,,,,,,, -KEY_YELLOW,0x190,,,,,,,,,,,, -KEY_BLUE,0x191,,,,,,,,,,,, -KEY_CHANNELUP,0x192,,,,,,,,,,,, -KEY_CHANNELDOWN,0x193,,,,,,,,,,,, -KEY_FIRST,0x194,,,,,,,,,,,, -KEY_LAST,0x195,,,,,,,,,,,, -KEY_AB,0x196,,,,,,,,,,,, -KEY_NEXT,0x197,,,,,,,,,,,, -KEY_RESTART,0x198,,,,,,,,,,,, -KEY_SLOW,0x199,,,,,,,,,,,, -KEY_SHUFFLE,0x19a,,,,,,,,,,,, -KEY_BREAK,0x19b,,,,,,,,,,,, -KEY_PREVIOUS,0x19c,,,,,,,,,,,, -KEY_DIGITS,0x19d,,,,,,,,,,,, -KEY_TEEN,0x19e,,,,,,,,,,,, -KEY_TWEN,0x19f,,,,,,,,,,,, -KEY_VIDEOPHONE,0x1a0,,,,,,,,,,,, -KEY_GAMES,0x1a1,,,,,,,,,,,, -KEY_ZOOMIN,0x1a2,,,,,,,,,,,, -KEY_ZOOMOUT,0x1a3,,,,,,,,,,,, -KEY_ZOOMRESET,0x1a4,,,,,,,,,,,, -KEY_WORDPROCESSOR,0x1a5,,,,,,,,,,,, -KEY_EDITOR,0x1a6,,,,,,,,,,,, -KEY_SPREADSHEET,0x1a7,,,,,,,,,,,, -KEY_GRAPHICSEDITOR,0x1a8,,,,,,,,,,,, -KEY_PRESENTATION,0x1a9,,,,,,,,,,,, -KEY_DATABASE,0x1aa,,,,,,,,,,,, -KEY_NEWS,0x1ab,,,,,,,,,,,, -KEY_VOICEMAIL,0x1ac,,,,,,,,,,,, -KEY_ADDRESSBOOK,0x1ad,,,,,,,,,,,, -KEY_MESSENGER,0x1ae,,,,,,,,,,,, -KEY_DISPLAYTOGGLE,0x1af,,,,,,,,,,,, -KEY_SPELLCHECK,0x1b0,,,,,,,,,,,, -KEY_LOGOFF,0x1b1,,,,,,,,,,,, -KEY_DOLLAR,0x1b2,,,,,,,,,,,, -KEY_EURO,0x1b3,,,,,,,,,,,, -KEY_FRAMEBACK,0x1b4,,,,,,,,,,,, -KEY_FRAMEFORWARD,0x1b5,,,,,,,,,,,, -KEY_CONTEXT_MENU,0x1b6,,,,,,,,,,,, -KEY_MEDIA_REPEAT,0x1b7,,,,,,,,,,,, -KEY_DEL_EOL,0x1c0,,,,,,,,,,,, -KEY_DEL_EOS,0x1c1,,,,,,,,,,,, -KEY_INS_LINE,0x1c2,,,,,,,,,,,, -KEY_DEL_LINE,0x1c3,,,,,,,,,,,, -KEY_FN,0x1d0,,,,,,,,,,,, -KEY_FN_ESC,0x1d1,,,,,,,,,,,, -KEY_FN_F1,0x1d2,,,,,,,,,,,, -KEY_FN_F2,0x1d3,,,,,,,,,,,, -KEY_FN_F3,0x1d4,,,,,,,,,,,, -KEY_FN_F4,0x1d5,,,,,,,,,,,, -KEY_FN_F5,0x1d6,,,,,,,,,,,, -KEY_FN_F6,0x1d7,,,,,,,,,,,, -KEY_FN_F7,0x1d8,,,,,,,,,,,, -KEY_FN_F8,0x1d9,,,,,,,,,,,, -KEY_FN_F9,0x1da,,,,,,,,,,,, -KEY_FN_F10,0x1db,,,,,,,,,,,, -KEY_FN_F11,0x1dc,,,,,,,,,,,, -KEY_FN_F12,0x1dd,,,,,,,,,,,, -KEY_FN_1,0x1de,,,,,,,,,,,, -KEY_FN_2,0x1df,,,,,,,,,,,, -KEY_FN_D,0x1e0,,,,,,,,,,,, -KEY_FN_E,0x1e1,,,,,,,,,,,, -KEY_FN_F,0x1e2,,,,,,,,,,,, -KEY_FN_S,0x1e3,,,,,,,,,,,, -KEY_FN_B,0x1e4,,,,,,,,,,,, -KEY_BRL_DOT1,0x1f1,,,,,,,,,,,, -KEY_BRL_DOT2,0x1f2,,,,,,,,,,,, -KEY_BRL_DOT3,0x1f3,,,,,,,,,,,, -KEY_BRL_DOT4,0x1f4,,,,,,,,,,,, -KEY_BRL_DOT5,0x1f5,,,,,,,,,,,, -KEY_BRL_DOT6,0x1f6,,,,,,,,,,,, -KEY_BRL_DOT7,0x1f7,,,,,,,,,,,, -KEY_BRL_DOT8,0x1f8,,,,,,,,,,,, -KEY_BRL_DOT9,0x1f9,,,,,,,,,,,, -KEY_BRL_DOT10,0x1fa,,,,,,,,,,,, -KEY_NUMERIC_0,0x200,,,,,,,,,,,, -KEY_NUMERIC_1,0x201,,,,,,,,,,,, -KEY_NUMERIC_2,0x202,,,,,,,,,,,, -KEY_NUMERIC_3,0x203,,,,,,,,,,,, -KEY_NUMERIC_4,0x204,,,,,,,,,,,, -KEY_NUMERIC_5,0x205,,,,,,,,,,,, -KEY_NUMERIC_6,0x206,,,,,,,,,,,, -KEY_NUMERIC_7,0x207,,,,,,,,,,,, -KEY_NUMERIC_8,0x208,,,,,,,,,,,, -KEY_NUMERIC_9,0x209,,,,,,,,,,,, -KEY_NUMERIC_STAR,0x20a,,,,,,,,,,,, -KEY_NUMERIC_POUND,0x20b,,,,,,,,,,,, -KEY_RFKILL,0x20c,,,,,,,,,,,, diff --git a/src/util/virkeycode-mapgen.py b/src/util/virkeycode-mapgen.py deleted file mode 100755 index 8360bfe..0000000 --- a/src/util/virkeycode-mapgen.py +++ /dev/null @@ -1,97 +0,0 @@ -#!/usr/bin/python - -""" -Generate the big keycodes table for virkeys. -It read keymaps.csv from stdin and put the generated code to stdout. - -Please keep keymaps.csv be exactly the same as: -http://git.gnome.org/browse/gtk-vnc/plain/src/keymaps.csv. -If anything inconsistent happens, please change this file -instead of keymaps.csv which is a mirror. -""" - -import sys -import re - -cols = ( - ["linux", True], - ["linux", False], - ["os_x", True], - ["os_x", False], - ["atset1", False], - - ["atset2", False], - ["atset3", False], - ["xt", False], - ["xt_kbd", False], - ["usb", False], - - ["win32", True], - ["win32", False], - [None, False], - [None, False], - ["rfb", False], -) - -xtkbdkey_index = 8 - -def quotestring(str): - if str[0] != '"': - return '"' + str + '"' - return str - -print ''' -/* Generated file, DON'T edit it */ - -#ifndef VIRT_KEY_INTERNAL -# error do not use this; it is not a public header -#endif - -''' - -sys.stdin.readline() # eat the fist line. - -keycodes = [] - -max = 0 - -for line in sys.stdin.xreadlines(): - values = re.match("([^,]*)," * 13 + "([^,]*)$", line[0:-1]).groups() - - data = [] - for v in values: - data.append(v) - - # RFB keycodes are XT kbd keycodes with a slightly - # different encoding of 0xe0 scan codes. RFB uses - # the high bit of the first byte, instead of the low - # bit of the second byte. - rfbkey = int(data[xtkbdkey_index] or '0') - rfbkey = (rfbkey & 0x100) >> 1 | (rfbkey & 0x7f) - data.append("%d" % rfbkey) - - keycodes.append(data) - max = max + 1 - -print "#define VIR_KEYMAP_ENTRY_MAX " + str(max) - -for i in range(len(cols)): - col=cols[i] - name=col[0] - isname=col[1] - - if name is None: - continue - - if isname: - print "const char *virKeymapNames_" + name + "[] = {" - else: - print "int virKeymapValues_" + name + "[] = {" - - for entry in keycodes: - if isname: - print " " + quotestring(entry[i] or "NULL") + "," - else: - print " " + (entry[i] or "-1") + "," - - print "};\n" diff --git a/src/util/virkeycode.c b/src/util/virkeycode.c index 7880a0a..b50d917 100644 --- a/src/util/virkeycode.c +++ b/src/util/virkeycode.c @@ -22,57 +22,53 @@ #include <string.h> #include <stddef.h> - -#define VIRT_KEY_INTERNAL -#include "virkeymaps.h" - -static const char **virKeymapNames[] = { - [VIR_KEYCODE_SET_LINUX] = - virKeymapNames_linux, - [VIR_KEYCODE_SET_XT] = - NULL, - [VIR_KEYCODE_SET_ATSET1] = - NULL, - [VIR_KEYCODE_SET_ATSET2] = - NULL, - [VIR_KEYCODE_SET_ATSET3] = - NULL, - [VIR_KEYCODE_SET_OSX] = - virKeymapNames_os_x, - [VIR_KEYCODE_SET_XT_KBD] = - NULL, - [VIR_KEYCODE_SET_USB] = - NULL, - [VIR_KEYCODE_SET_WIN32] = - virKeymapNames_win32, - [VIR_KEYCODE_SET_RFB] = - NULL, +#include "virkeycodetable_atset1.h" +#include "virkeycodetable_atset2.h" +#include "virkeycodetable_atset3.h" +#include "virkeycodetable_linux.h" +#include "virkeycodetable_osx.h" +#include "virkeycodetable_rfb.h" +#include "virkeycodetable_usb.h" +#include "virkeycodetable_win32.h" +#include "virkeycodetable_xt.h" +#include "virkeycodetable_xtkbd.h" +#include "virkeynametable_linux.h" +#include "virkeynametable_osx.h" +#include "virkeynametable_win32.h" + +static const char **virKeymapNames[VIR_KEYCODE_SET_LAST] = { + [VIR_KEYCODE_SET_LINUX] = virKeyNameTable_linux, + [VIR_KEYCODE_SET_OSX] = virKeyNameTable_osx, + [VIR_KEYCODE_SET_WIN32] = virKeyNameTable_win32, }; -verify(ARRAY_CARDINALITY(virKeymapNames) == VIR_KEYCODE_SET_LAST); - -static int *virKeymapValues[] = { - [VIR_KEYCODE_SET_LINUX] = - virKeymapValues_linux, - [VIR_KEYCODE_SET_XT] = - virKeymapValues_xt, - [VIR_KEYCODE_SET_ATSET1] = - virKeymapValues_atset1, - [VIR_KEYCODE_SET_ATSET2] = - virKeymapValues_atset2, - [VIR_KEYCODE_SET_ATSET3] = - virKeymapValues_atset3, - [VIR_KEYCODE_SET_OSX] = - virKeymapValues_os_x, - [VIR_KEYCODE_SET_XT_KBD] = - virKeymapValues_xt_kbd, - [VIR_KEYCODE_SET_USB] = - virKeymapValues_usb, - [VIR_KEYCODE_SET_WIN32] = - virKeymapValues_win32, - [VIR_KEYCODE_SET_RFB] = - virKeymapValues_rfb, + +static const unsigned short *virKeymapValues[VIR_KEYCODE_SET_LAST] = { + [VIR_KEYCODE_SET_LINUX] = virKeyCodeTable_linux, + [VIR_KEYCODE_SET_XT] = virKeyCodeTable_xt, + [VIR_KEYCODE_SET_ATSET1] = virKeyCodeTable_atset1, + [VIR_KEYCODE_SET_ATSET2] = virKeyCodeTable_atset2, + [VIR_KEYCODE_SET_ATSET3] = virKeyCodeTable_atset3, + [VIR_KEYCODE_SET_OSX] = virKeyCodeTable_osx, + [VIR_KEYCODE_SET_XT_KBD] = virKeyCodeTable_xtkbd, + [VIR_KEYCODE_SET_USB] = virKeyCodeTable_usb, + [VIR_KEYCODE_SET_WIN32] = virKeyCodeTable_win32, + [VIR_KEYCODE_SET_RFB] = virKeyCodeTable_rfb, }; -verify(ARRAY_CARDINALITY(virKeymapValues) == VIR_KEYCODE_SET_LAST); + +#define VIR_KEYMAP_ENTRY_MAX ARRAY_CARDINALITY(virKeyCodeTable_linux) + +verify(ARRAY_CARDINALITY(virKeyCodeTable_linux) == ARRAY_CARDINALITY(virKeyCodeTable_xt)); +verify(ARRAY_CARDINALITY(virKeyCodeTable_linux) == ARRAY_CARDINALITY(virKeyCodeTable_atset1)); +verify(ARRAY_CARDINALITY(virKeyCodeTable_linux) == ARRAY_CARDINALITY(virKeyCodeTable_atset2)); +verify(ARRAY_CARDINALITY(virKeyCodeTable_linux) == ARRAY_CARDINALITY(virKeyCodeTable_atset3)); +verify(ARRAY_CARDINALITY(virKeyCodeTable_linux) == ARRAY_CARDINALITY(virKeyCodeTable_osx)); +verify(ARRAY_CARDINALITY(virKeyCodeTable_linux) == ARRAY_CARDINALITY(virKeyCodeTable_xtkbd)); +verify(ARRAY_CARDINALITY(virKeyCodeTable_linux) == ARRAY_CARDINALITY(virKeyCodeTable_usb)); +verify(ARRAY_CARDINALITY(virKeyCodeTable_linux) == ARRAY_CARDINALITY(virKeyCodeTable_win32)); +verify(ARRAY_CARDINALITY(virKeyCodeTable_linux) == ARRAY_CARDINALITY(virKeyCodeTable_rfb)); +verify(ARRAY_CARDINALITY(virKeyCodeTable_linux) == ARRAY_CARDINALITY(virKeyNameTable_linux)); +verify(ARRAY_CARDINALITY(virKeyCodeTable_linux) == ARRAY_CARDINALITY(virKeyNameTable_osx)); +verify(ARRAY_CARDINALITY(virKeyCodeTable_linux) == ARRAY_CARDINALITY(virKeyNameTable_win32)); VIR_ENUM_IMPL(virKeycodeSet, VIR_KEYCODE_SET_LAST, "linux", diff --git a/tests/virkeycodetest.c b/tests/virkeycodetest.c index d092209..a9781df 100644 --- a/tests/virkeycodetest.c +++ b/tests/virkeycodetest.c @@ -57,6 +57,9 @@ static int testKeycodeMapping(const void *data ATTRIBUTE_UNUSED) TRANSLATE(LINUX, RFB, 88, 88); TRANSLATE(LINUX, RFB, 160, 163); TRANSLATE(ATSET2, ATSET3, 259, 55); + TRANSLATE(OSX, WIN32, 90, 131); + TRANSLATE(OSX, ATSET1, 90, 0); + TRANSLATE(OSX, ATSET1, 3200, -1); #undef TRANSLATE @@ -82,6 +85,8 @@ static int testKeycodeStrings(const void *data ATTRIBUTE_UNUSED) } while (0) TRANSLATE(LINUX, "KEY_DELETE", 111); + TRANSLATE(LINUX, "KEY_RFKILL", 524); + TRANSLATE(LINUX, "KEY_WIBBLE", -1); TRANSLATE(OSX, "Function", 0x3f); TRANSLATE(WIN32, "VK_UP", 0x26); -- 2.9.3

On Fri, 2017-03-03 at 16:54 +0000, Daniel P. Berrange wrote: [...]
@@ -1,3 +1,6 @@ [submodule "gnulib"] path = .gnulib url = git://git.sv.gnu.org/gnulib.git +[submodule "src/keycodemapdb"] + path = src/keycodemapdb + url = https://gitlab.com/keycodemap/keycodemapdb.git
I think you'll need to update bootstrap_hash() in autogen.sh to ignore this new submodule, so that it won't run gnulib's bootstrap every time we update keycodemapdb. I'm also wondering whether we can avoid having all developers run 'git submodule init && git submodule update' after these changes have been pushed... [...]
+EXTRA_DIST += $(srcdir)/keycodemapdb/data/keymaps.csv \ + $(srcdir)/keycodemapdb/tools/keymap-gen
Please change this into EXTRA_DIST += \ $(srcdir)/keycodemapdb/data/keymaps.csv \ $(srcdir)/keycodemapdb/tools/keymap-gen \ $(NULL) Same for other multi-line lists you define later, like $(KEYTABLES). [...]
+util/virkeycodetable_%.h: $(srcdir)/keycodemapdb/data/keymaps.csv \ + $(srcdir)/keycodemapdb/tools/keymap-gen Makefile.am + $(AM_V_GEN)export NAME=`echo $@ | sed -e 's,util/virkeycodetable_,,' \ + -e 's,\.h,,'` && \ + $(MKDIR_P) util/ && \ + $(PYTHON) $(srcdir)/keycodemapdb/tools/keymap-gen \ + --lang stdc --varname virKeyCodeTable_$$NAME code-table \ + $(srcdir)/keycodemapdb/data/keymaps.csv $$NAME > \ + $@-tmp && mv $@-tmp $@ || rm $@-tmp + +util/virkeynametable_%.h: $(srcdir)/keycodemapdb/data/keymaps.csv \ + $(srcdir)/keycodemapdb/tools/keymap-gen Makefile.am + $(AM_V_GEN)export NAME=`echo $@ | sed -e 's,util/virkeynametable_,,' \ + -e 's,\.h,,'` && \ + $(MKDIR_P) util/ && \ + $(PYTHON) $(srcdir)/keycodemapdb/tools/keymap-gen \ + --lang stdc --varname virKeyNameTable_$$NAME name-table \ + $(srcdir)/keycodemapdb/data/keymaps.csv $$NAME > \ + $@-tmp && mv $@-tmp $@ || rm $@-tmp
Do you really need the dependency on Makefile.am there? You could also use 'rm -f' instead of plain rm and reformat the shell snippets a bit so that they look better. [...]
+#define VIR_KEYMAP_ENTRY_MAX ARRAY_CARDINALITY(virKeyCodeTable_linux) + +verify(ARRAY_CARDINALITY(virKeyCodeTable_linux) == ARRAY_CARDINALITY(virKeyCodeTable_xt)); +verify(ARRAY_CARDINALITY(virKeyCodeTable_linux) == ARRAY_CARDINALITY(virKeyCodeTable_atset1)); +verify(ARRAY_CARDINALITY(virKeyCodeTable_linux) == ARRAY_CARDINALITY(virKeyCodeTable_atset2)); +verify(ARRAY_CARDINALITY(virKeyCodeTable_linux) == ARRAY_CARDINALITY(virKeyCodeTable_atset3)); +verify(ARRAY_CARDINALITY(virKeyCodeTable_linux) == ARRAY_CARDINALITY(virKeyCodeTable_osx)); +verify(ARRAY_CARDINALITY(virKeyCodeTable_linux) == ARRAY_CARDINALITY(virKeyCodeTable_xtkbd)); +verify(ARRAY_CARDINALITY(virKeyCodeTable_linux) == ARRAY_CARDINALITY(virKeyCodeTable_usb)); +verify(ARRAY_CARDINALITY(virKeyCodeTable_linux) == ARRAY_CARDINALITY(virKeyCodeTable_win32)); +verify(ARRAY_CARDINALITY(virKeyCodeTable_linux) == ARRAY_CARDINALITY(virKeyCodeTable_rfb)); +verify(ARRAY_CARDINALITY(virKeyCodeTable_linux) == ARRAY_CARDINALITY(virKeyNameTable_linux)); +verify(ARRAY_CARDINALITY(virKeyCodeTable_linux) == ARRAY_CARDINALITY(virKeyNameTable_osx)); +verify(ARRAY_CARDINALITY(virKeyCodeTable_linux) == ARRAY_CARDINALITY(virKeyNameTable_win32));
You can use VIR_KEYMAP_ENTRY_MAX, which you've just defined, instead of calling ARRAY_CARDINALITY() over and over. -- Andrea Bolognani / Red Hat / Virtualization

On Fri, Apr 07, 2017 at 05:52:50PM +0200, Andrea Bolognani wrote:
On Fri, 2017-03-03 at 16:54 +0000, Daniel P. Berrange wrote: [...]
@@ -1,3 +1,6 @@ [submodule "gnulib"] path = .gnulib url = git://git.sv.gnu.org/gnulib.git +[submodule "src/keycodemapdb"] + path = src/keycodemapdb + url = https://gitlab.com/keycodemap/keycodemapdb.git
I think you'll need to update bootstrap_hash() in autogen.sh to ignore this new submodule, so that it won't run gnulib's bootstrap every time we update keycodemapdb.
I'm also wondering whether we can avoid having all developers run 'git submodule init && git submodule update' after these changes have been pushed...
I assumed our blackmagic that deals with gnulib changing would also pick up this addition and so make it 'just work', but admittedly i've not tested that.
+util/virkeycodetable_%.h: $(srcdir)/keycodemapdb/data/keymaps.csv \ + $(srcdir)/keycodemapdb/tools/keymap-gen Makefile.am + $(AM_V_GEN)export NAME=`echo $@ | sed -e 's,util/virkeycodetable_,,' \ + -e 's,\.h,,'` && \ + $(MKDIR_P) util/ && \ + $(PYTHON) $(srcdir)/keycodemapdb/tools/keymap-gen \ + --lang stdc --varname virKeyCodeTable_$$NAME code-table \ + $(srcdir)/keycodemapdb/data/keymaps.csv $$NAME > \ + $@-tmp && mv $@-tmp $@ || rm $@-tmp + +util/virkeynametable_%.h: $(srcdir)/keycodemapdb/data/keymaps.csv \ + $(srcdir)/keycodemapdb/tools/keymap-gen Makefile.am + $(AM_V_GEN)export NAME=`echo $@ | sed -e 's,util/virkeynametable_,,' \ + -e 's,\.h,,'` && \ + $(MKDIR_P) util/ && \ + $(PYTHON) $(srcdir)/keycodemapdb/tools/keymap-gen \ + --lang stdc --varname virKeyNameTable_$$NAME name-table \ + $(srcdir)/keycodemapdb/data/keymaps.csv $$NAME > \ + $@-tmp && mv $@-tmp $@ || rm $@-tmp
Do you really need the dependency on Makefile.am there?
Well it ensures we rebuild files if we change these rules for some reason. Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://entangle-photo.org -o- http://search.cpan.org/~danberr/ :|

On Fri, 2017-04-07 at 16:56 +0100, Daniel P. Berrange wrote:
I'm also wondering whether we can avoid having all developers run 'git submodule init && git submodule update' after these changes have been pushed... I assumed our blackmagic that deals with gnulib changing would also pick up this addition and so make it 'just work', but admittedly i've not tested that.
It doesn't, but I'm adding some more black magic and it will once I'm done ;) Just hold on a bit longer.
+util/virkeynametable_%.h: $(srcdir)/keycodemapdb/data/keymaps.csv \ + $(srcdir)/keycodemapdb/tools/keymap-gen Makefile.am + $(AM_V_GEN)export NAME=`echo $@ | sed -e 's,util/virkeynametable_,,' \ + -e 's,\.h,,'` && \ + $(MKDIR_P) util/ && \ + $(PYTHON) $(srcdir)/keycodemapdb/tools/keymap-gen \ + --lang stdc --varname virKeyNameTable_$$NAME name-table \ + $(srcdir)/keycodemapdb/data/keymaps.csv $$NAME > \ + $@-tmp && mv $@-tmp $@ || rm $@-tmp Do you really need the dependency on Makefile.am there? Well it ensures we rebuild files if we change these rules for some reason.
Right, makes sense. We should probably add the same dependency to all other man pages and more generated files as well, at least the former are missing it. -- Andrea Bolognani / Red Hat / Virtualization

On Wed, 2017-04-12 at 10:01 +0200, Andrea Bolognani wrote:
I'm also wondering whether we can avoid having all developers run 'git submodule init && git submodule update' after these changes have been pushed... I assumed our blackmagic that deals with gnulib changing would also pick up this addition and so make it 'just work', but admittedly i've not tested that. It doesn't, but I'm adding some more black magic and it will once I'm done ;)
I just posted the autogen.sh changes[1], and I'm attaching a tweaked version of your patch that builds on top of them to make everything Just Work™. [1] https://www.redhat.com/archives/libvir-list/2017-April/msg00816.html -- Andrea Bolognani / Red Hat / Virtualization

Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- libvirt.spec.in | 1 + mingw-libvirt.spec.in | 2 ++ src/Makefile.am | 42 +++++++++++++++++++++++++++++++++++++++--- tools/virsh.pod | 20 ++++++++++++++++++++ 4 files changed, 62 insertions(+), 3 deletions(-) diff --git a/libvirt.spec.in b/libvirt.spec.in index 7f3d18f..374d37f 100644 --- a/libvirt.spec.in +++ b/libvirt.spec.in @@ -1759,6 +1759,7 @@ exit 0 %{_mandir}/man8/libvirtd.8* %{_mandir}/man8/virtlogd.8* %{_mandir}/man8/virtlockd.8* +%{_mandir}/man7/virkey*.7* %doc examples/polkit/*.rules diff --git a/mingw-libvirt.spec.in b/mingw-libvirt.spec.in index e088dc2..dec799b 100644 --- a/mingw-libvirt.spec.in +++ b/mingw-libvirt.spec.in @@ -259,6 +259,7 @@ rm -rf $RPM_BUILD_ROOT%{mingw64_libexecdir}/libvirt-guests.sh %{mingw32_mandir}/man1/virt-admin.1* %{mingw32_mandir}/man1/virt-xml-validate.1* %{mingw32_mandir}/man1/virt-pki-validate.1* +%{mingw32_mandir}/man7/virkey*.7* %files -n mingw32-libvirt-static %{mingw32_libdir}/libvirt.a @@ -343,6 +344,7 @@ rm -rf $RPM_BUILD_ROOT%{mingw64_libexecdir}/libvirt-guests.sh %{mingw64_mandir}/man1/virt-admin.1* %{mingw64_mandir}/man1/virt-xml-validate.1* %{mingw64_mandir}/man1/virt-pki-validate.1* +%{mingw64_mandir}/man7/virkey*.7* %files -n mingw64-libvirt-static %{mingw64_libdir}/libvirt.a diff --git a/src/Makefile.am b/src/Makefile.am index 24c1a0e..a2b1b24 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -50,6 +50,8 @@ AM_LDFLAGS = $(DRIVER_MODULES_LDFLAGS) \ $(MINGW_EXTRA_LDFLAGS) \ $(NULL) +POD2MAN = pod2man -c "Virtualization Support" -r "$(PACKAGE)-$(VERSION)" + EXTRA_DIST = $(conf_DATA) BUILT_SOURCES = @@ -212,15 +214,51 @@ util/virkeynametable_%.h: $(srcdir)/keycodemapdb/data/keymaps.csv \ $(srcdir)/keycodemapdb/data/keymaps.csv $$NAME > \ $@-tmp && mv $@-tmp $@ || rm $@-tmp +util/virkeycode-%.pod: $(srcdir)/keycodemapdb/data/keymaps.csv \ + $(srcdir)/keycodemapdb/tools/keymap-gen Makefile.am + $(AM_V_GEN)export NAME=`echo $@ | sed -e 's,util/virkeycode-,,' \ + -e 's,\.pod,,'` && \ + $(MKDIR_P) util/ && \ + $(PYTHON) $(srcdir)/keycodemapdb/tools/keymap-gen \ + --lang pod --varname "Key code values for $$NAME" code-docs \ + $(srcdir)/keycodemapdb/data/keymaps.csv $$NAME > \ + $@-tmp && mv $@-tmp $@ || rm $@-tmp + +util/virkeyname-%.pod: $(srcdir)/keycodemapdb/data/keymaps.csv \ + $(srcdir)/keycodemapdb/tools/keymap-gen Makefile.am + $(AM_V_GEN)export NAME=`echo $@ | sed -e 's,util/virkeyname-,,' \ + -e 's,\.pod,,'` && \ + $(MKDIR_P) util/ && \ + $(PYTHON) $(srcdir)/keycodemapdb/tools/keymap-gen \ + --lang pod --varname "Key name values for $$NAME" name-docs \ + $(srcdir)/keycodemapdb/data/keymaps.csv $$NAME > \ + $@-tmp && mv $@-tmp $@ || rm $@-tmp + +util/virkey%.7: util/virkey%.pod + $(AM_V_GEN)$(POD2MAN) --section=7 $< $@-t1 && \ + if grep 'POD ERROR' $@-t1; then rm $@-t1; exit 1; fi && \ + sed \ + -e 's|SYSCONFDIR|\@sysconfdir\@|g' \ + -e 's|LOCALSTATEDIR|\@localstatedir\@|g' \ + < $@-t1 > $@-t2 && \ + rm -f $@-t1 && \ + mv $@-t2 $@ + KEYCODES = linux osx atset1 atset2 atset3 xt xtkbd usb win32 rfb KEYNAMES = linux osx win32 KEYTABLES = $(KEYCODES:%=util/virkeycodetable_%.h) \ $(KEYNAMES:%=util/virkeynametable_%.h) +KEYPODS = $(KEYCODES:%=util/virkeycode-%.pod) \ + $(KEYNAMES:%=util/virkeyname-%.pod) +KEYMANS = $(KEYPODS:%.pod=%.7) + +man7_MANS = $(KEYMANS) + UTIL_SOURCES += $(KEYTABLES) BUILT_SOURCES += $(KEYTABLES) -MAINTAINERCLEANFILES += $(KEYTABLES) +MAINTAINERCLEANFILES += $(KEYTABLES) $(KEYMANS) $(KEYPODS) # Internal generic driver infrastructure NODE_INFO_SOURCES = nodeinfo.h nodeinfo.c @@ -2797,8 +2835,6 @@ virtlogd.init: logging/virtlogd.init.in $(top_builddir)/config.status chmod a+x $@-t && \ mv $@-t $@ -POD2MAN = pod2man -c "Virtualization Support" -r "$(PACKAGE)-$(VERSION)" - virtlockd.8.in: locking/virtlockd.pod $(AM_V_GEN)$(POD2MAN) --section=8 $< $@-t1 && \ if grep 'POD ERROR' $@-t1; then rm $@-t1; exit 1; fi && \ diff --git a/tools/virsh.pod b/tools/virsh.pod index 6c06ee0..c1a6015 100644 --- a/tools/virsh.pod +++ b/tools/virsh.pod @@ -2062,11 +2062,15 @@ The numeric values are those defined by the Linux generic input event subsystem. The symbolic names match the corresponding Linux key constant macro names. +See L<virkeycode-linux(7)> and L<virkeyname-linux(7)> + =item B<xt> The numeric values are those defined by the original XT keyboard controller. No symbolic names are provided +See L<virkeycode-xt(7)> + =item B<atset1> The numeric values are those defined by the AT keyboard controller, @@ -2074,22 +2078,30 @@ set 1 (aka XT compatible set). Extended keycoes from B<atset1> may differ from extended keycodes in the B<xt> codeset. No symbolic names are provided +See L<virkeycode-atset1(7)> + =item B<atset2> The numeric values are those defined by the AT keyboard controller, set 2. No symbolic names are provided +See L<virkeycode-atset2(7)> + =item B<atset3> The numeric values are those defined by the AT keyboard controller, set 3 (aka PS/2 compatible set). No symbolic names are provided +See L<virkeycode-atset3(7)> + =item B<os_x> The numeric values are those defined by the OS-X keyboard input subsystem. The symbolic names match the corresponding OS-X key constant macro names +See L<virkeycode-osx(7)> and L<virkeyname-osx(7)> + =item B<xt_kbd> The numeric values are those defined by the Linux KBD device. @@ -2097,17 +2109,23 @@ These are a variant on the original XT codeset, but often with different encoding for extended keycodes. No symbolic names are provided. +See L<virkeycode-xtkbd(7)> + =item B<win32> The numeric values are those defined by the Win32 keyboard input subsystem. The symbolic names match the corresponding Win32 key constant macro names +See L<virkeycode-win32(7)> and L<virkeyname-win32(7)> + =item B<usb> The numeric values are those defined by the USB HID specification for keyboard input. No symbolic names are provided +See L<virkeycode-usb(7)> + =item B<rfb> The numeric values are those defined by the RFB extension for sending @@ -2115,6 +2133,8 @@ raw keycodes. These are a variant on the XT codeset, but extended keycodes have the low bit of the second byte set, instead of the high bit of the first byte. No symbolic names are provided. +See L<virkeycode-rfb(7)> + =back B<Examples> -- 2.9.3

On Fri, 2017-03-03 at 16:54 +0000, Daniel P. Berrange wrote:
Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- libvirt.spec.in | 1 + mingw-libvirt.spec.in | 2 ++ src/Makefile.am | 42 +++++++++++++++++++++++++++++++++++++++--- tools/virsh.pod | 20 ++++++++++++++++++++ 4 files changed, 62 insertions(+), 3 deletions(-)
'make distcheck' doesn't pass after applying this patch: make[2]: Leaving directory '/home/abologna/src/upstream/libvirt/libvirt-3.3.0/_build/sub/examples' rm -f config.status config.cache config.log configure.lineno config.status.lineno rm -f Makefile ERROR: files left in build directory after distclean: ./src/util/virkeyname-osx.7 ./src/util/virkeyname-linux.7 ./src/util/virkeycode-atset2.7 ./src/util/virkeycode-rfb.7 ./src/util/virkeycode-win32.7 ./src/util/virkeycode-atset3.7 ./src/util/virkeycode-osx.7 ./src/util/virkeycode-atset1.7 ./src/util/virkeycode-usb.7 ./src/util/virkeycode-linux.7 ./src/util/virkeycode-xtkbd.7 ./src/util/virkeyname-win32.7 ./src/util/virkeycode-xt.7 Makefile:2365: recipe for target 'distcleancheck' failed make[1]: *** [distcleancheck] Error 1 make[1]: Leaving directory '/home/abologna/src/upstream/libvirt/libvirt-3.3.0/_build/sub' Makefile:2292: recipe for target 'distcheck' failed make: *** [distcheck] Error 1 Please take a look at it while I review patch 1/2 ;) -- Andrea Bolognani / Red Hat / Virtualization

On Fri, Mar 03, 2017 at 04:54:33PM +0000, Daniel P. Berrange wrote:
Changed in v2:
- Fixed make syntax-check errors - Auto-generate man pages listing value key codes for use with the virDomainSendKey API / virsh send-key command
Daniel P. Berrange (2): util: switch over to use keycodemapdb GIT submodule Add ability to generate man page describing key code names & values
ping Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://entangle-photo.org -o- http://search.cpan.org/~danberr/ :|

ping again.... On Fri, Mar 10, 2017 at 10:32:24AM +0000, Daniel P. Berrange wrote:
On Fri, Mar 03, 2017 at 04:54:33PM +0000, Daniel P. Berrange wrote:
Changed in v2:
- Fixed make syntax-check errors - Auto-generate man pages listing value key codes for use with the virDomainSendKey API / virsh send-key command
Daniel P. Berrange (2): util: switch over to use keycodemapdb GIT submodule Add ability to generate man page describing key code names & values
ping
Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://entangle-photo.org -o- http://search.cpan.org/~danberr/ :|
-- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://entangle-photo.org -o- http://search.cpan.org/~danberr/ :|
participants (2)
-
Andrea Bolognani
-
Daniel P. Berrange