From 4e123a61f19e7e77432833365c6d635c294250c2 Mon Sep 17 00:00:00 2001
From: Jiri Kalvoda <jirikalvoda@kam.mff.cuni.cz>
Date: Mon, 22 Feb 2021 09:06:18 +0100
Subject: [PATCH] KEYMAP Init

---
 keymap/init.sh                 |   2 +
 keymap/keymap-abstract.tex     |  48 ++++++++
 keymap/keymap-doc-keyboard.tex |  70 +++++++++++
 keymap/keymap-doc-nw.tex       | 216 +++++++++++++++++++++++++++++++++
 keymap/keymap-doc.tex          | 208 +++++++++++++++++++++++++++++++
 keymap/keymap-i3-keyboard.tex  |  59 +++++++++
 keymap/keymap-i3.tex           | 132 ++++++++++++++++++++
 keymap/keymap-utils.tex        |  28 +++++
 8 files changed, 763 insertions(+)
 create mode 100755 keymap/init.sh
 create mode 100644 keymap/keymap-abstract.tex
 create mode 100644 keymap/keymap-doc-keyboard.tex
 create mode 100644 keymap/keymap-doc-nw.tex
 create mode 100644 keymap/keymap-doc.tex
 create mode 100644 keymap/keymap-i3-keyboard.tex
 create mode 100644 keymap/keymap-i3.tex
 create mode 100644 keymap/keymap-utils.tex

