Как переопределить (украсить) встроенную функцию рыбы
Я хотел бы заставить замолчать printf
который находится в строке 9 /usr/share/fish/functions/__fish_move_last.fish
потому что я нахожу это раздражающим.
Как я могу сделать это, не копируя всю функцию?
Если я просто скопировать файл в ~/.config/fish/functions/
и комментарий 9, я могу разбить вещи, когда оригинальная функция будет обновлена в новой версии.
Я бы предпочел замолчать функцию с чем-то вроде этого:
functions -c __fish_move_last __fish_move_last_ORIG
function __fish_move_last
__fish_move_last_ORIG $argv >/dev/null
end
Но если я помещу этот фрагмент в ~/.config/fish/functions/__fish_move_last.fish
Я получаю эту ошибку:
fish: Не удалось автоматически загрузить элемент '__fish_move_last', он уже загружается. Это циклическая зависимость в скриптах автозагрузки, пожалуйста, удалите ее.
Я попытался явно загрузить исходную функцию в начале файла, чтобы избежать автозагрузки, но это не помогло устранить ошибку:
source /usr/share/fish/functions/__fish_move_last.fish
functions -c __fish_move_last __fish_move_last_ORIG
function __fish_move_last
__fish_move_last_ORIG $argv >/dev/null
end
Какой правильный подход здесь?
1 ответ
Как я могу сделать это, не копируя всю функцию?
Вы не
Решение, действительно, состоит в том, чтобы скопировать всю функцию.
Я мог сломать вещи, когда оригинальная функция обновляется в новом выпуске.
Теоретически это возможно. Однако в данном конкретном случае последние изменения были
переформатирование, в ноябре 2016 года
изменение символа "..." на многоточие ("…") в июле 2016 года
удаление пробелов в 2010
Так что я думаю, что вы в безопасности.
Если вы все еще беспокоитесь об этом, вы также можете скопировать эту функцию и все, что от нее зависит (я бы предположил, prevd и nextd).
Или вы могли бы заставить замолчать __fish_move_last
Вывод s в prevd и nextd или молчание тех.
Кажется, что любая форма переопределения произвольных битов функций более подвержена ошибкам, а не меньше.