Kirjoittaja Aihe: zsh: 4DOS-mainen komento- ja kansiohistoriavalikko  (Luettu 823 kertaa)

SuperOscar

  • Käyttäjä
  • Viestejä: 3566
  • Tänään täällä, huomenna poissa
    • Profiili
    • Legisign.org
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.
openSUSE Tumbleweed (pöytäkone 1), openSUSE Leap 15.2 (pöytäkone 2, kannettavat 1, 2 & 3), LibreELEC 8.2.5 (RPi 1), Raspbian GNU/Linux 10 (RPi 2)

SuperOscar

  • Käyttäjä
  • Viestejä: 3566
  • Tänään täällä, huomenna poissa
    • Profiili
    • Legisign.org
Vs: zsh: 4DOS-mainen komento- ja kansiohistoriavalikko
« Vastaus #1 : 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
openSUSE Tumbleweed (pöytäkone 1), openSUSE Leap 15.2 (pöytäkone 2, kannettavat 1, 2 & 3), LibreELEC 8.2.5 (RPi 1), Raspbian GNU/Linux 10 (RPi 2)