Skip to content

Commit b69e36e

Browse files
lcpchenx97
authored andcommitted
util/bash-completion: Load scripts on demand
There are two system directories for bash-completion scripts. One is /usr/share/bash-completion/completions/ and the other is /etc/bash_completion.d/. The "etc" scripts are loaded in advance and for backward compatibility while the "usr" scripts are loaded on demand. To load scripts on demand it requires a corresponding script for every command. So, the main bash-completion script is split into several subscripts for different "grub-*" commands. To share the code the real completion functions are still implemented in "grub" and each subscript sources "grub" and invokes the corresponding function. Signed-off-by: Gary Lin <[email protected]> Reviewed-by: Daniel Kiper <[email protected]>
1 parent 0ec6cd5 commit b69e36e

15 files changed

+510
-83
lines changed

util/bash-completion.d/Makefile.am

Lines changed: 109 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,117 @@
1-
21
bash_completion_source = grub-completion.bash.in
32
bash_completion_script = grub
3+
grub_bios_setup_source = grub-bios-setup.bash.in
4+
grub_bios_setup_script = @grub_bios_setup@
5+
grub_editenv_source = grub-editenv.bash.in
6+
grub_editenv_script = @grub_editenv@
7+
grub_install_source = grub-install.bash.in
8+
grub_install_script = @grub_install@
9+
grub_mkconfig_source = grub-mkconfig.bash.in
10+
grub_mkconfig_script = @grub_mkconfig@
11+
grub_mkfont_source = grub-mkfont.bash.in
12+
grub_mkfont_script = @grub_mkfont@
13+
grub_mkimage_source = grub-mkimage.bash.in
14+
grub_mkimage_script = @grub_mkimage@
15+
grub_mkpasswd_pbkdf2_source = grub-mkpasswd-pbkdf2.bash.in
16+
grub_mkpasswd_pbkdf2_script = @grub_mkpasswd_pbkdf2@
17+
grub_mkrescue_source = grub-mkrescue.bash.in
18+
grub_mkrescue_script = @grub_mkrescue@
19+
grub_probe_source = grub-probe.bash.in
20+
grub_probe_script = @grub_probe@
21+
grub_reboot_source = grub-reboot.bash.in
22+
grub_reboot_script = @grub_reboot@
23+
grub_script_check_source = grub-script-check.bash.in
24+
grub_script_check_script = @grub_script_check@
25+
grub_set_default_source = grub-set-default.bash.in
26+
grub_set_default_script = @grub_set_default@
27+
grub_sparc64_setup_source = grub-sparc64-setup.bash.in
28+
grub_sparc64_setup_script = @grub_sparc64_setup@
429

5-
EXTRA_DIST = $(bash_completion_source)
30+
EXTRA_DIST = $(bash_completion_source) \
31+
$(grub_bios_setup_source) \
32+
$(grub_editenv_source) \
33+
$(grub_install_source) \
34+
$(grub_mkconfig_source) \
35+
$(grub_mkfont_source) \
36+
$(grub_mkimage_source) \
37+
$(grub_mkpasswd_pbkdf2_source) \
38+
$(grub_mkrescue_source) \
39+
$(grub_probe_source) \
40+
$(grub_reboot_source) \
41+
$(grub_script_check_source) \
42+
$(grub_set_default_source) \
43+
$(grub_sparc64_setup_source)
644

7-
CLEANFILES = $(bash_completion_script) config.log
45+
CLEANFILES = $(bash_completion_script) \
46+
$(grub_bios_setup_script) \
47+
$(grub_editenv_script) \
48+
$(grub_install_script) \
49+
$(grub_mkconfig_script) \
50+
$(grub_mkfont_script) \
51+
$(grub_mkimage_script) \
52+
$(grub_mkpasswd_pbkdf2_script) \
53+
$(grub_mkrescure_script) \
54+
$(grub_probe_script) \
55+
$(grub_reboot_script) \
56+
$(grub_script_check_script) \
57+
$(grub_set_default_script) \
58+
$(grub_sparc64_setup_script) \
59+
config.log
860

