noqqe » blog | sammelsurium | photos | projects | about

sudo via fish-shell

2018-09-29 @ fish, sudo

Neben ctrl+r ist sudo !! eine der Funktionalitäten die ich bei der fish Shell am meisten vermisst hab. Natürlich gehts nicht nur mir so

Aus diesem Thread hab ich dann eine Lösung für mich gefunden.

function bind_bang
  switch (commandline -t)
  case "!"
    commandline -t $history[1]; commandline -f repaint
  case "*"
    commandline -i !
  end
end

Besonders cool an dieser Lösung ist, dass beim eintippen des zweiten ! auch für den User sichtbar der letzte Befehl eingesetzt wird.

Was nicht so schön ist, ist wie das Keybinding. In Fish gibt es eine globale Funktion in der alle Keybindings enthalten muss. Das ist ~/.config/fish/functions/fish_user_key_bindings.fish. Dort muss ich dann folgendes einfügen

### bind_bang ###
bind ! bind_bang
### bind_bang ###

… Ich mag es eigentlich meine functions modular abzulegen Warum man diesen bind nicht einfach an einer beliebigen stelle Aufrufen kann wird aber bestimmt einen triftigen technischen Grund haben.

Außerdem ans Herz legen kann ich noch sudope. Das kleine Plugin mappt ctrl+s (ja etwas Strange für bash Migranten) und prepended jede Commandline mit sudo

Und wie machen Macher von sudope das mit dem fish_user_key_bindings? Richtig! Da wir auch einfach fröhlich am globalen File ~/.config/fish/functions/fish_user_key_bindings.fish herumgepatched.

function fish_user_key_bindings
    ### sudope ###
    set -q sudope_sequence
    or set -l sudope_sequence \cs
    if not bind | string match -rq '[[:space:]]sudope$'
        if bind $sudope_sequence >/dev/null 2>/dev/null
            echo "sudope: The requested sequence is already in use:" (bind $sudope_sequence | cut -d' ' -f2-)
        else
            bind $sudope_sequence sudope
        end
    end
    ### sudope ###
end