From 02f62e5d21e09d4936e18147119b1f0c85b93d79 Mon Sep 17 00:00:00 2001 From: Doron Behar Date: Sun, 31 May 2020 14:51:33 +0300 Subject: gitlab !15: modutils completion: Fix FHS assumption Remove calls to programs from /sbin/ with _call_program and to avoid the system complies to the FHS. Support modules completion for NixOS and Guix which store their kernel modules not at /lib/modules. --- Completion/Linux/Command/_modutils | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) (limited to 'Completion/Linux/Command') diff --git a/Completion/Linux/Command/_modutils b/Completion/Linux/Command/_modutils index cada38a16..c62c6e7b6 100644 --- a/Completion/Linux/Command/_modutils +++ b/Completion/Linux/Command/_modutils @@ -12,7 +12,19 @@ _modules_caching_policy() _modutils() { local curcontext="$curcontext" expl state line modules modaliases ign args ret=1 local -A opt_args - local -r modules_dir=/lib/modules + local -a possible_modules_dirs=( + # Mostly every other distro + /lib/modules + # NixOS & possibly Guix + /run/booted-system/kernel-modules/lib/modules + ) + local modules_dir tested_modules_dir + for tested_modules_dir in "${possible_modules_dirs[@]}"; do + if [[ -d "$tested_modules_dir" ]]; then + modules_dir="$tested_modules_dir" + break + fi + done local update_policy zstyle -s ":completion:*:*:$service:*" cache-policy update_policy @@ -93,8 +105,10 @@ _modutils() { loaded-modules|loadable-modules) if [[ -r /proc/modules ]]; then loaded_modules=(${${(f)"$(/dev/null)"}:#parm:*}##parm:[[:space:]]##} ) + params=( ${${(M)${(f)"$(_call_program module-parameters modinfo "$words[2]" 2>/dev/null)"}:#parm:*}##parm:[[:space:]]##} ) compset -S '=*' if (( $#params )); then _values -S = -w 'module parameter' \ -- cgit 1.4.1