Ubuntu Suomen keskustelualueet

Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: SuperOscar - 23.01.20 - klo:18.21

Otsikko: zsh: 4DOS-mainen komento- ja kansiohistoriavalikko
Kirjoitti: 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

Koodia: [Valitse]
setopt auto_pushd
Funktion sisältö on tällainen, tallennetaan vaikka nimelle ”either-history-dmenu” jonnekin $fpathin varrelle:

Koodia: [Valitse]
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:

Koodia: [Valitse]
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.
Otsikko: Vs: zsh: 4DOS-mainen komento- ja kansiohistoriavalikko
Kirjoitti: SuperOscar - 27.01.20 - klo:15.12
Jatkokehittelyä: jos on asennettu, rofi tarjoaa dmenua nätimmän valikon, ja kansiohistorian voi halutessaan taikoa esiin myös kirjoittamalla valmiiksi ”~”:

Koodia: [Valitse]
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