Ergonomie level PRO.
Dnešní článek přímo navazuje na minulý článek o ergonomii práce na počítači. Jak jsem už nakousl, ergo klávesnice a myš je jen část toho, co jsem si kvůli bolestem rukou vyrobil. To hlavní Vám chci ukázat dnes.
To, co vidíte vlevo vedle klávesnice, sice vypadá jako numerická klávesnice, ale není to tak :). Je to kouzelná klávesnice :)).
To, o čem dnes chci psát, je způsob, jak z jakékoli další klávesnice (numerické, klasické, gaming,….) udělat speciální ovládací “pult” s naprosto odlišnými akcemi, než jaké klávesy mají dělat. Zní to složitě? Trochu. Pojďme postupně.
Když jsem řešil ergonomii, tak zatímco pravou ruku jsem vyřešil vertikální myší, levá ruka toho při programování (a především pak ladění programů) má spoustu na starosti a bohužel řada z těchto akcí se dělá šílenými kombinacemi, které je ale většinou lepší udělat jednou rukou, než neustále přendávat pravou ruku mezi myší a klávesnicí. A tak levá ruka běžně mačká všechny různé ctrl+shift+xx nebo ctrl+alt+xxx a u toho jí všelijak lámu. A to není dobře :).
První nápad, jak jsem chtěl toto vyřešit, byla koupě nějaké externí mapovatelné kávesnice, kde si budu moct na jednotlivé tlačítka namapovat makra či akce stejně jako u myši. Jenže, toto zní snadněji než to v reálu je. Různé speciální tlačítkové panely, které toto umožňují, jsou většinou za nehorázné peníze a nabízí jen pár kláves. Například tento pěkný StreamDeck vyjde v alze na 4000kč. To je na můj vkus trochu dost :).
Jako další jsem se dostal k externím single-hand gaming klávesnicím. Po projití docela dost z nich jsem došel k závěru, že vlastně jediná rozumná je Razor Tartarus, která umožnuje mapování všech tlačítek na libovolné akce. Jenže cena u nás 3000kč. Sice lepší poměr cena ku počtu tlačítek, ale pořád nic moc.
A tak jsem se dostal k Aliexpressu. Takových klávesnic tam je plný vagón, jenže, mají jednu drobnou odlišnost. Ony už nejsou plně mapovatelné, ale jsou to obyčejné uřízlé půlklávesnice, kde jsou klasická písmena ASDF. Jenže taková klávesnice pak naopak stoji jen $13 místo $150. Ale pro mé účely se úplně nehodila. A tak jsem hledal dál.

