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

SuperOscar

  • Käyttäjä
  • Viestejä: 3993
  • Ocatarinetabellatsumtsum!
    • 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.
pöytäkone 1, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; NUC: openSUSE Leap 15.5; RPi 1: FreeBSD 13.2-RELEASE; RPi 2: LibreELEC 11

SuperOscar

  • Käyttäjä
  • Viestejä: 3993
  • Ocatarinetabellatsumtsum!
    • 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
pöytäkone 1, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; NUC: openSUSE Leap 15.5; RPi 1: FreeBSD 13.2-RELEASE; RPi 2: LibreELEC 11