tavis nörttimaailmassa

EksisONE - artikkeleita ja ohjeita nörttimaailmasta

Funktionäppäinten ohjelmointi shelliin

Linuxeissa pystyy käytännössä säätämään, muuttamaan ja uudelleenohjaamaan mitä tahansa. Yksi sellainen on näppäimistö. Funktionäppäimille, eli Fn1-12, voi ohjata toimintoja. Ajatus ei tietenkään ole uusi ja sehän on alkuperäinen funktionäppäinten tarkoitus. Vasta Windows-maailma eräällä tavalla betonoi ajatuksen, että F5 on sama kuin päivitys, tiedostohakemistojen tai verkkosivujen, tai että F1 on helppi.

Bashissa on kohtuullisen helppo muokata funktionäppäinten toimintaa, mutta F1 kannattaa jättää rauhaan, koska ikkunat käyttävät sitä. Toki on mahdollista, että jokin käyttämäsi ohjelma tai toiminto hyödyntää omalla tavallaan funktionäppäimiä, mutta silloin vaan kokeilee, että hajosiko jokin ja jos kyllä, niin poistaa oman koodauksen.

Tämä ohje ei saa suoraan asioita tapahtumaan, vaan tulostaa vain tekstin. Toki teksti voi olla komento, jonka saa sitten ajettua pelkällä enterillä – eli eräällä tavalla kyse on aliaksen muunnoksesta.

Samaa voi käyttää aivan kaikkiin muihinkin näppäimiin ja näppäinyhdistelmiin. Joten aivan samalla tavalla määrittelisit mitä ctrl-alt-U tekisi.

Ensin on selvitettävä minkä koodin näppäin lähettää. Se onnistuu helposti pelkällä cat komennolla ja sitten antaa haluamansa näppäinpainalluksen. Esimerkissä katsoin, mikä on F2 näppäimen koodi:

root@eksis:~# cat
^[[12~

^C
root@eksis:~#
  • ctrl-C keskeyttää ja päästää takaisin komentokehoitteeseen.

Merkkipari ^[ tarkoittaa samaa kuin \e ja tuo muunnos täytyykin tehdä. Perusteiltaan annetaan bind-komento haluttuun näppäimeen ja kerrotaan mikä siihen on kytketty.

Joten jos haluan, että F2 tekisi järjestelmän päivityksen, niin komento olisi:

bind '"\e[12~":"apt update && apt dist-upgrade"'

  • heitto- ja lainausmerkit täytyy olla

Tuo komento ei tallennu mihinkään ja häviää, kun suljet shellin. Joten ne kannattaa lisätä ~/.bashrc tiedostoon. Kun komennat . ~/.bashrc niin muutokset tulevat heti voimaan ilman tarvetta kirjautua sisään ja ulos.