keynav - Fedora (25) Installation

447
csey

Ich hatte vor kurzem Schwierigkeiten beim Installieren von "keynav" (ein Dienstprogramm zur Tastatursteuerung des Mauszeigers). Das erste Problem:

keynav.c:29:17: fatal error: xdo.h: No such file or directory #include <xdo.h> ^ compilation terminated. 

Und als das gelöst wurde, war der zweite:

cc keynav.o -o keynav -lcairo -lXinerama -lglib-2.0 -lXext -lX11 -lXtst -lglib-2.0 -lxdo; \  keynav.o: In function `parse_mods': keynav.c:(.text+0x16c): undefined reference to `xdo_symbol_map' keynav.o: In function `cmd_start': keynav.c:(.text+0x1a1e): undefined reference to `xdo_window_setclass' keynav.o: In function `cmd_cursorzoom': keynav.c:(.text+0x20bb): undefined reference to `xdo_mouselocation' keynav.o: In function `cmd_windowzoom': keynav.c:(.text+0x212f): undefined reference to `xdo_window_get_active' keynav.o: In function `cmd_warp': keynav.c:(.text+0x22d9): undefined reference to `xdo_mousemove' keynav.c:(.text+0x22f5): undefined reference to `xdo_mouse_wait_for_move_to' keynav.o: In function `cmd_click': keynav.c:(.text+0x235f): undefined reference to `xdo_click' keynav.o: In function `cmd_drag': keynav.c:(.text+0x2487): undefined reference to `xdo_mouseup' keynav.c:(.text+0x24c3): undefined reference to `xdo_keysequence_down' keynav.c:(.text+0x24df): undefined reference to `xdo_mousedown' keynav.c:(.text+0x24fd): undefined reference to `xdo_mousemove_relative' keynav.c:(.text+0x251b): undefined reference to `xdo_mousemove_relative' keynav.c:(.text+0x2555): undefined reference to `xdo_keysequence_up' collect2: error: ld returned 1 exit status Makefile:31: recipe for target 'keynav' failed make: *** [keynav] Error 1 

Allerdings habe ich es jetzt erfolgreich installiert, so werde ich die Antwort posten, falls es jemand anderes braucht!

0

1 Antwort auf die Frage

2
csey

Das erste Problem liegt also daran, dass die Entwicklungsversion der xdo-Bibliothek nicht vorhanden ist, und wird von behoben

dnf install libxdo-devel 

Das zweite Problem wird dadurch verursacht, dass die Datei keynav.ceine Reihe falsch benannter Aufrufe aus der xdo.hHeaderdatei enthält. (Ich gehe davon aus, dass es zwischen den Versionen Unstimmigkeiten gibt, aber ich habe mich nicht damit beschäftigt.)

In beiden Fällen können diese von Hand behoben werden, indem die gleichnamigen Funktionen in der Header-Datei gefunden und die Namen in der Quelldatei bearbeitet werden. Hier ist das Ergebnis diffder Änderung und des Originals:

292c289 < const char **symbol_map = xdo_get_symbol_map();  --- > const char **symbol_map = xdo_symbol_map(); 846c843 < xdo_set_window_class(xdo, zone, "keynav", "keynav"); --- > xdo_window_setclass(xdo, zone, "keynav", "keynav"); 1004c1001 < xdo_get_mouse_location(xdo, &xloc, &yloc, NULL); --- > xdo_mouselocation(xdo, &xloc, &yloc, NULL); 1019c1016 < xdo_get_active_window(xdo, &curwin); --- > xdo_window_get_active(xdo, &curwin); 1048,1049c1045,1046 < xdo_move_mouse(xdo, x, y, viewports[wininfo.curviewport].screen_num); < xdo_wait_for_mouse_move_to(xdo, x, y); --- > xdo_mousemove(xdo, x, y, viewports[wininfo.curviewport].screen_num); > xdo_mouse_wait_for_move_to(xdo, x, y); 1062c1059 < xdo_click_window(xdo, CURRENTWINDOW, button); --- > xdo_click(xdo, CURRENTWINDOW, button); 1100c1097 < xdo_mouse_up(xdo, CURRENTWINDOW, button); --- > xdo_mouseup(xdo, CURRENTWINDOW, button); 1104,1105c1101,1102 < xdo_send_keysequence_window_down(xdo, 0, drag_modkeys, 12000); < xdo_mouse_down(xdo, CURRENTWINDOW, button); --- > xdo_keysequence_down(xdo, 0, drag_modkeys, 12000); > xdo_mousedown(xdo, CURRENTWINDOW, button); 1109,1110c1106,1107 < xdo_move_mouse_relative(xdo, 1, 0); < xdo_move_mouse_relative(xdo, -1, 0); --- > xdo_mousemove_relative(xdo, 1, 0); > xdo_mousemove_relative(xdo, -1, 0); 1112c1109 < xdo_send_keysequence_window_up(xdo, 0, drag_modkeys, 12000); --- > xdo_keysequence_up(xdo, 0, drag_modkeys, 12000); 

Wie Sie sehen, müssen nur die Namen der Funktionen geändert werden, nicht die Parameter.

[Wenn Sie nicht wissen diff: In diesem Fall sind die Zeilen oben jeweils ---die neuen (beginnend mit <) und die Zeilen darunter jeweils ---die alten, die geändert wurden (beginnend mit >) und die Sie benötigen auch in Ihrer keynav.cDatei ändern .)]

Hoffentlich hilft das!