Narzędzie uzupełniania poleceń w zsh jest na prawdę potężne. Po zainstalowaniu ZSH w openSUSE 13.1 za pomocą
Domyślna dystrybucja ZSH zawiera sporą ilość rozszerzeń, jednym z nich jest uzupełnianie poleceń zyppera. Jednak zaraz po instalacji ZSH, uzupełnianie są tylko globalne opcje zyppera, bez listy poleceń. Można się spytać po co nam takie uzupełnianie które nie działa? A no po to żeby je naprawić ;-) Najpierw uruchomiłem ZSH z parametrami -xv
, dzięki temu widziałem jaka funkcja i skąd jest uruchamiana. Okazało się, że lista poleceń zyppera była źle filtrowana, i w efekcie wszystkie polecenia były pomijane na liście podpowiedzi. Rozwiązanie okazało się całkiem proste i wygląda dokładnie jak w poniższym kodzie:
From 08c2443e5722b578943d2eccfca708e54dea5d20 Mon Sep 17 00:00:00 2001
From: Mariusz Fik <fisiu@opensuse.org>
Date: Sat, 15 Mar 2014 20:23:51 +0100
Subject: [PATCH] Fix zypper commands completion [zypper <TAB>].
Signed-off-by: Mariusz Fik <fisiu@opensuse.org>
---
Completion/openSUSE/Command/_zypper | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/Completion/openSUSE/Command/_zypper b/Completion/openSUSE/Command/_zypper
index ef8ca20..25a32c3 100644
--- a/Completion/openSUSE/Command/_zypper
+++ b/Completion/openSUSE/Command/_zypper
@@-2,6 +2,7 @@
#
# Copyright (C) 2009 Holger Macht <holger@homac.de>
# Copyright (C) 2014 Thomas Mitterfellner <thomas.mitterfellner@gmail.com>
+# Copyright (C) 2014 Mariusz Fik <fisiu@opensuse.org>
#
# This file is released under the GPLv2.
#
@@-45,8 +46,10 @@ _zypper() {
# start parsing with "Global Options:"
[[ $hline =~ "^Global Options:" ]] && tag=1
[[ $tag = 0 ]] && continue
+ # skip empty lines
+ [[ $hline =~ ^\s*$ ]] && continue
# all commands have to start with lower case letters
- [[ $hline[1] =~ ^[A-Z] ]] && continue
+ [[ $hline == [[:upper:]]* ]] && continue
(( ${#hline} < 2 )) && continue
# cut comma at end of command
--
1.8.4.5
Powyższa łatka została już włączona do rozwojowej wersji ZSH i tym samym będzie dostępna wraz z kolejnym wydaniem (5.0.6) ZSH. Jednak nic nie stoi na przeszkodzie aby samodzielnie poprawić funkcję uzupełniania, wystarczy tylko zmodyfikować plik /usr/share/zsh/functions/Completion/openSUSE/_zypper
.
Od teraz, wpisując w terminalu np.
search -- se Search for packages matching a pattern.
services -- ls List all defined services.
shell -- sh Accept multiple commands at once.
source-download -- Download source rpms for all installed packages to a local directory.
source-install -- si Install source packages and their build dependencies.