9-
bashcompletiondir = $(sysconfdir)/bash_completion.d
10-
bashcompletion_DATA = $(bash_completion_script)
61+
bashcompletiondir = $(datarootdir)/bash-completion/completions
62+
bashcompletion_DATA = $(bash_completion_script) \
63+
$(grub_bios_setup_script) \
64+
$(grub_editenv_script) \
65+
$(grub_install_script) \
66+
$(grub_mkconfig_script) \
67+
$(grub_mkfont_script) \
68+
$(grub_mkimage_script) \
69+
$(grub_mkpasswd_pbkdf2_script) \
70+
$(grub_mkrescure_script) \
71+
$(grub_probe_script) \
72+
$(grub_reboot_script) \
73+
$(grub_script_check_script) \
74+
$(grub_set_default_script) \
75+
$(grub_sparc64_setup_script)
1176

1277
$(bash_completion_script): $(bash_completion_source) $(top_builddir)/config.status
1378
$(top_builddir)/config.status --file=$@:$<
79+
80+
$(grub_bios_setup_script): $(grub_bios_setup_source) $(top_builddir)/config.status
81+
$(top_builddir)/config.status --file=$@:$<
82+
83+
$(grub_editenv_script): $(grub_editenv_source) $(top_builddir)/config.status
84+
$(top_builddir)/config.status --file=$@:$<
85+
86+
$(grub_install_script): $(grub_install_source) $(top_builddir)/config.status
87+
$(top_builddir)/config.status --file=$@:$<
88+
89+
$(grub_mkconfig_script): $(grub_mkconfig_source) $(top_builddir)/config.status
90+
$(top_builddir)/config.status --file=$@:$<
91+
92+
$(grub_mkfont_script): $(grub_mkfont_source) $(top_builddir)/config.status
93+
$(top_builddir)/config.status --file=$@:$<
94+
95+
$(grub_mkimage_script): $(grub_mkimage_source) $(top_builddir)/config.status
96+
$(top_builddir)/config.status --file=$@:$<
97+
98+
$(grub_mkpasswd_pbkdf2_script): $(grub_mkpasswd_pbkdf2_source) $(top_builddir)/config.status
99+
$(top_builddir)/config.status --file=$@:$<
100+
101+
$(grub_mkrescue_script): $(grub_mkrescue_source) $(top_builddir)/config.status
102+
$(top_builddir)/config.status --file=$@:$<
103+
104+
$(grub_probe_script): $(grub_probe_source) $(top_builddir)/config.status
105+
$(top_builddir)/config.status --file=$@:$<
106+
107+
$(grub_reboot_script): $(grub_reboot_source) $(top_builddir)/config.status
108+
$(top_builddir)/config.status --file=$@:$<
109+
110+
$(grub_script_check_script): $(grub_script_check_source) $(top_builddir)/config.status
111+
$(top_builddir)/config.status --file=$@:$<
112+
113+
$(grub_set_default_script): $(grub_set_default_source) $(top_builddir)/config.status
114+
$(top_builddir)/config.status --file=$@:$<
115+
116+
$(grub_sparc64_setup_script): $(grub_sparc64_setup_source) $(top_builddir)/config.status
117+
$(top_builddir)/config.status --file=$@:$<
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#
2+
# Bash completion for @grub-bios-setup@
3+
#
4+
# Copyright (C) 2024 Free Software Foundation, Inc.
5+
#
6+
# GRUB is free software: you can redistribute it and/or modify
7+
# it under the terms of the GNU General Public License as published by
8+
# the Free Software Foundation, either version 3 of the License, or
9+
# (at your option) any later version.
10+
#
11+
# GRUB is distributed in the hope that it will be useful,
12+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14+
# GNU General Public License for more details.
15+
#
16+
# You should have received a copy of the GNU General Public License
17+
# along with GRUB. If not, see <http://www.gnu.org/licenses/>.
18+
19+
_grub_bios_setup () {
20+
. @datarootdir@/bash-completion/completions/grub && __grub_setup
21+
}
22+
complete -F _grub_bios_setup -o filenames @grub_bios_setup@
23+
24+
# Local variables:
25+
# mode: shell-script
26+
# sh-basic-offset: 4
27+
# sh-indent-comment: t
28+
# indent-tabs-mode: nil
29+
# End:
30+
# ex: ts=4 sw=4 et filetype=sh