Až jsem narazil na fórum HidMacros, kde byl podobný obrázek. Když se podíváte pořádně, uvidíte vlevo a vpravo klasické klávesnice, kdy každá dělá něco jiného. Hmm, tell me more. A tím sem zjistil, jakým směrem dál ubírat mé hledání. Nejde totiž o to, najít klávesnici, co umí vše, ale najít rozumnou klávesnici za rozumné peníze a celou si ji přeprogramovat.
A tím se dostáváme k aplikaci LuaMacros, což je vlastně HidMacros V2. Stojí za ním nějajký čech (nemáme ho třeba i mezi sebou zde? :)), který vyrobil aplikaci umožnující nejen namapovat různé akce na klávesy, ale co je důležitější, umí rozlišit klávesu a usb zařízení, na kterém byla tato klávesa stisknuta. To znamená, že můžete mít klidně 5 různých klávesnic, a vy jste schopni přesně určit, na které klávesnici byl stisk písmene proveden. Famózní.
A tak jsem šel testovat. První, co zjistíte, je že HidMacros aplikace již není podporovaná. To je ze začátku určitě škoda, protože ta měla údajně i GUI, kde si člověk mohl klávesy snadno namapovat. Nevýhoda naopak byla, že uměla jen základní funkce. Autor se pak rozhodl aplikaci předělat a zmodernizovat, ale protože (jeho slovy) nemá rád vývoj GUI a pro své potřeby ho nepotřebuje, rozhodl se celou aplikaci udělat jako skriptovací engine. To znamená, že v nové LuaMacros Vás nepřivítají žádné obrazovky, žádné návody nic, ale jen prázdné scriptovací okno pro Lua script.
Když si otevřete github stránku s projektem, jako první Vás uvítá varování o tom, abyste aplikaci nepoužívali :). To mne pobavilo :). Naprosto ale chápu, proč tam to varování je. Rozchodit appku není úplně snadné a naprosto rozumím autorovi, že dělat zdarma support tisícům lidí, kteří pak neumí ani zmáčknout tlačítko Donate, je složité. Stačí ale investovat trochu času a trochu hledat a po chvilce už budete umět vyrábět vlastní scripty.
Abych Vám s tím trochu pomohl, ukážu Vám zde pár příkladů jak script napsat a jak to mám nastaveno já. Toto jsou tři nejdůležitější linky, které budete potřebovat :
- https://github.com/me2d13/luamacros
- https://github.com/quirinux/luamacros-documentation
- https://github.com/me2d13/luamacros/wiki/List-of-Keys
Program není zas tak složitý, ale pojdmě si ho trochu okomentovat. Jako první musíte pojmenovat danou klávesnici nějakým názvem. Nejprve potřebujete zjistit identifikátor dané klávesnice. Na to je funkce lmc_assign_keyboard(‘MACROS’); a lmc_print_devices();
První příkaz Vám v aplikaci ukáže okno, které Vás vyzve ke stisku klávesy na dané klávesnici, druhý příkaz pak vypíše všechny zařízení i s jeho přiřazeným identifikátorem “MACROS”.
Version: 0.1.1.122 unassigned : \\?\HID#VID_0566&;amp;PID_3019&;MI_00#9&;1B07498&;0&;0000#{884B96C3-56EF-11D1-BC8C-00A0C91405DD} [638197749] : keyboard unassigned : \\?\HID#VID_046D&;PID_C232#2&;6BACD57&;0&;0000#{884B96C3-56EF-11D1-BC8C-00A0C91405DD} [459531] : keyboard unassigned : \\?\HID#VID_1050&;PID_0407&;MI_00#A&;A18C4AB&;0&;0000#{884B96C3-56EF-11D1-BC8C-00A0C91405DD} [65613] : keyboard unassigned : \\?\HID#VID_046D&;PID_C52B&;MI_00#9&;3AD9A56&;0&;0000#{884B96C3-56EF-11D1-BC8C-00A0C91405DD} [65611] : keyboard MACROS: \\?\HID#VID_045E&;PID_00DB&;MI_00#9&;2EFD0B1A&;0&;0000#{884B96C3-56EF-11D1-BC8C-00A0C91405DD} [65609] : keyboard unassigned : \\?\HID#VID_046D&;PID_C537&;MI_01&;COL01#9&;5E731AC&;0&;0000#{884B96C3-56EF-11D1-BC8C-00A0C91405DD} [65607] : keyboard unassigned : \\?\HID#VID_045E&;PID_07B2&;MI_00#9&;3B937931&;0&;0000#{884B96C3-56EF-11D1-BC8C-00A0C91405DD} [65605] : keyboard Total number of devices: 7
Nyní už víte, že Vaše klávesnice má kód 2EFD0B1A a proto použijete příkaz lmc_device_set_name(‘MACROS’, ‘2EFD0B1A ‘).. (toto ID najdete v řetězci cca v první třetině za PID_xxx&MI_xxx&;).
Toto byla defakto ta nesložitější část. Nyní si už jen namapujete akce na klávesy. Jelikož jde o scriptovací jazyk, můžete udělat cokoli. Jednoduchý příklad namapování je například tento:
-- assign logical name to macro keyboard lmc_assign_keyboard('MACROS'); -- define callback for whole device lmc_set_handler('MACROS',function(button, direction) if (direction == 1) then return end -- ignore down if (button == string.byte('C')) then lmc_spawn("calc") elseif (button == string.byte('N')) then lmc_spawn("notepad", "C:\\test.txt") elseif (button == string.byte('H')) then lmc_send_keys('Hello world') else print('Not yet assigned: ' .. button) end end)
Tento script Vám namapuje klávesy C, N a H na spuštění kalkulačky, poznámkového bloku a H na napsání “Hello world”. Jak vidíte, v této podobě zatím script nijak nerozlišuje, která aplikace je aktuálně spuštěná a obsluhuje klávesy vždy stejně. Na to je pak potřeba script rozšířit například o detekci názvu aktuálního okna či jinak zjistit, jaká aplikace zrovna běží. I toto všechno lze udělat a pokud budete na fóru hledat, jsou na to ukázky. Já sám zatím toto rozběhané nemám, jelikož používám zkratky jen ve Visual Studiu, takže je mi jedno, co to dělá v ostatních aplikacích.
Další script je pak mé mapovací schéma pro Visual Studio namapované na numeriku. Význam jednotlivých zkratek najdete v dokumentaci, jak vidíte, mapuji hlavně různé Shift+F10, CTRL+SHIFT+F10 a podobně.
lmc_device_set_name('MACROS', '1B07498') -- define callback for whole device lmc_set_handler('MACROS',function(button, direction) if (direction == 1) then return end -- ignore down if (button == 103 or button == 36) then lmc_send_keys('+{F11}') --7 elseif (button == 104 or button == 38) then lmc_send_keys('{F10}') --8 elseif (button == 105 or button == 33) then lmc_send_keys('{F11}')--9 elseif (button == 111) then lmc_send_keys('{F5}') -- / elseif (button == 106) then lmc_send_keys('{F9}') -- * elseif (button == 109) then lmc_send_keys('^<{F10}') -- - elseif (button == 107) then lmc_send_keys('^<+<{F10}') -- - elseif (button == 100 or button == 37) then lmc_send_keys('%<o') --4 elseif (button == 101 or button == 40) then lmc_send_keys('%g') --5 elseif (button == 102 or button == 39) then lmc_send_keys('%t%t') --6 elseif (button == 110) then lmc_send_keys('%<{TAB}') --. elseif (button == 98 or button == 144) then lmc_send_keys('%<t%<p') --2 elseif (button == 99 or button == 144) then lmc_send_keys('%<t%<n') --3 elseif (button == 144 or button == 96) then lmc_send_keys('%<{TAB}') --0 elseif (button == 13) then lmc_send_keys('{ENTER}') --Enter elseif (button == 8) then lmc_send_keys('{BACKSPACE}') --BACKSPACE else print('Not yet assigned: ' .. button) end end)
Poslední věc, která by stála za zmínku, je způsob, jak mapovat různé klávesy pro různé aplikace. Jak jsem říkal, sám to ještě nepoužívám. Ale když jsem si s LuaMacros hrál, tak jsem i toto testoval. Toto je zhruba způsob, jak můžete okna od sebe odlišit pomocí titulku okna:
function string.starts(String,Start) return string.sub(String,1,string.len(Start))==Start end -- define callback for whole device lmc_set_handler('MACROS',function(button, direction) windowTitle=lmc_get_window_title() print(windowTitle) if string.starts(tt,"LuaMacros") then ... end end
Tenkrát se mi nepovedlo najít, jestli lze přes script nějak vyčíst také window class, nejen window title. Ale protože jsem to extra nepotřeboval, tak jsem se s tím nezdržoval.
A nyní zpět ke klávesnicím. Jelikož už víme, že lze použít jakoukoli, objednal jsem z Aliexpresu na zkoušku jednak tuto druhou numeriku a pak nahoře ukázanou červeno-černou gaming klávesnici. Zatím mi dorazila jen ta bezdrátová numerická a ta určitě není špatná. Jsou na ni super ty druhé šipky, takže se lze pohybovat v kódu i levou rukou. S větším testem chci ale počkat i na tu gaming klávesnici, abych to otestoval celé najednou.
Co se samotného use-case týká, tak díky této klávesnici je pro mne práce ve Visual Studiu o dost pohodlnější. Co šlo jsem si namapoval na jednotlivé klávesy, takže nyní například celý debugging dělám jen skrz tuto klávesnici. Takže za sebe určitě doporučuji. Chce to ale věnovat tomu čas. Jednak na pochopení celého scriptovacího systému, dále pak hlavně na vymyšlení a zvyknutí si na novou klávesnici a nové rozmístění zkratek. Osobně jsem několikrát celé schéma předělával a stále ho ještě ladím. Investovaný čas se ale rozhodně vyplatí.

Co se týká využití, tak nemusí jít nutně jen o mnou zmiňované Visual Studio, můžete si takto namapovat jakoukoli jinou aplikaci, kde potřebujete hromadu zkratek (například Photoshop, Ilustrator či cokoli jiného), stejně tak lze použít právě třeba na hry, kdy zde to autor používá na FlightSimulator. K tomu si pak pěkně polepit tlačítka konkrétníma akcemi a klávesnice je naprosto dokonalá :).
No, keby si bezal na linuxe a nie na tom posranom biose na videohry, tak by si si 90% tychto oserov usetril. Napad so samostatnou num klavesnicou na makra zvazim, ale som asi lenivy to konfigurovat, uz takto na klavesnici nepouzivam ziadne makro tlacitka.
;-))))). Ten muj bios na videohry uz ma davno integrovany cely tvuj linux ;-).
Takze mam vyhody obojiho. Cisty linux patri na server a do dockeru, ale ne na desktop, je ve vyvoji porad svetelne roky pozadu za ostatnima OS ;-)).
Navic, nemyslim si, ze v Linuxu nastavis sekundarni klavesnici s makrama snaz nez ja v LuaMacros 😉
Fight, fight !!
🙂
S msk jedine osobne a v hospode, takto to stejne nema tu pravou stavu 😉
Používám tuhle klávesnici a bolest zápěstí je pryč https://kinesis-ergo.com/shop/freestyle2-mac/
Na mapování kláves jsem vždycky používal AutoHotKey, po přečtení článku mě napadlo, jestli tam taky není možnost rozlišit více klávesnic.
A kupodivu existuje AutoHotInterception, který přesně tohle řeší. Nemám to vyzkoušené, ale kdyby někdo hledal alternativu k LuaMacros, tak:
https://www.autohotkey.com/ + https://github.com/evilC/AutoHotInterception
diky za info. autohotkey sem znal, ale nenasel sem tenkrat ten plugin na rozliseni klavesnic 😉
Já (za dob hraní IL2 Šturmovika) používal herní klasiku – Nostromo N52 – v defaultu to byla taky “uříznutá” levá část klávesnice, ale cokoliv šlo nahradit nějakým makrem, takže na programování byla taky super.
Jako hlavní klávesnici používám už 20 let (nekecám) Microsoft Natural Keyboard Pro. Mám 2 kusy a opatruju jak oko v hlavě. Nedávno jsem je rozdělal, všechny plasty umyl v myčce, nalepil nové CZ přelepky a vypadá a stále funguje jako nová.
Na nostromo vypada taky dobre, mrknu na to. Ja zatim pouzivam furt tu prvni numeriku (teda kdyz programuju, coz ted posledni cca mesic a pul nedelam vubec 😉 ). Ale jen co se vratim k programovani, zas to resit budu.
Ad ta klavesnice, je to mazec. ja mam tu nasledujici MS Ergo, a taky na ni nedam dopustit. U me uz nektere klavesy uz davno nemaji popisky, ale nastesti to uz nepotrebuju ;-))). Krom sipek jsou pryc uz i asdf a tak 😉
Mmch tu Ergo mám taky na “chalupě” ale už to není ono. Díval jsem se a na ebay v USA či DE se dají ještě ty původní (=moje) koupit, ale nedávno v DE se vydražila za 60€ ?!? V USA je prodával i DELL pod svou značkou, tam jich je poměrně dost, jen to nějak dostat sem. Taky se to mechanicky liší, některé mají velký enter a některé malý, mé dva kusy taky nejsou (z hlediska elektroniky uvnitř) totožné, a to je mám z CZ distribuce obě dvě.
ja si na ni teda nemuzu stezovat, ale nezazil jsem tu starsi. Ale to s tema entrama me stve, ja mam tu s velkym, a ted uz se prodavaji jen s tim malym kripl enterm a lomitkem nad tim 😉