diff --git a/keymap/init.sh b/keymap/init.sh
new file mode 100755
index 0000000..26a7908
--- /dev/null
+++ b/keymap/init.sh
@@ -0,0 +1,2 @@
+ln -sr . ~/texmf/tex/keymap
+texhash 
diff --git a/keymap/keymap-abstract.tex b/keymap/keymap-abstract.tex
new file mode 100644
index 0000000..d902c4e
--- /dev/null
+++ b/keymap/keymap-abstract.tex
@@ -0,0 +1,48 @@
+%%%%%%%%%%%%%% Mod keys %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\Ctrl{c}
+\def\Shift{s}
+\def\Super{w}
+%%%%%%%%%%%%%% Undef key %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\UndefKey{}
+%%%%%%%%%%%%%% general Commands %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\GoMode#1{\UndefKey}
+\def\Cmd#1{\UndefKey}
+\def\LayoutCont#1{\UndefKey}
+\def\ResizeCont#1#2#3{\UndefKey}
+\def\FloatingToggleCont{\UndefKey}
+
+%%%%%%%%%%%%%% WM Commands %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% workspaces
+\def\GoWorkspace#1{\UndefKey}
+\def\ContWorkspace#1{\UndefKey}
+\def\ContGoWorkspace#1{\UndefKey}
+\def\MoveWorkspace#1{\UndefKey}
+% Container
+\def\FocusWind#1{\UndefKey}
+\def\MoveCont#1{\UndefKey}
+\def\SplitContV{\UndefKey}
+\def\SplitContH{\UndefKey}
+\def\SplitContT{\UndefKey}
+\def\FullscreenContToggle{\UndefKey}
+% Restart i3
+\def\RestartProg{\UndefKey}
+
+%%%%%%%%%%%%%% System modificator %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\ExitProg{\UndefKey}
+\def\ExitShutdown{\UndefKey}
+\def\ExitSuspend{\UndefKey}
+\def\ExitRestart{\UndefKey}
+\def\Light#1#2{\Cmd{light #1 #2; lightGUI}}
+\catcode37=11
+\def\Volume#1#2{\Cmd{amixer sset Master -q #2%#1;   sleep 0.05; volumeGUI}}
+\catcode37=14
+\def\CpuFSet#1{\Cmd{cpuF #1; cpuFGUI 'SET TO #1'}}
+\def\CpuF{\Cmd{cpuFGUI}}
+\def\DiskSleep#1#2{\Cmd{diskSleepGUI #1 #2}}
+
+%%%%%%%%%%%%%% Not bind commmand %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\And#1#2{#1}
+\def\AndII#1#2{#2}
+\def\RunCmd#1{}
+\def\IiiiLine#1{}
+\def\IiiiInline#1{}
diff --git a/keymap/keymap-doc-keyboard.tex b/keymap/keymap-doc-keyboard.tex
new file mode 100644
index 0000000..017fb80
--- /dev/null
+++ b/keymap/keymap-doc-keyboard.tex
@@ -0,0 +1,70 @@
+\def\setkeywh#1#2#3#4{%
+\defcs{keywK#1}{#2}%
+\defcs{keyhK#1}{#3}%
+\defcs{skipBeforeK#1}{#4}%
+}
+\newdimen\standkeyw\standkeyw 100pt\relax%
+\newdimen\standkeyh\standkeyh 35pt\relax%
+\for i 0 {16}{\for j 0 {13} {\setkeywh{\Key{}{\the\counti}{\the\countj}}{\standkeyw}{\standkeyh}{0pt}}}
+\setkeywh{\Key{}{0}{1}}{\standkeyw}{\standkeyh}{\standkeyw}
+\setkeywh{\Key{}{0}{5}}{\standkeyw}{\standkeyh}{0.5\standkeyw}
+\setkeywh{\Key{}{0}{9}}{\standkeyw}{\standkeyh}{0.5\standkeyw}
+\setkeywh{\Key{}{1}{13}}{2\standkeyw}{\standkeyh}{0pt}
+\setkeywh{\Key{}{2}{0}}{1.5\standkeyw}{\standkeyh}{0pt}
+\setkeywh{\Key{}{2}{13}}{1.5\standkeyw}{\standkeyh}{0pt}
+\setkeywh{\Key{}{3}{0}}{2\standkeyw}{\standkeyh}{0pt}
+\setkeywh{\Key{}{4}{0}}{1.5\standkeyw}{\standkeyh}{0pt}
+\setkeywh{\Key{}{4}{12}}{2.5\standkeyw}{\standkeyh}{0pt}
+\setkeywh{\Key{}{5}{0}}{2\standkeyw}{\standkeyh}{0pt}
+\setkeywh{\Key{}{5}{1}}{1.5\standkeyw}{\standkeyh}{0pt}
+\setkeywh{\Key{}{5}{2}}{1.5\standkeyw}{\standkeyh}{0pt}
+\setkeywh{\Key{}{5}{3}}{5\standkeyw}{\standkeyh}{0pt}
+\setkeywh{\Key{}{5}{4}}{1.5\standkeyw}{\standkeyh}{0pt}
+\setkeywh{\Key{}{5}{5}}{1.5\standkeyw}{\standkeyh}{0pt}
+\setkeywh{\Key{}{5}{6}}{2\standkeyw}{\standkeyh}{0pt}
+\setkeywh{\Key{}{9}{0}}{\standkeyw}{\standkeyh}{\standkeyw}
+\setkeywh{\Key{}{15}{0}}{2\standkeyw}{\standkeyh}{0pt}
+\defcs{keyLineLen0}{13}
+\defcs{keyLineLen1}{14}
+\defcs{keyLineLen2}{14}
+\defcs{keyLineLen3}{13}
+\defcs{keyLineLen4}{13}
+\defcs{keyLineLen5}{07}
+\defcs{keyLineLen6}{03}
+\defcs{keyLineLen7}{03}
+\defcs{keyLineLen8}{03}
+\defcs{keyLineLen9}{01}
+\defcs{keyLineLen10}{03}
+\defcs{keyLineLen11}{04}
+\defcs{keyLineLen12}{04}
+\defcs{keyLineLen13}{03}
+\defcs{keyLineLen14}{04}
+\defcs{keyLineLen15}{02}
+
+\def\setKeyNames#1#2#3{%
+\countj#2%
+\for{iter}\in{#3}{\ex\edef\csname keyNameK\Key{}{#1}{\the\countj}\endcsname{\iter}\advance\countj1}%
+}
+\setKeyNames{0}{0}{{Esc}}
+\for i 1 {13}{\setKeyNames{0}{\counti}{{F\the\counti}}}
+\setKeyNames{1}{0}{`1234567890-={Backspace}}
+\setKeyNames{2}{0}{{Tab}qwertyuiop[]{Entr}}
+\setKeyNames{3}{0}{{CapsLk}asdfghjkl;'}
+\ex\def\csname keyNameK\Key{}{3}{12}\endcsname{\\}
+\setKeyNames{4}{0}{{Shift}{NOT}zxcvbnm,./{Shift}}
+\setKeyNames{5}{0}{{Ctrl}{Super}{Alt}{Space}{AltGr}{Super}{Ctrl}}
+\setKeyNames{6}{0}{{PrtSc}{ScrLock}{Pause}}
+\setKeyNames{7}{0}{{Insert}{Home}{PgUp}}
+\setKeyNames{8}{0}{{Delete}{End}{PgDown}}
+\setKeyNames{9}{0}{{Up}}
+\setKeyNames{10}{0}{{Left}{Down}{Right}}
+\setKeyNames{11}{0}{{NumLock}/*-}
+\setKeyNames{12}{0}{789+}
+\setKeyNames{13}{0}{456}
+\setKeyNames{14}{0}{123{Enter}}
+\setKeyNames{15}{0}{0.}
+
+\newdimen\afterEscSkip
+\afterEscSkip 30pt
+\newdimen\afterAlphaSkip
+\afterAlphaSkip 30pt
diff --git a/keymap/keymap-doc-nw.tex b/keymap/keymap-doc-nw.tex
new file mode 100644
index 0000000..3c4b9bc
--- /dev/null
+++ b/keymap/keymap-doc-nw.tex
@@ -0,0 +1,216 @@
+\def\OutputMode{doc}
+\input keymap-utils.tex
+\input keymap-abstract.tex
+
+%%%%%%%%%%%%%% Working vars %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcount\counti
+\newcount\countj
+
+%%% Colors %%% (from ucwmac (c) MJ)
+\chardef\colorstk=\pdfcolorstackinit page direct{0 g 0 G}
+\def\colorset#1{\pdfcolorstack\colorstk set #1}
+\def\colorpush#1{\pdfcolorstack\colorstk push #1}
+\def\colorpop{\pdfcolorstack\colorstk pop}
+\def\colorlocal{\aftergroup\colorpop\colorpush}
+\def\rgb#1{{#1 rg #1 RG}}
+\def\gray#1{{#1 g #1 G}}
+\def\cmyk#1{{#1 k #1 K}}
+\def\cwhite{\rgb{1 1 1}}
+
+%%%%%%%%%%%%%% Output %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\parindent=0pt
+\pdfpagewidth=85cm
+\pdfpageheight=85cm
+\hsize=78cm
+\vsize=78cm
+\font\hhdfont csbx17
+\font\smallfont cmr8
+\font\basicfont cmr10\basicfont
+\font\smallsmallfont cmr5 at 5pt
+\newbox\autofontBox
+\def\autofont#1{{%
+\setbox\autofontBox=\hbox{#1}%
+\ifdim\wd\autofontBox<100pt\relax\basicfont\else%
+\ifdim\wd\autofontBox<300pt\relax\baselineskip 1pt\smallfont\else%
+\fi\baselineskip 1pt\smallsmallfont\fi%
+#1%
+}}
+
+%%%%%%%%%%%%%% Chars and catcodes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\\{$\scriptscriptstyle \backslash$}
+\def\nl{\par}
+
+
+%%%%%%%%%%%%%% general commands %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\GoMode#1{\printkey{\rgb{0 0 1}}{MODE\nl\smallfont#1}}
+\def\Cmd#1{\printkey{\rgb{1 0 1}}{\autofont{#1}}}
+\def\UndefKey{\printkey{\rgb{1 0 0}}{UNDEF}}
+
+%%%%%%%%%%%%%% WM Commands %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% workspaces
+\def\GoWorkspace#1{\printkey{\rgb{0 1 1}}{Workspace\nl#1}}
+\def\ContWorkspace#1{\printkey{\rgb{0 1 1}}{Move to workspace\nl#1}}
+\def\ContGoWorkspace#1{\printkey{\rgb{0 1 1}}{Move and go to wsp.\nl#1}}
+\def\MoveWorkspace#1{\printkey{\rgb{0 1 0}}{Move worksp. #1}}
+% Container
+\def\FocusWind#1{\printkey{\rgb{0 1 0}}{Focus #1}}
+\def\MoveCont#1{\printkey{\rgb{0 1 0}}{Move #1}}
+\def\SplitContV{\printkey{\rgb{0.85 1 0}}{Split vertical}}
+\def\SplitContH{\printkey{\rgb{0.85 1 0}}{Split horizontal}}
+\def\SplitContT{\printkey{\rgb{0.85 1 0}}{Split tabbed}}
+\def\FullscreenContToggle{\printkey{\rgb{0.85 1 0}}{}}
+% Restart i3
+\def\RestartProg{\printkey{\rgb{1 0 0}}{Restart WM}}
+
+%%%%%%%%%%%%%% System modificator %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\ExitProg{\printkey{\rgb{1 0 0}}{Exit}}
+\def\ExitShutdown{\printkey{\rgb{1 0 0}}{Shutdown}}
+\def\ExitSuspend{\printkey{\rgb{1 0 0}}{Suspend}}
+\def\ExitRestart{\printkey{\rgb{1 0 0}}{Restart}}
+
+%%%%%%%%%%%%%% Kernel %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newdimen\keyw
+\newdimen\keyh
+\newdimen\skipBefore
+\def\Ctrl{\def\ctrl{1}}
+\def\Shift{}
+\def\Super{}
+
+\def\Key#1#2#3{%
+\def\ctrl{0}%
+#1%
+\edef\lastKeyMod{\ctrl}%
+\edef\lastKey{}%
+}
+
+\input keyboard-doc-keyboard.tex
+\def\BindKey#1#2{#1
+\defcs{keymapK\lastKey}{#2}
+}
+\def\getkey#1{%
+#1\csname keymapK\lastKey\endcsname%
+}
+
+% mods
+\def\allmod{{x}}%{x\Shift}{x\Ctrl}{x\Ctrl\Shift}{x\Super}{x\Shift\Super}{x\Ctrl\Super}{x\Ctrl\Shift\Super}}
+\Key{                 }{}{}\defcs{modNameM\lastKeyMod}{No mod}
+\Key{\Shift           }{}{}\defcs{modNameM\lastKeyMod}{Shift}
+\Key{\Ctrl            }{}{}\defcs{modNameM\lastKeyMod}{Ctrl}
+\Key{\Ctrl\Shift      }{}{}\defcs{modNameM\lastKeyMod}{Ctrl+Shift}
+\Key{\Super           }{}{}\defcs{modNameM\lastKeyMod}{Super}
+\Key{\Shift\Super     }{}{}\defcs{modNameM\lastKeyMod}{Shift+Super}
+\Key{\Ctrl\Super      }{}{}\defcs{modNameM\lastKeyMod}{Ctrl+Super}
+\Key{\Ctrl\Shift\Super}{}{}\defcs{modNameM\lastKeyMod}{Ctrl+Shift+Super}
+
+\def\nullkey{\printkey{\cwhite}{}}
+\def\nullkeyin{\nullkey} % For comparing
+\def\bindnullkey#1#2{%
+\for{iter}\in\allmod{\BindKey{\Key{\ex\eat\iter}{#1}{#2}}{\nullkey}}%
+}
+
+\def\getUsedMod#1#2{
+\for{iter}\in\allmod{\Key{\ex\eat\iter}{#1}{#2}\letcs{tmp}{keymapK\lastKey}\ifx\tmp\nullkeyin\else\defcs{activeModM\lastKeyMod}{1}\fi}%
+}
+
+
+\def\printkey#1#2{%
+\hrule \hbox{%
+\vrule\relax%
+\hbox to 0pt{\colorlocal{#1}\vrule width \keyw height \keyh\hskip -\keyw}%
+\vbox to \keyh{%
+\hsize\keyw%
+\leftskip 0pt plus 1fill%
+\rightskip 0pt plus 1fill%
+\vskip 0pt plus 1fil\relax%
+\keyname%
+#2%
+\hskip 0pt\hbox{}\vskip 0pt plus 1fil\relax\hrule height 0pt
+}\vrule%
+}\hrule%
+}
+
+\def\printkeybymap#1#2{%
+\Key{}{#1}{#2}\skipBefore \csname skipBeforeK\lastKey\endcsname%
+\kern \skipBefore\vbox{%
+\Key{}{#1}{#2}%
+\keyw \csname keywK\lastKey\endcsname%
+\keyh \csname keyhK\lastKey\endcsname%
+\advance\keyw -0.4pt%
+\advance\keyh -0.4pt%
+\def\keyname{#1-#2\nl}%
+\def\printkeybymapIsFirst{1}
+\for{iter}\in\allmod{%
+\letcs{tmp}{activeModM\ex\eat\iter}
+\if\tmp1%
+\getkey{\Key{\ex\eat\iter}{#1}{#2}}%
+\if \printkeybymapIsFirst1\relax%
+\advance\keyh -10pt%
+\vskip-0.4pt%
+\def\keyname{}%
+\def\printkeybymapIsFirst{0}%
+\fi%
+\fi%
+}%
+}%
+\hskip -0.4pt
+}
+
+
+\def\printline#1{\hbox{\for j 0 {\csname keyLineLen\the\counti\endcsname} {\printkeybymap{#1}{\the\countj}}}\vskip 10pt}
+
+\long\def\Mode#1#2{
+{
+\let\UpModeName\ModeName
+\def\ModeName{#1}
+%\for i 0 {16}{\for j 0 {14} {\bindnullkey{\the\counti}{\the\countj}}}
+#2
+\for{iter}\in\allmod{\Key{\ex\eat\iter}{}{}\defcs{activeModM\lastKeyMod}{0}}%
+\for i 0 {16}{\for j 0 {14} {\getUsedMod{\the\counti}{\the\countj}}}%
+{\hhdfont #1 (%
+\def\isFirst{1}%
+\for{iter}\in\allmod{%
+\Key{\ex\eat\iter}{}{}\letcs{tmp}{activeModM\lastKeyMod}%
+\if\tmp1%
+\if \isFirst1\def\isFirst{0}\else, \fi%
+%\csname modNameM\ex\eat\iter\endcsname%
+\fi%
+})}
+\vskip 10pt\relax
+\hbox{
+\vbox{
+\for i 0 1{\printline{\the\counti}}
+\vskip\afterEscSkip\relax
+\for i 1 6{\printline{\the\counti}}
+}\hskip \afterAlphaSkip
+\vbox{
+\for i 6 7{\printline{\the\counti}}
+\vskip\afterEscSkip\relax
+\for i 7 9{\printline{\the\counti}}
+\vskip \standkeyh
+\vskip 1.4pt
+\for i 9 {11}{\printline{\the\counti}}
+}\hskip \afterAlphaSkip
+\vbox{
+\for i {11} {15}{\printline{\the\counti}}
+}
+}
+}
+\vfil \break
+}
+
+%%%%%%%%%%%%%% Chars and catcodes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\catcode`&=11
+\catcode`"=11
+\catcode`'=11
+\catcode`_=11
+\catcode`~=11
+\catcode`$=11 %$
+
+%%%%%%%%%%%%%% Input %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\Mode{default}{
+\input master.tex
+}
+
+
+\bye
+
diff --git a/keymap/keymap-doc.tex b/keymap/keymap-doc.tex
new file mode 100644
index 0000000..f6d7582
--- /dev/null
+++ b/keymap/keymap-doc.tex
@@ -0,0 +1,208 @@
+\def\OutputMode{doc}
+\input keymap-utils.tex
+\input keymap-abstract.tex
+
+%%%%%%%%%%%%%% Working vars %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcount\counti
+\newcount\countj
+
+%%% Colors %%% (from ucwmac (c) MJ)
+\chardef\colorstk=\pdfcolorstackinit page direct{0 g 0 G}
+\def\colorset#1{\pdfcolorstack\colorstk set #1}
+\def\colorpush#1{\pdfcolorstack\colorstk push #1}
+\def\colorpop{\pdfcolorstack\colorstk pop}
+\def\colorlocal{\aftergroup\colorpop\colorpush}
+\def\rgb#1{{#1 rg #1 RG}}
+\def\gray#1{{#1 g #1 G}}
+\def\cmyk#1{{#1 k #1 K}}
+\def\cwhite{\rgb{1 1 1}}
+
+%%%%%%%%%%%%%% Output %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\parindent=0pt
+\pdfpagewidth=85cm
+\pdfpageheight=85cm
+\hsize=78cm
+\vsize=78cm
+\font\hhdfont csbx17
+\font\smallfont cmr8
+\font\basicfont cmr10\basicfont
+\font\smallsmallfont cmr5 at 5pt
+\newbox\autofontBox
+\def\autofont#1{{%
+\setbox\autofontBox=\hbox{#1}%
+\ifdim\wd\autofontBox<100pt\relax\basicfont\else%
+\ifdim\wd\autofontBox<300pt\relax\baselineskip 1pt\smallfont\else%
+\fi\baselineskip 1pt\smallsmallfont\fi%
+#1%
+}}
+
+%%%%%%%%%%%%%% Chars and catcodes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\\{$\scriptscriptstyle \backslash$}
+\def\nl{\par}
+
+
+%%%%%%%%%%%%%% general commands %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\GoMode#1{\printkey{\rgb{0 0 1}}{MODE\nl\smallfont#1}}
+\def\Cmd#1{\printkey{\rgb{1 0 1}}{\autofont{#1}}}
+\def\UndefKey{\printkey{\rgb{1 0 0}}{UNDEF}}
+
+%%%%%%%%%%%%%% WM Commands %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% workspaces
+\def\GoWorkspace#1{\printkey{\rgb{0 1 1}}{Workspace\nl#1}}
+\def\ContWorkspace#1{\printkey{\rgb{0 1 1}}{Move to workspace\nl#1}}
+\def\ContGoWorkspace#1{\printkey{\rgb{0 1 1}}{Move and go to wsp.\nl#1}}
+\def\MoveWorkspace#1{\printkey{\rgb{0 1 0}}{Move worksp. #1}}
+% Container
+\def\FocusWind#1{\printkey{\rgb{0 1 0}}{Focus #1}}
+\def\MoveCont#1{\printkey{\rgb{0 1 0}}{Move #1}}
+\def\SplitContV{\printkey{\rgb{0.85 1 0}}{Split vertical}}
+\def\SplitContH{\printkey{\rgb{0.85 1 0}}{Split horizontal}}
+\def\SplitContT{\printkey{\rgb{0.85 1 0}}{Split tabbed}}
+\def\FullscreenContToggle{\printkey{\rgb{0.85 1 0}}{}}
+% Restart i3
+\def\RestartProg{\printkey{\rgb{1 0 0}}{Restart WM}}
+
+%%%%%%%%%%%%%% System modificator %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\ExitProg{\printkey{\rgb{1 0 0}}{Exit}}
+\def\ExitShutdown{\printkey{\rgb{1 0 0}}{Shutdown}}
+\def\ExitSuspend{\printkey{\rgb{1 0 0}}{Suspend}}
+\def\ExitRestart{\printkey{\rgb{1 0 0}}{Restart}}
+
+%%%%%%%%%%%%%% Kernel %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newdimen\keyw
+\newdimen\keyh
+\newdimen\skipBefore
+
+\def\Key#1#2#3{%
+#1@#2@#3%
+}
+
+\input keymap-doc-keyboard.tex
+\def\BindKey#1#2{
+\defcs{keymapK#1}{#2}
+}
+\def\getkey#1{%
+\csname keymapK#1\endcsname%
+}
+
+% mods
+\def\allmod{{x}{x\Shift}{x\Ctrl}{x\Ctrl\Shift}{x\Super}{x\Shift\Super}{x\Ctrl\Super}{x\Ctrl\Shift\Super}}
+\defcs{modNameM}{No mod}
+\defcs{modNameM\Shift}{Shift}
+\defcs{modNameM\Ctrl}{Ctrl}
+\defcs{modNameM\Ctrl\Shift}{Ctrl+Shift}
+\defcs{modNameM\Super}{Super}
+\defcs{modNameM\Shift\Super}{Shift+Super}
+\defcs{modNameM\Ctrl\Super}{Ctrl+Super}
+\defcs{modNameM\Ctrl\Shift\Super}{Ctrl+Shift+Super}
+
+\def\nullkey{\printkey{\cwhite}{}}
+\def\nullkeyin{\nullkey} % For comparing
+\def\bindnullkey#1#2{%
+\for{iter}\in\allmod{\BindKey{\Key{\ex\eat\iter}{#1}{#2}}{\nullkey}}%
+}
+
+\def\getUsedMod#1#2{
+\for{iter}\in\allmod{\letcs{tmp}{keymapK\Key{\ex\eat\iter}{#1}{#2}}\ifx\tmp\nullkeyin\else\defcs{activeModM\ex\eat\iter}{1}\fi}%
+}
+
+
+\def\printkey#1#2{%
+\hrule \hbox{%
+\vrule\relax%
+\hbox to 0pt{\colorlocal{#1}\vrule width \keyw height \keyh\hskip -\keyw}%
+\vbox to \keyh{%
+\hsize\keyw%
+\leftskip 0pt plus 1fill%
+\rightskip 0pt plus 1fill%
+\vskip 0pt plus 1fil\relax%
+\keyname%
+#2%
+\hskip 0pt\hbox{}\vskip 0pt plus 1fil\relax\hrule height 0pt
+}\vrule%
+}\hrule%
+}
+
+\def\printkeybymap#1#2{%
+\skipBefore \csname skipBeforeK\Key{}{#1}{#2}\endcsname%
+\kern \skipBefore\vbox{%
+\keyw \csname keywK\Key{}{#1}{#2}\endcsname%
+\keyh \csname keyhK\Key{}{#1}{#2}\endcsname%
+\advance\keyw -0.4pt%
+\advance\keyh -0.4pt%
+\def\keyname{\csname keyNameK\Key{}{#1}{#2}\endcsname\nl}%
+\def\printkeybymapIsFirst{1}
+\for{iter}\in\allmod{%
+\letcs{tmp}{activeModM\ex\eat\iter}
+\if\tmp1%
+\getkey{\Key{\ex\eat\iter}{#1}{#2}}%
+\if \printkeybymapIsFirst1\relax%
+\advance\keyh -10pt%
+\vskip-0.4pt%
+\def\keyname{}%
+\def\printkeybymapIsFirst{0}%
+\fi%
+\fi%
+}%
+}%
+\hskip -0.4pt
+}
+
+
+\def\printline#1{\hbox{\for j 0 {\csname keyLineLen\the\counti\endcsname} {\printkeybymap{#1}{\the\countj}}}\vskip 10pt}
+
+\long\def\Mode#1#2{
+{
+\let\UpModeName\ModeName
+\def\ModeName{#1}
+\for i 0 {16}{\for j 0 {14} {\bindnullkey{\the\counti}{\the\countj}}}
+#2
+\for{iter}\in\allmod{\defcs{activeModM\ex\eat\iter}{0}}%
+\for i 0 {16}{\for j 0 {14} {\getUsedMod{\the\counti}{\the\countj}}}%
+{\hhdfont #1 (%
+\def\isFirst{1}%
+\for{iter}\in\allmod{%
+\letcs{tmp}{activeModM\ex\eat\iter}%
+\if\tmp1%
+\if \isFirst1\def\isFirst{0}\else, \fi%
+\csname modNameM\ex\eat\iter\endcsname%
+\fi%
+})}
+\vskip 10pt\relax
+\hbox{
+\vbox{
+\for i 0 1{\printline{\the\counti}}
+\vskip\afterEscSkip\relax
+\for i 1 6{\printline{\the\counti}}
+}\hskip \afterAlphaSkip
+\vbox{
+\for i 6 7{\printline{\the\counti}}
+\vskip\afterEscSkip\relax
+\for i 7 9{\printline{\the\counti}}
+{ \setbox5=\vbox{\printkeybymap{0}{0}}\vskip\ht5}
+\for i 9 {11}{\printline{\the\counti}}
+}\hskip \afterAlphaSkip
+\vbox{
+\for i {11} {16}{\printline{\the\counti}}
+}
+}
+}
+\vfil \break
+}
+
+%%%%%%%%%%%%%% Chars and catcodes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\catcode`&=11
+\catcode`"=11
+\catcode`'=11
+\catcode`_=11
+\catcode`~=11
+\catcode`$=11 %$
+
+%%%%%%%%%%%%%% Input %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\Mode{default}{
+\input master.tex
+}
+
+
+\bye
+
diff --git a/keymap/keymap-i3-keyboard.tex b/keymap/keymap-i3-keyboard.tex
new file mode 100644
index 0000000..712d2ba
--- /dev/null
+++ b/keymap/keymap-i3-keyboard.tex
@@ -0,0 +1,59 @@
+{
+\newcount\counti
+\newcount\countj
+\def\defKeyCode#1#2#3{\ex\global\ex\edef\csname keyCodeK#1K#2\endcsname{#3}}
+\defKeyCode{0}{0}{9}
+		%if(row==0 && col==0) return 9;
+\for i{11}{13}{\countj 95 \advance\countj\counti \advance\countj -11 \defKeyCode{0}{\the\counti}{\the\countj}}
+		%if(row==0 && col>=11) return 95+col-11;
+\for i{1}{11}{\countj 67 \advance\countj\counti \advance\countj -1 \defKeyCode{0}{\the\counti}{\the\countj}}
+		%if(row==0) return col+67-1;
+\defKeyCode{1}{0}{49}
+		%if(row==1 && col==0) return 49;
+\for i{1}{14}{\countj 10 \advance\countj\counti \advance\countj -1 \defKeyCode{1}{\the\counti}{\the\countj}}
+		%if(row==1) return col+10-1;
+\for i{0}{14}{\countj 23 \advance\countj\counti \advance\countj 0 \defKeyCode{2}{\the\counti}{\the\countj}}
+		%if(row==2) return col+23;
+\defKeyCode{3}{0}{66}
+		%if(row==3 && col==0) return 66;
+\defKeyCode{3}{12}{51}
+		%if(row==3 && col==12) return 51;
+\for i{1}{12}{\countj 38 \advance\countj\counti \advance\countj -1 \defKeyCode{3}{\the\counti}{\the\countj}}
+		%if(row==3) return col+38-1;
+\for i{0}{12}{\countj 50 \advance\countj\counti \advance\countj 0 \defKeyCode{4}{\the\counti}{\the\countj}}
+		%if(row==4) return col+50;
+\defKeyCode{4}{1}{94}
+		%if(row==4 && col==1) return 94;
+\defKeyCode{5}{0}{37}
+\defKeyCode{5}{1}{133}
+\defKeyCode{5}{2}{64}
+\defKeyCode{5}{3}{65}
+\defKeyCode{5}{4}{108}
+\defKeyCode{5}{5}{105}
+		%if(row==5) return std::vector<int>{37,133,64,65,108,105}[col];
+%
+\defKeyCode{6}{0}{107}
+\defKeyCode{6}{1}{78}
+\defKeyCode{6}{2}{127}
+		%if(row==6) return std::vector<int>{107,78,127}[col];
+\defKeyCode{7}{0}{118}
+\defKeyCode{7}{1}{110}
+\defKeyCode{7}{2}{112}
+		%if(row==7) return std::vector<int>{118,110,112}[col];
+\defKeyCode{8}{0}{119}
+\defKeyCode{8}{1}{115}
+\defKeyCode{8}{2}{116}
+		%if(row==8) return std::vector<int>{119,115,116}[col];
+\defKeyCode{9}{0}{111}
+		%if(row==9) return std::vector<int>{111}[col];
+\defKeyCode{10}{0}{113}
+\defKeyCode{10}{1}{116}
+\defKeyCode{10}{2}{114}
+		%if(row==10) return std::vector<int>{113,116,114}[col];
+% TODO
+		%if(row==11) return std::vector<int>{77,106,63,82}[col];
+		%if(row==12) return std::vector<int>{79,80,81,86}[col];
+		%if(row==13) return std::vector<int>{83,84,85}[col];
+		%if(row==14) return std::vector<int>{87,88,89,104}[col];
+		%if(row==15) return std::vector<int>{90,91}[col];
+}
diff --git a/keymap/keymap-i3.tex b/keymap/keymap-i3.tex
new file mode 100644
index 0000000..90d4952
--- /dev/null
+++ b/keymap/keymap-i3.tex
@@ -0,0 +1,132 @@
+\def\OutputMode{i3}
+\input keymap-utils.tex
+\input keymap-abstract.tex
+
+\catcode`p=1
+\catcode`q=2
+\catcode`{=11
+\catcode`}=11
+\def\SimLeftCurlip{q
+\def\SimRightCurlip}q
+\catcode`{=1
+\catcode`}=2
+\catcode`p=11
+\catcode`q=11
+
+\catcode113=0
+\catcode92=11
+qdefqSimBackslash{\}
+qcatcode92=0
+\catcode113=11
+
+\def\SimQuotes{"}
+
+\catcode`&=11
+\catcode`~=11
+\catcode`$=11 %$
+\catcode`"=13
+\catcode`'=11
+\catcode`_=11
+
+
+\long\def\nl{^^J}
+\newlinechar`^^J % LaTeX already does this
+
+\def\beginCmdEsc{%
+\def"{\SimBackslash\SimBackslash\SimQuotes}%
+\def\\{\SimBackslash\SimBackslash\SimBackslash\SimBackslash}%
+}
+\def\endEsc{
+\def"{\SimQuotes}%
+\def\\{\SimBackslash}%
+\def\{{\SimLeftCurli}%
+\def\}{\SimRightCurli}%
+}
+\endEsc
+
+\def\Ctrl{ctrl+}
+\def\Shift{shift+}
+\def\Super{Mod4+}
+\def\Key#1#2#3{%
+#1\csname keyCodeK#2K#3\endcsname%
+}
+
+\def\confirmCmd#1#2{\Cmd{i3-nagbar -t warning -m '#1' -b 'Yes' '#2'}}
+
+%%%%%%%%%%%%%% general Commands %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\GoMode#1{\addoutput{mode "#1"; }\Cmd{i3-mode-log "#1"}}
+\def\Cmd#1{\addoutput{exec "}\beginCmdEsc\addoutput{#1}\endEsc\addoutput{"}}
+\def\LayoutCont#1{\addoutput{ layout #1 }}
+\def\ResizeCont#1#2#3{\addoutput{ resize #1 #2 #3 px or #3 ppt }}
+\def\FloatingToggleCont{\addoutput{floating toggle}}
+
+%%%%%%%%%%%%%% WM Commands %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% workspaces
+\def\GoWorkspace#1{\addoutput{workspace "#1"}}
+\def\ContWorkspace#1{\addoutput{move container to workspace "#1"}}
+\def\ContGoWorkspace#1{\ContWorkspace{#1}\addoutput{; }\GoWorkspace{#1}}
+\def\MoveWorkspace#1{\addoutput{ move workspace to output #1}}
+% Container
+\def\FocusWind#1{\addoutput{ focus #1}}
+\def\MoveCont#1{\addoutput{ move #1}}
+\def\SplitContV{\addoutput{ split v }}
+\def\SplitContH{\addoutput{ split h }}
+\def\SplitContT{\addoutput{ split v; layout tabbed }}
+\def\FullscreenContToggle{\addoutput{ fullscreen toggle }}
+% Restart i3
+\def\RestartProg{\addoutput{ restart }}
+
+%%%%%%%%%%%%%% System modificator %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\ExitProg{\confirmCmd{Do you really want to EXIT i3 }{i3-msg exit}}
+\def\ExitShutdown{\confirmCmd{Do you really want to SHUTDOWN? }{poweroff}}
+\def\ExitSuspend{\Cmd{systemctl suspend}}
+\def\ExitRestart{\confirmCmd{Do you really want to REBOOT? }{reboot}}
+
+%%%%%%%%%%%%%% Not bind commmand %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\And#1#2{#1\addoutput{ ; }#2}
+\def\AndII#1#2{#1\addoutput{ ; }#2}
+\def\RunCmd#1{\addoutput{exec "}\beginCmdEsc\addoutput{#1}\endEsc\addoutput{"\nl}}
+\def\IiiiLine#1{\addoutput{#1\nl}}
+\def\IiiiInline#1{\addoutput{#1}}
+
+\input keymap-i3-keyboard.tex
+
+\def\addoutput#1{\long\edef\output{\output #1}}
+\def\bindkey#1#2{%
+\addoutput{bindcode #1 }#2\addoutput{\nl}%
+}
+\def\BindKey#1#2{%
+\addoutput{bindcode #1 }#2\addoutput{\nl}%
+}
+
+
+\newwrite\file
+\immediate\openout\file = ./i3.config
+
+
+\def\ModeDefaultName{default}
+\def\UpModeName{ERR}
+\def\ModeName{ERR}
+\long\def\Mode#1#2{
+{
+\let\UpModeName=\ModeName
+\edef\ModeName{#1}
+\long\edef\output{}
+\ifx\ModeName\ModeDefaultName\else\addoutput{mode "#1"\nl\{\nl}\fi
+#2
+\ifx\ModeName\ModeDefaultName\else\addoutput{\}}\fi
+\immediate\write\file{\output\nl
+}\relax
+}
+}
+
+
+
+\Mode{\ModeDefaultName}{
+\input ./master.tex
+}
+
+
+\closeout\file
+\bye
+
diff --git a/keymap/keymap-utils.tex b/keymap/keymap-utils.tex
new file mode 100644
index 0000000..188535b
--- /dev/null
+++ b/keymap/keymap-utils.tex
@@ -0,0 +1,28 @@
+\let\ex=\expandafter
+\def\eat#1{}
+\def\letcs#1#2{\ex\ex\ex \let\ex\ex \csname#1\endcsname \csname#2\endcsname}
+\def\defcs#1#2{\def\defcstmp{#2}\letcs{#1}{defcstmp}}
+
+\def\for#1#2#3#4{%
+\if\in#2%
+\defcs{endloop#1}{}%
+\ex\def\csname loop#1\endcsname##1{%
+\ex\if\csname endloop#1\endcsname##1\else%
+\defcs{#1}{##1}%
+#4\relax%
+\letcs{looptmp}{loop#1}%
+\ex\ex\ex\looptmp\fi}%
+\letcs{looptmp}{loop#1}%
+\ex\looptmp#3\csname endloop#3\endcsname%
+\else%
+\csname count#1\endcsname #2\relax%
+\defcs{loop#1}{%
+#4\relax%
+\advance\csname count#1\endcsname 1\relax%
+\ifnum\csname count#1\endcsname<#3%
+\letcs{looptmp}{loop#1}%
+\ex\ex\ex\looptmp\fi}\csname loop#1\endcsname%
+\fi%
+}
+
+
-- 
GitLab