Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: SuperOscar - 23.01.20 - klo:18.21
-
redditissä käydyn keskustelun perusteella onnistuin lopultakin väsäämään varsin 4DOS-maisen komento- ja kansiohistoriavalikon zsh:hon.
Edellytykset: dmenu sekä asetus
setopt auto_pushd
Funktion sisältö on tällainen, tallennetaan vaikka nimelle ”either-history-dmenu” jonnekin $fpathin varrelle:
if [[ $BUFFER == cd\ * ]]; then
LBUFFER+=\~$(dirs | dmenu -i -l 20 | awk '{ print $1 }')
else
LBUFFER=$(fc -lr 1 | dmenu -i -l 20 | sed 's/^ [0-9]\+ \+//')
fi
Sitten kytketään tämä esim. PgUp-näppäimeen:
autoload -U either-history-dmenu
zle -N either-history-dmenu
bindkey "\e[5~" either-history-dmenu
Nyt kun komentorivillä painaa PgUp, selataan kansiohistoriaa, jos komentorivi alkaa ”cd ”, muussa tapauksessa selataan komentohistoriaa. Valikosta tehty valinta lisätään komentoriville odottamaan Enterin painallusta.
-
Jatkokehittelyä: jos on asennettu, rofi tarjoaa dmenua nätimmän valikon, ja kansiohistorian voi halutessaan taikoa esiin myös kirjoittamalla valmiiksi ”~”:
local -a dmenu
if [[ -n $(whence rofi) ]]; then
dmenu=(rofi -dmenu)
elif [[ -n $(whence dmenu) ]]; then
dmenu=(dmenu -i -l 20)
else
return 1
fi
if [[ $BUFFER == cd\ * ]]; then
# ~ pitää lainata tässä tai se lavennetaan komentoriville
LBUFFER+=\~$(dirs | $dmenu | awk '{ print $1 }')
elif [[ $LBUFFER == *\ \~ ]]; then
LBUFFER+=$(dirs | $dmenu | awk '{ print $1 }')
else
LBUFFER=$(fc -lr 1 | $dmenu | sed 's/^ [0-9]\+ \+//')
fi