β’ XC_arrow - ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΊΡΡΡΠΎΡ Π² ΡΠΎΡΠΌΠ΅ ΡΡΡΠ΅Π»ΠΊΠΈ, ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌΡΠΉ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ.
β’ XC_pencil - ΠΊΡΡΡΠΎΡ Π² ΡΠΎΡΠΌΠ΅ ΠΊΠ°ΡΠ°Π½Π΄Π°ΡΠ°.
β’ XC_watch - ΠΏΠ΅ΡΠΎΡΠ½ΡΠ΅ ΡΠ°ΡΡ.
Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΊΡΡΡΠΎΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΡΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² Π½Π΅ΡΠ»ΠΎΠΆΠ½ΠΎ. ΠΠ· ΡΠ°ΠΉΠ»Π° /usr/include/X11/cursorfont.h ΡΠ·Π½Π°Π΅ΠΌ Π½ΠΎΠΌΠ΅ΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² ΠΈ ΠΎΠΏΠ΅ΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΈΡ :
const
XC_watch=150;
var
(* ΡΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΊΡΡΡΠΎΡΠ° *)
watch_cursor: TCursor;
(* ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΊΡΡΡΠΎΡ "ΠΏΠ΅ΡΠΎΡΠ½ΡΠ΅ ΡΠ°ΡΡ" *)
watch_cursor:= XCreateFontCursor(display, XC_watch);
ΠΡΡΠ³ΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΡΡΡΠΎΡΠ° - ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΡΡ ΠΏΠΈΠΊΡΠ΅Π»ΡΠ½ΡΡ ΠΊΠ°ΡΡ Π³Π»ΡΠ±ΠΈΠ½ΠΎΠΉ 1. ΠΠ΄Π½Π° ΠΏΠΈΠΊΡΠ΅Π»ΡΠ½Π°Ρ ΠΊΠ°ΡΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠΎΡΠΌΡ ΠΊΡΡΡΠΎΡΠ°, Π° Π΄ΡΡΠ³Π°Ρ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΊΠ°ΠΊ ΠΌΠ°ΡΠΊΠ°, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠ°Ρ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠΈΠΊΡΠ΅Π»ΠΈ ΠΊΡΡΡΠΎΡΠ° Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π±ΡΠ΄ΡΡ Π½Π°ΡΠΈΡΠΎΠ²Π°Π½Ρ. ΠΡΡΠ°Π»ΡΠ½Π°Ρ ΡΠ°ΡΡΡ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΠΉ. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΊΡΡΡΠΎΡΠ° ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ XCreatePixmapCursor(). Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΊΡΡΡΠΎΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π±ΠΈΡΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ "icon.bmp". ΠΡΠ΄Π΅ΠΌ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡΡ, ΡΡΠΎ ΠΎΠ½ΠΎ ΡΠΆΠ΅ Π·Π°Π³ΡΡΠΆΠ΅Π½ΠΎ Π² ΠΏΠ°ΠΌΡΡΡ ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΎ Π² ΠΏΠΈΠΊΡΠ΅Π»ΡΠ½ΡΡ ΠΊΠ°ΡΡΡ, Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠΎΡ ΡΠ°Π½Π΅Π½ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ bitmap. ΠΡ Ρ ΠΎΡΠΈΠΌ, ΡΡΠΎ ΠΎΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΡΠΌ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΡΠ½ΡΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΡ Π½Π°ΡΠΈΡΡΡΡΡΡ, Π° Π±Π΅Π»ΡΠ΅ Π±ΡΠ΄ΡΡ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΡΠΌΠΈ. Π§ΡΠΎΠ±Ρ Π΄ΠΎΡΡΠΈΠ³Π½ΡΡΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΡΡΠ΅ΠΊΡΠ°, Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠΊΠΎΠ½ΠΊΡ ΠΈ ΠΊΠ°ΠΊ ΠΏΠΈΠΊΡΠ΅Π»ΡΠ½ΡΡ ΠΊΠ°ΡΡΡ ΠΊΡΡΡΠΎΡΠ°, ΠΈ ΠΊΠ°ΠΊ ΠΌΠ°ΡΠΊΡ ΠΏΠΈΠΊΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΊΠ°ΡΡΡ.
var
(* ΡΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΊΡΡΡΠΎΡΠ° *)
icon_cursor: TCursor;
(* Π²Π½Π°ΡΠ°Π»Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΈ ΡΠΎΠ½ΠΎΠ²ΡΠΉ ΡΠ²Π΅ΡΠ° ΠΊΡΡΡΠΎΡΠ° *)
cursor_fg, cursor_bg: TXColor;
screen_colormap: TColormap;
rc: TStatus;
(* ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΏΠ°Π»ΠΈΡΡΠ΅ ΡΠΊΡΠ°Π½Π° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ *)
screen_colormap:= XDefaultColormap(display, XDefaultScreen(display));
(* Π²ΡΠ΄Π΅Π»ΡΠ΅ΠΌ ΡΠ΅ΡΠ½ΡΠΉ ΠΈ Π±Π΅Π»ΡΠΉ ΡΠ²Π΅ΡΠ° *)
rc:= XAllocNamedColor(display, screen_colormap, 'black', @cursor_fg, @cursor_fg);
if (rc = 0) then begin
writeln('XAllocNamedColor - Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠ²Π΅Ρ "black"');
halt(1);
end;
rc:= XAllocNamedColor(display, screen_colormap, 'white', @cursor_bg, @cursor_bg);
if (rc = 0) then begin
writeln('XAllocNamedColor - Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠ²Π΅Ρ "white"');
halt(1);
end;
(* ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΊΡΡΡΠΎΡ. ΠΠΎΡΡΡΡΡ ΡΠΎΡΠΊΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π±Π»ΠΈΠΆΠ΅ ΠΊ Π²Π΅ΡΡ Π½Π΅ΠΌΡ Π»Π΅Π²ΠΎΠΌΡ ΡΠ³Π»Ρ ΠΊΡΡΡΠΎΡΠ° - ΠΏΠΎΠ·ΠΈΡΠΈΠΈ (x=5, y=4). *)
icon_cursor:= XCreatePixmapCursor(display, bitmap, bitmap, @cursor_fg, @cursor_bg, 5, 4);
ΠΠΎΠ³Π΄Π° ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΊΡΡΡΠΎΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΈΠΊΡΠ΅Π»Ρ ΠΊΡΡΡΠΎΡΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ, Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ ΠΎΡ ΠΌΡΡΠΈ. ΠΠ±ΡΡΠ½ΠΎ, ΠΌΡ Π²ΡΠ±Π΅ΡΠ΅ΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΊΡΡΡΠΎΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΏΠΎΡ ΠΎΠΆΠ΅ΠΉ Π½Π° "Π³ΠΎΡΡΡΡΡ ΡΠΎΡΠΊΡ". ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π° ΠΊΡΡΡΠΎΡΠ΅ Π² Π²ΠΈΠ΄Π΅ ΡΡΡΠ΅Π»ΠΊΠΈ ΠΊΠΎΠ½Π΅Ρ ΡΡΡΠ΅Π»ΠΊΠΈ Π±ΡΠ΄Π΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΊΠ°ΠΊ Π³ΠΎΡΡΡΠ°Ρ ΡΠΎΡΠΊΠ°.
ΠΠΎΠ³Π΄Π° ΠΊΡΡΡΠΎΡ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π½ΡΠΆΠ΅Π½, Π΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ½ΠΊΡΠΈΡ XFreeCursor():
XFreeCursor(display, icon_cursor);
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΊΡΡΡΠΎΡ ΡΠΎΠ·Π΄Π°Π½, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠΎΠ±ΡΠΈΡΡ X ΡΠ΅ΡΠ²Π΅ΡΡ ΠΎΠ± ΠΎΠΊΠ½Π΅, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½. ΠΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ XDefineCursor(), ΠΈ Π·Π°ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ΅ΡΠ²Π΅Ρ X ΠΌΠ΅Π½ΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΌΡΡΠΈ Π½Π° ΡΠΎΡΠΌΡ ΡΡΠΎΠ³ΠΎ ΠΊΡΡΡΠΎΡΠ° Π²ΡΡΠΊΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΌΡΡΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π²Π½ΡΡΡΠΈ ΡΡΠΎΠ³ΠΎ ΠΎΠΊΠ½ΠΎ. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ ΡΡΠΎΡ ΠΊΡΡΡΠΎΡ ΠΎΡ Π½Π°ΡΠ΅Π³ΠΎ ΠΎΠΊΠ½Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Xlib XUndefineCursor(), ΠΊΠΎΡΠΎΡΠ°Ρ Π·Π°ΡΡΠ°Π²ΠΈΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ ΠΊΡΡΡΠΎΡ.
(* ΠΏΡΠΈΠΊΡΠ΅ΠΏΠΈΡΡ ΠΊΡΡΡΠΎΡ ΠΊ ΠΎΠΊΠ½Ρ *)
XDefineCursor(display, win, icon_cursor);
(* ΠΎΡΠΊΠ»ΡΡΠΈΡΡ ΠΊΡΡΡΠΎΡ ΠΎΡ ΠΎΠΊΠ½Π° *)
XUndefineCursor(display, win);
1.2.7 ΠΠ°Π±ΠΎΡΠ°ΡΠΎΡΠ½Π°Ρ ΡΠ°Π±ΠΎΡΠ° #2 "Π’Π΅ΠΊΡΡ ΠΈ Π³ΡΠ°ΡΠΈΠΊΠ°"
1. ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π²ΡΠ²ΠΎΠ΄ΡΡΡΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ (Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ ΠΎΠΊΠ½Π°) ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΌ ΡΠ²Π΅ΡΠΎΠΌ. Π¦Π²Π΅Ρ ΠΈ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΌΠ΅Π½ΡΡΡΡΡ ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΠΎΠΊΠ½Π°.
2. Π‘ΠΎΡΡΠ°Π²ΡΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΡΡ ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° ΠΌΠ°ΡΠΊΡ ΡΡΠΈΡΡΠ°, Π²ΡΠ²ΠΎΠ΄ΠΈΠΌΡΡ ΡΡΡΠΎΠΊΡ, ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Ρ , Ρ ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ ΠΎΠΊΠ½ΠΎ Ρ ΡΠ΅ΠΊΡΡΠΎΠΌ ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ.
3. ΠΠ°ΡΠΈΡΡΠΉΡΠ΅ Π² ΠΎΠΊΠ½Π΅ Π³ΡΠ°ΡΠΈΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ sin(x) Π½Π° ΠΎΡΡΠ΅Π·ΠΊΠ΅ [-?;?]. ΠΡΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈΡΠ΅ ΠΊΡΡΡΠΈΠ²ΠΎΠΌ, ΠΌΠ΅ΡΠΊΠΈ ΠΏΠΎ ΠΎΡΡΠΌ - ΠΎΠ±ΡΡΠ½ΡΠΌ ΡΡΠΈΡΡΠΎΠΌ, Π½Π°ΡΠ°Π»ΠΎ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ (0) Π²ΡΠ΄Π΅Π»ΠΈΡΠ΅ ΠΆΠΈΡΠ½ΡΠΌ ΡΡΠΈΡΡΠΎΠΌ.
4. ΠΠ°ΡΠΈΡΡΠΉΡΠ΅ Π² ΠΎΠΊΠ½Π΅ 100 ΠΎΠΊΡΡΠΆΠ½ΠΎΡΡΠ΅ΠΉ. Π¦Π²Π΅Ρ, ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΡΠ΅Π½ΡΡΠ° ΠΈ ΡΠ°Π΄ΠΈΡΡ Π²ΡΠ±ΠΈΡΠ°ΡΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ.
5. ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ StructureNotifyMask ΠΈ ΡΡΡΡΠΊΠΈΠΉ ΡΡΠΈΡΡ, ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΠΉΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈΠ· ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π·Π°Π΄Π°Π½ΠΈΡ Π»Π°Π±ΠΎΡΠ°ΡΠΎΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ #1 ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅Π³Π΄Π° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π»ΠΎΡΡ Π² ΡΠ΅Π½ΡΡΠ΅ ΠΎΠΊΠ½Π°.
6. Π‘ΠΎΡΡΠ°Π²ΡΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π²ΡΠ²ΠΎΠ΄ΡΡΡΡ Π² ΠΎΠΊΠ½ΠΎ Π²ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ ΠΊΡΡΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΡΠΈΡΡΠ°.
1.3 Π Π°Π±ΠΎΡΠ° Ρ Π²Π½Π΅ΡΠ½ΠΈΠΌΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π°ΠΌΠΈ
1.3.1 ΠΠ»Π°Π²ΠΈΠ°ΡΡΡΠ°
ΠΠ°ΠΊ ΠΈ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, Π·Π°Π΄Π°ΡΠΈ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠ΅ΡΡ Π² X Window, Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π΄Π»Ρ Π²Π²ΠΎΠ΄Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°. ΠΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ ΠΈΠ»ΠΈ ΠΎΡΠΏΡΡΠΊΠ°Π΅Ρ ΠΊΠ»Π°Π²ΠΈΡΡ, ΡΠ΅ΡΠ²Π΅Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΡΠΈΠ³Π½Π°Π», ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ Π² ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΈΠΌΠ΅ΡΡΠ΅ΠΉ ΡΠΎΠΊΡΡ Π²Π²ΠΎΠ΄Π° (input focus).
ΠΠΎΡΡΠ½ΠΈΠΌ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΠΎΠΊΡΡ Π²Π²ΠΎΠ΄Π°. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ° Ρ ΠΌΠ°ΡΠΈΠ½Ρ ΠΎΠ΄Π½Π°, ΠΈ ΠΎΠ½Π° ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΡΡΡ Π²ΡΠ΅ΠΌΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠΌΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈ. ΠΠΎ Π² ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΏΠΎΡΡΡΠΏΠ°ΡΡΠΈΠΉ ΠΎΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΡΠΈΠ³Π½Π°Π» Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π»ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ , ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΡΠΎΠΉ, ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ Π°ΠΊΡΠΈΠ²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π³ΠΎΠ²ΠΎΡΡΡ, ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΈ Π΅Π΅ ΠΎΠΊΠ½ΠΎ ΠΈΠΌΠ΅ΡΡ ΡΠΎΠΊΡΡ Π²Π²ΠΎΠ΄Π°. ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΡ ΠΎΡ ΠΎΠΊΠ½Π° ΠΊ ΠΎΠΊΠ½Ρ ΠΈ ΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅.
ΠΠΎΠ³Π΄Π° ΠΎΠΊΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠΎΠΊΡΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΏΠΎΡΡΠ»Π°Π΅ΡΡΡ ΡΠΎΠ±ΡΡΠΈΠ΅ FocusIn, ΠΏΡΠΈ ΠΏΠΎΡΠ΅ΡΠ΅ - ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ ΡΠΎΠ±ΡΡΠΈΠ΅ FocusOut.
ΠΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ ΠΊΠ»Π°Π²ΠΈΡΡ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠΎΠ±ΡΡΠΈΠ΅ KeyPress. Π‘Π΅ΡΠ²Π΅Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΠ»Π°ΡΡ ΡΠΎΠ±ΡΡΠΈΠ΅ KeyRelease, ΠΊΠΎΠ³Π΄Π° ΠΊΠ»Π°Π²ΠΈΡΠ° ΠΎΡΠΏΡΡΠΊΠ°Π΅ΡΡΡ, Π½ΠΎ ΡΡΠΎ ΡΠΏΡΠ°Π²Π΅Π΄Π»ΠΈΠ²ΠΎ Π½Π΅ Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΠΈΠΏΠΎΠ² ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠΎΠ².
ΠΠ±Π° ΡΡΠΈΡ ΡΠΎΠ±ΡΡΠΈΡ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°ΡΡΡΡ ΡΡΡΡΠΊΡΡΡΠΎΠΉ ΡΠΈΠΏΠ° TXKeyEvent. ΠΠ΅ ΠΏΠΎΠ»Π΅ keycode ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠΎΠ΄ Π½Π°ΠΆΠ°ΡΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΡΠΈ, Π° ΠΏΠΎΠ»Π΅ state - ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΡ-ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² ΠΈ ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΌΡΡΠΈ. ΠΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°ΠΌΠΈ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΡΠΈ, ΠΊΠ°ΠΊ Shift, Ctrl, Caps Lock. ΠΡΠΎΠΌΠ΅ ΡΡΠΎΠ³ΠΎ, X ΠΏΡΠ΅Π΄ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ Π½Π°Π»ΠΈΡΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°ΡΡΡΡ Mod1,β¦, Mod5. ΠΠ°ΠΆΠ΄ΠΎΠΉ Π½Π°ΠΆΠ°ΡΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΡΠ΅-ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ ΠΌΡΡΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠ»Π°Π³ Π² ΠΏΠΎΠ»Π΅ state.
ΠΠΎΠ΄Ρ, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΠ΅ ΡΠ΅ΡΠ΅Π· ΠΏΠΎΠ»Π΅ keycode ΡΡΡΡΠΊΡΡΡΡ TXKeyEvent, ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΡΡΡ ΠΊΠ»Π°Π²ΠΈΡΠΈ. ΠΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΡΡ ΠΎΡ ΡΠΈΠΏΠ° ΠΌΠ°ΡΠΈΠ½Ρ ΠΈ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ. ΠΡΠΈ ΠΊΠΎΠ΄Ρ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Π½Π°Π·ΡΠ²Π°ΡΡ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ. Π§ΡΠΎΠ±Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΡΠ΅ΡΠ²Π΅Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΠΊΠΎΠ΄Π°ΠΌΠΈ ΠΊΠ»Π°Π²ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΌΠ΅Π½ΡΡΡΡΡ ΠΎΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ° ΠΊ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΡ, ΠΈ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠΌΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ°ΠΌΠΈ - Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΠΊΠΎΠ΄Π°ΠΌΠΈ (ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ). ΠΠ½ΠΈ ΠΈΠΌΠ΅ΡΡ ΠΏΡΠ΅Π΄ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ Π² ΡΠ°ΠΉΠ»Π΅ /usr/include/X11/keysymdef.h ΠΈ Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Ρ ΠΏΡΠ΅ΡΠΈΠΊΡΠ° "XK_". Π’Π°ΠΊ, Π±ΡΠΊΠ²Π΅ "a" ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠΈΠΌΠ²ΠΎΠ» XK_a, ΠΊΠ»Π°Π²ΠΈΡΠ΅ βΉReturnβΊ (βΉEnterβΊ) - ΡΠΈΠΌΠ²ΠΎΠ» XK_Return ΠΈ Ρ.Π΄.
ΠΠ»Ρ ΡΠ°Π·Π½ΡΡ Π°Π»ΡΠ°Π²ΠΈΡΠΎΠ² X ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ°Π·Π½ΡΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΊΠΎΠ΄ΠΎΠ². ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΡΠΈΠΏΡ Π°Π»ΡΠ°Π²ΠΈΡΠΎΠ² ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΡΡΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ /usr/include/X11/keysym.h.
ΠΠ΄Π½ΠΎΠΌΡ ΠΊΠΎΠ΄Ρ ΠΊΠ»Π°Π²ΠΈΡΠΈ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ-ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ². Π€ΡΠ½ΠΊΡΠΈΡ
function XKeycodeToKeysym(prDisplay: PDisplay; nKeycode: TKeyCode; nIndex: longint): TKeySym; cdecl; external;
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎ ΠΊΠΎΠ΄Ρ nKeyCode ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ Π΅ΠΌΡ ΡΠΈΠΌΠ²ΠΎΠ» Ρ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ nIndex. ΠΡΠ»ΠΈ nIndex ΡΠ°Π²Π΅Π½ 0, ΡΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ» ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΏΡΠΎΡΡΠΎ Π½Π°ΠΆΠ°ΡΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΡΠ΅. ΠΡΠ»ΠΈ nIndex ΡΠ°Π²Π΅Π½ 1, ΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ», ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΊΠ»Π°Π²ΠΈΡΠ° Π½Π°ΠΆΠ°ΡΠ° ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Ρ Shift.
Π€ΡΠ½ΠΊΡΠΈΡ XKeysymToKeycode() ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΊΠ°ΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ ΠΊΠΎΠ΄ΠΎΠ² ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΠΎΠ±ΡΠ°ΡΠΈΠ²ΡΠΈΡΡ ΠΊ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ΅ XGetKeyboardMapping().
ΠΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΊΠΎΠ΄ΠΎΠ² ΠΏΡΠΎΡΠ΅Π΄ΡΡΠΎΠΉ XChangeKeyboardMapping(). Π‘Π»Π΅Π΄ΡΡΡΠ°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΡΡΠ°Π²ΠΈΡ ΠΊΠ»Π°Π²ΠΈΡΠ΅ βΉF2βΊ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ» XK_F3.
β¦
var
nF2Sym, nF3Sym: TKeysym;
nF2Keycode: TKeyCode;
prDisplay: PDisplay;
β¦
nF2Sym:= XStringToKeysym ('F2');
nF3Sym:= XStringToKeysym ('F3');
nF2Keycode:= XKeysymToKeycode (prDisplay, nF2Sym);
XChangeKeyboardMapping (prDisplay, nF2Keycode, 1, @nF3Sym, 1);
β¦
ΠΠ΄Π΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π° ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° XStringToKeysym(), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎ ΡΡΡΠΎΠΊΠ΅ "str" Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΡΠΈΠΌΠ²ΠΎΠ» XK_str.
ΠΠΎΠ³Π΄Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΠΊΠΎΠ΄ΠΎΠ² ΠΌΠ΅Π½ΡΠ΅ΡΡΡ, Π²ΡΠ΅ΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΌ Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌ ΠΏΠΎΡΡΠ»Π°Π΅ΡΡΡ ΡΠΎΠ±ΡΡΠΈΠ΅ MappingNotify.
ΠΠ»Π°Π²ΠΈΡΠΈ-ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅ΡΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΊΠΎΠ΄Ρ. ΠΠ»Π°Π²ΠΈΡΠ°ΠΌ Shift ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Ρ ΡΠΈΠΌΠ²ΠΎΠ»Ρ XK_Shift_L ΠΈ XK_Shift_R; Caps Lock ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ XK_CapsLock; Control - XK_Control_L; Mod1 - XK_Meta_L ΠΈ XK_Meta_R. Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² (Mod2 - Mod5) Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ. X ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π½Π°Π±ΠΎΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΠΊΠΎΠ΄-ΡΠΈΠΌΠ²ΠΎΠ» Π΄Π»Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ². ΠΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅: XGetModifierMapping(), XInsertModifiermapEntry(), XDeleteModifiermapEntry(), XSetModifierMapping().