util/bash-completion.d/grub-completion.bash.in

Lines changed: 11 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ __grub_list_modules () {
150150
#
151151
# grub-set-default & grub-reboot
152152
#
153-
_grub_set_entry () {
153+
__grub_set_entry () {
154154
local cur prev split=false
155155

156156
COMPREPLY=()
@@ -176,21 +176,10 @@ _grub_set_entry () {
176176
fi
177177
}
178178

179-
__grub_set_default_program="@grub_set_default@"
180-
have ${__grub_set_default_program} && \
181-
complete -F _grub_set_entry -o filenames ${__grub_set_default_program}
182-
unset __grub_set_default_program
183-
184-
__grub_reboot_program="@grub_reboot@"
185-
have ${__grub_reboot_program} && \
186-
complete -F _grub_set_entry -o filenames ${__grub_reboot_program}
187-
unset __grub_reboot_program
188-
189-
190179
#
191180
# grub-editenv
192181
#
193-
_grub_editenv () {
182+
__grub_editenv () {
194183
local cur prev
195184

196185
COMPREPLY=()
@@ -208,16 +197,10 @@ _grub_editenv () {
208197
create list set unset"
209198
}
210199

211-
__grub_editenv_program="@grub_editenv@"
212-
have ${__grub_editenv_program} && \
213-
complete -F _grub_editenv -o filenames ${__grub_editenv_program}
214-
unset __grub_editenv_program
215-
216-
217200
#
218201
# grub-mkconfig
219202
#
220-
_grub_mkconfig () {
203+
__grub_mkconfig () {
221204
local cur prev
222205

223206
COMPREPLY=()
@@ -229,16 +212,11 @@ _grub_mkconfig () {
229212
_filedir
230213
fi
231214
}
232-
__grub_mkconfig_program="@grub_mkconfig@"
233-
have ${__grub_mkconfig_program} && \
234-
complete -F _grub_mkconfig -o filenames ${__grub_mkconfig_program}
235-
unset __grub_mkconfig_program
236-
237215

238216
#
239217
# grub-setup
240218
#
241-
_grub_setup () {
219+
__grub_setup () {
242220
local cur prev split=false
243221

244222
COMPREPLY=()
@@ -264,21 +242,10 @@ _grub_setup () {
264242
fi
265243
}
266244

267-
__grub_bios_setup_program="@grub_bios_setup@"
268-
have ${__grub_bios_setup_program} && \
269-
complete -F _grub_setup -o filenames ${__grub_bios_setup_program}
270-
unset __grub_bios_setup_program
271-
272-
__grub_sparc64_setup_program="@grub_sparc64_setup@"
273-
have ${__grub_sparc64_setup_program} && \
274-
complete -F _grub_setup -o filenames ${__grub_sparc64_setup_program}
275-
unset __grub_sparc64_setup_program
276-
277-
278245
#
279246
# grub-install
280247
#
281-
_grub_install () {
248+
__grub_install () {
282249
local cur prev last split=false
283250

284251
COMPREPLY=()
@@ -315,16 +282,11 @@ _grub_install () {
315282
_filedir
316283
fi
317284
}
318-
__grub_install_program="@grub_install@"
319-
have ${__grub_install_program} && \
320-
complete -F _grub_install -o filenames ${__grub_install_program}
321-
unset __grub_install_program
322-
323285

324286
#
325287
# grub-mkfont
326288
#
327-
_grub_mkfont () {
289+
__grub_mkfont () {
328290
local cur
329291

330292
COMPREPLY=()
@@ -337,16 +299,11 @@ _grub_mkfont () {
337299
_filedir
338300
fi
339301
}
340-
__grub_mkfont_program="@grub_mkfont@"
341-
have ${__grub_mkfont_program} && \
342-
complete -F _grub_mkfont -o filenames ${__grub_mkfont_program}
343-
unset __grub_mkfont_program
344-
345302

346303
#
347304
# grub-mkrescue
348305
#
349-
_grub_mkrescue () {
306+
__grub_mkrescue () {
350307
local cur prev last
351308

352309
COMPREPLY=()
@@ -368,16 +325,11 @@ _grub_mkrescue () {
368325
_filedir
369326
fi
370327
}
371-
__grub_mkrescue_program="@grub_mkrescue@"
372-
have ${__grub_mkrescue_program} && \
373-
complete -F _grub_mkrescue -o filenames ${__grub_mkrescue_program}
374-
unset __grub_mkrescue_program
375-
376328

377329
#
378330
# grub-mkimage
379331
#
380-
_grub_mkimage () {
332+
__grub_mkimage () {
381333
local cur prev split=false
382334

383335
COMPREPLY=()
@@ -410,16 +362,11 @@ _grub_mkimage () {
410362
_filedir
411363
fi
412364
}
413-
__grub_mkimage_program="@grub_mkimage@"
414-
have ${__grub_mkimage_program} && \
415-
complete -F _grub_mkimage -o filenames ${__grub_mkimage_program}
416-
unset __grub_mkimage_program
417-
418365

419366
#
420367
# grub-mkpasswd-pbkdf2
421368
#
422-
_grub_mkpasswd_pbkdf2 () {
369+
__grub_mkpasswd_pbkdf2 () {
423370
local cur
424371

425372
COMPREPLY=()
@@ -432,16 +379,11 @@ _grub_mkpasswd_pbkdf2 () {
432379
_filedir
433380
fi
434381
}
435-
__grub_mkpasswd_pbkdf2_program="@grub_mkpasswd_pbkdf2@"
436-
have ${__grub_mkpasswd_pbkdf2_program} && \
437-
complete -F _grub_mkpasswd_pbkdf2 -o filenames ${__grub_mkpasswd_pbkdf2_program}
438-
unset __grub_mkpasswd_pbkdf2_program
439-
440382

441383
#
442384
# grub-probe
443385
#
444-
_grub_probe () {
386+
__grub_probe () {
445387
local cur prev split=false
446388

447389
COMPREPLY=()
@@ -470,16 +412,11 @@ _grub_probe () {
470412
_filedir
471413
fi
472414
}
473-
__grub_probe_program="@grub_probe@"
474-
have ${__grub_probe_program} && \
475-
complete -F _grub_probe -o filenames ${__grub_probe_program}
476-
unset __grub_probe_program
477-
478415

479416
#
480417
# grub-script-check
481418
#
482-
_grub_script_check () {
419+
__grub_script_check () {
483420
local cur
484421

485422
COMPREPLY=()
@@ -492,10 +429,6 @@ _grub_script_check () {
492429
_filedir
493430
fi
494431
}
495-
__grub_script_check_program="@grub_script_check@"
496-
have ${__grub_script_check_program} && \
497-
complete -F _grub_script_check -o filenames ${__grub_script_check_program}
498-
499432

500433
# Local variables:
501434
# mode: shell-script
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#
2+
# Bash completion for @grub-editenv@
3+
#
4+
# Copyright (C) 2024 Free Software Foundation, Inc.
5+
#
6+
# GRUB is free software: you can redistribute it and/or modify
7+
# it under the terms of the GNU General Public License as published by
8+
# the Free Software Foundation, either version 3 of the License, or
9+
# (at your option) any later version.
10+
#
11+
# GRUB is distributed in the hope that it will be useful,
12+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14+
# GNU General Public License for more details.
15+
#
16+
# You should have received a copy of the GNU General Public License
17+
# along with GRUB. If not, see <http://www.gnu.org/licenses/>.
18+
19+
_grub_editenv () {
20+
. @datarootdir@/bash-completion/completions/grub && __grub_editenv
21+
}
22+
complete -F _grub_editenv -o filenames @grub_editenv@
23+
24+
# Local variables:
25+
# mode: shell-script
26+
# sh-basic-offset: 4
27+
# sh-indent-comment: t
28+
# indent-tabs-mode: nil
29+
# End:
30+
# ex: ts=4 sw=4 et filetype=sh

0 commit comments

Comments
 (0)