summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--.github/release-please-manifest.json2
-rw-r--r--.github/workflows/ci.yaml2
-rw-r--r--.github/workflows/update-docker-images.yml2
-rw-r--r--.pre-commit-config.yaml8
-rw-r--r--.shellcheckrc2
-rw-r--r--CHANGELOG.md560
-rw-r--r--bash_completion30
-rw-r--r--completions/.gitignore6
-rw-r--r--completions/Makefile.am13
-rw-r--r--completions/_nox4
-rw-r--r--completions/add_members2
-rw-r--r--completions/apt-get4
-rw-r--r--completions/arch2
-rw-r--r--completions/change_pw2
-rw-r--r--completions/check_db2
-rw-r--r--completions/clone_member2
-rw-r--r--completions/config_list2
-rw-r--r--completions/cryptsetup2
-rw-r--r--completions/env56
-rw-r--r--completions/find_member2
-rw-r--r--completions/fio2
-rw-r--r--completions/inject2
-rw-r--r--completions/ip105
-rw-r--r--completions/iperf10
-rw-r--r--completions/list_admins2
-rw-r--r--completions/list_members2
-rw-r--r--completions/list_owners2
-rw-r--r--completions/mysql2
-rw-r--r--completions/newlist2
-rw-r--r--completions/perl2
-rw-r--r--completions/pkgutil3
-rw-r--r--completions/pydoc2
-rw-r--r--completions/remove_members2
-rw-r--r--completions/rmlist2
-rw-r--r--completions/rpm2
-rw-r--r--completions/ssh8
-rw-r--r--completions/ssh-add17
-rw-r--r--completions/ssh-copy-id8
-rw-r--r--completions/ssh-keygen90
-rw-r--r--completions/ssh-keyscan16
-rw-r--r--completions/sync_members2
-rw-r--r--completions/withlist2
-rw-r--r--configure.ac2
-rw-r--r--test/requirements-dev.txt2
-rw-r--r--test/t/conftest.py4
-rw-r--r--test/t/test_env.py37
-rw-r--r--test/t/test_fio.py2
-rw-r--r--test/t/test_ssh_keygen.py26
-rw-r--r--test/t/unit/test_unit_compgen_available_interfaces.py2
-rw-r--r--test/t/unit/test_unit_load.py3
-rw-r--r--test/t/unit/test_unit_realcommand.py8
-rw-r--r--version.txt2
52 files changed, 700 insertions, 378 deletions
diff --git a/.github/release-please-manifest.json b/.github/release-please-manifest.json
index 6f6cd64..a3b85fa 100644
--- a/.github/release-please-manifest.json
+++ b/.github/release-please-manifest.json
@@ -1 +1 @@
-{".":"2.13.0"}
+{".":"2.14.0"}
diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index 60f9adb..6a8edbd 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -4,7 +4,7 @@ on:
pull_request:
push:
branches:
- - master
+ - main
jobs:
pre-commit:
diff --git a/.github/workflows/update-docker-images.yml b/.github/workflows/update-docker-images.yml
index 5f6e269..0d0df35 100644
--- a/.github/workflows/update-docker-images.yml
+++ b/.github/workflows/update-docker-images.yml
@@ -18,7 +18,7 @@ on:
jobs:
update-test-image:
runs-on: ubuntu-latest
- if: github.repository_owner == 'scop' && github.ref == 'refs/heads/master'
+ if: github.repository_owner == 'scop' && github.ref == 'refs/heads/main'
strategy:
matrix:
include:
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 52eea9b..7529e72 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -43,7 +43,7 @@ repos:
pass_filenames: false
- repo: https://github.com/astral-sh/ruff-pre-commit
- rev: v0.3.5
+ rev: v0.4.3
hooks:
- id: ruff
types: [text]
@@ -83,7 +83,7 @@ repos:
files: ^(helpers/perl|.+\.p[ml])$
- repo: https://github.com/jackdewinter/pymarkdown
- rev: v0.9.18
+ rev: v0.9.19
hooks:
- id: pymarkdown
entry: pymarkdown
@@ -93,12 +93,12 @@ repos:
exclude: ^CHANGELOG\.md$
- repo: https://github.com/pre-commit/pre-commit-hooks
- rev: v4.5.0
+ rev: v4.6.0
hooks:
- id: check-case-conflict
- repo: https://github.com/crate-ci/typos
- rev: v1.20.3
+ rev: v1.21.0
hooks:
- id: typos
exclude: ^(CHANGELOG\.md|test/(test-cmd-list\.txt|fixtures/.+))$
diff --git a/.shellcheckrc b/.shellcheckrc
index 3a3d939..a638d96 100644
--- a/.shellcheckrc
+++ b/.shellcheckrc
@@ -4,9 +4,7 @@ enable=require-double-brackets
disable=SC1090 # not really fixable usually (ever?)
disable=SC2034 # for localizing variables set in called functions
disable=SC2128 # intentional style choice
-disable=SC2206 # suggested alternatives fail in posix mode or use temp files
disable=SC2209 # interferes with our `set` (literal) vs empty booleans
-disable=SC2207 # suggested alternatives fail in posix mode or use temp files
# These disables are to be investigated and decided
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 711ab85..cc905d4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,305 @@
+## [2.14.0](https://github.com/scop/bash-completion/compare/2.13.0...2.14.0) (2024-05-09)
+
+
+### Features
+
+* **bao:** add 3rd party fallback completion loader ([af7fbb9](https://github.com/scop/bash-completion/commit/af7fbb97b470abce4025144fe4676c38cf4514d4))
+* **cryptsetup:** complete --header with filenames ([4c9fc87](https://github.com/scop/bash-completion/commit/4c9fc87975bd2dc04a6851017d9a71116ec1e44f))
+* **dlv:** add 3rd party fallback completion loader ([eefe71d](https://github.com/scop/bash-completion/commit/eefe71d8681d0735abc541cd0b7d2c7f9c535212))
+* **env:** complete commands and variable assignments ([5c75fa3](https://github.com/scop/bash-completion/commit/5c75fa332b5f86863f14c2ef45cdc8732c9a2c35))
+* **env:** treat `-*` as the command name after `-` and `--` ([0cd2883](https://github.com/scop/bash-completion/commit/0cd2883ca17e65a86fe81c650cea869f9fc70839))
+* **env:** treat `-*` as the command name after assignments ([71b7fb2](https://github.com/scop/bash-completion/commit/71b7fb2bc6fd9eef901e959aaf089419cc6f74a4))
+* **gup:** add 3rd party fallback completion loader (>= 0.25.0) ([1641f1a](https://github.com/scop/bash-completion/commit/1641f1a3043e3a378b4dd08a0f07240dd1d56548))
+* **incus:** add 3rd party fallback completion loader ([7108d9c](https://github.com/scop/bash-completion/commit/7108d9ca84a2617ae36e88181d39aeeabe3225dd))
+* **ip:** Complete 'route get' options ([12fbdb1](https://github.com/scop/bash-completion/commit/12fbdb163b9ffabb5f673c910a98edc8eaa6ac65))
+* **ip:** Complete addr add/change/replace options ([8262664](https://github.com/scop/bash-completion/commit/82626648c75406509187d3775b25430da6347fea))
+* **ip:** Complete ip route list options ([43beafc](https://github.com/scop/bash-completion/commit/43beafcfde8f6c8630ad9197ffbae76bfae010a5))
+* **ip:** Complete link afstats command ([6721346](https://github.com/scop/bash-completion/commit/672134688efceb71dc58c1c00463f8c38a4b0477))
+* **ip:** Complete neigh add, del, change, replace ([ba80203](https://github.com/scop/bash-completion/commit/ba8020349c965e92e25ae66fc1f8eceda50bc450))
+* **ip:** Complete route save/showdump ([606f650](https://github.com/scop/bash-completion/commit/606f6509ddff9c30bb8b4971fb16a90fa39e4dfe))
+* **iperf:** --tos/-S argument completion ([d2f59bb](https://github.com/scop/bash-completion/commit/d2f59bb6fa55e2f4becd21bdd21ff75fe627ad38))
+* **ssh-copy-id:** (non-)complete args to `-t` and `-F` ([53fdce4](https://github.com/scop/bash-completion/commit/53fdce4bd972a71dba3e8e5be05eadb443ec93f3))
+* **ssh-keygen:** complete -r/-Y specific -O args ([d6977fc](https://github.com/scop/bash-completion/commit/d6977fcd43302c8b3820fe5f90ce56c31db6e5ad))
+* **ssh-keyscan:** complete -O argument ([39ea543](https://github.com/scop/bash-completion/commit/39ea5435abfc4b13445bb0eec086e246e3cadb38))
+* **tofu:** add 3rd party fallback completion loader ([4edd9a2](https://github.com/scop/bash-completion/commit/4edd9a2bde503d3897eb1906275d6509a3fafc97))
+* **zarf:** add 3rd party fallback completion loader ([032f0f0](https://github.com/scop/bash-completion/commit/032f0f0f35b53856c3be642bb3101a4d01c81aee))
+
+
+### Bug Fixes
+
+* **_comp_{compgen,xfunc}:** use `declare -F --` for arbitrary funcs ([8998491](https://github.com/scop/bash-completion/commit/899849127707f6d616d5312c0efab0092b8caea8))
+* **_comp_{load,realcommand}:** handle option-like command name ([883946d](https://github.com/scop/bash-completion/commit/883946d84d13d7947eb0c21a536bd947b3dbc31a))
+* **available_interfaces:** strip only trailing colon from entries ([a452aee](https://github.com/scop/bash-completion/commit/a452aee8fb58720ecfadbdaad95277ac9d9072ac))
+* **bash_completion,conftest:** use `complete -p --` for arbitrary cmds ([dafd338](https://github.com/scop/bash-completion/commit/dafd3382e019cf90156cc6abc4266a82ab4ebe5f))
+* **fio:** engines completion ([27a0ef8](https://github.com/scop/bash-completion/commit/27a0ef80a2dbd84d8a0d2f90945cc66577149726))
+* **ip:** Complete link change as well as set ([956bd5d](https://github.com/scop/bash-completion/commit/956bd5dfd26f40ba23d1708bb15174d18b142087))
+* **ip:** Don't stop at proxy and nomaster in neigh ([d58ea76](https://github.com/scop/bash-completion/commit/d58ea763364f234ed90e8152f36b99f02e82ec84))
+* **scp remote_files:** do not filter generated paths with "$cur" ([bc812df](https://github.com/scop/bash-completion/commit/bc812dff7246e5186c7ae752081605787942f8f9))
+* **scp remote_files:** localize variable `cur` ([34f7d0c](https://github.com/scop/bash-completion/commit/34f7d0c321977016e3191cb7e9ab7ebd1a4083a0))
+* **ssh-keygen:** handling of bundled short options ([18e436d](https://github.com/scop/bash-completion/commit/18e436d0a0a25809bc1c8e6457aaa78a1667fa51))
+* **ssh-keygen:** make work with custom IFS ([b71340b](https://github.com/scop/bash-completion/commit/b71340bb411fb5d8ddb0c96836e484ace7eeb8f3))
+* **ssh-keygen:** suggest -O arg completions depending on mode ([b49ab1d](https://github.com/scop/bash-completion/commit/b49ab1d9f5515d12920ddb1548790fa0bf78d0b1))
+* use -- to pass arbitrary cmdnames to `_comp_load` ([3c1d9bc](https://github.com/scop/bash-completion/commit/3c1d9bc3f5432dee7de0935e8a4b6bf66c2fad77))
+* use `pathcmd=$(type -P -- "$1")` for arbitrary cmds ([8795ca9](https://github.com/scop/bash-completion/commit/8795ca99f3eb147e26d49f06e535f0ce64b4d162))
+
+## [2.13.0](https://github.com/scop/bash-completion/compare/2.12.0...2.13.0) (2024-04-03)
+
+
+### Features
+
+* **curl:** Complete protocols for --proto-default ([7051379](https://github.com/scop/bash-completion/commit/7051379e448147407c3fe43c89872dafb76ebb27))
+* **ip:** Add completion for netconf subcommand ([03a10ff](https://github.com/scop/bash-completion/commit/03a10ff63226782e61dae4407138c3240ff0c7c2))
+* **ip:** Complete commands for netns exec ([1f03796](https://github.com/scop/bash-completion/commit/1f03796cd930ddad6207d46814da820674f16edc))
+* **ip:** Complete help for unknown subcommands ([21f7e32](https://github.com/scop/bash-completion/commit/21f7e32f9009c2064d1659668425b6b6ccb537bd))
+* **ip:** Complete ip link property ([efa663c](https://github.com/scop/bash-completion/commit/efa663cd0dd63d54fd2d2987ee66fb954ccf4a86))
+* **ip:** Complete link types for address show ([ca5ea03](https://github.com/scop/bash-completion/commit/ca5ea037e2ec1b0b5ec4d31295df88125d51b43e))
+* **ip:** Complete neigh show and flush ([c7c3c03](https://github.com/scop/bash-completion/commit/c7c3c039bf5a462ea577e8fcc92ebd94d6afad49))
+* **ip:** Complete stats subcommand ([cd73e8c](https://github.com/scop/bash-completion/commit/cd73e8c1689e3e014c4a75d5101ee3d932013120))
+* **ip:** Create function to get link types ([8e60245](https://github.com/scop/bash-completion/commit/8e60245c7531e1615dc96b032035bb4f59972f4a))
+* **rg:** add fallback 3rd party completion loader ([7e4cc2f](https://github.com/scop/bash-completion/commit/7e4cc2fb199f1c88bd9a358a157fe06327fc2b28))
+* **xmllint,xmlwf:** also suggest *.rss files ([a89cde2](https://github.com/scop/bash-completion/commit/a89cde2216b1634521b4a264b2dbc5cda7522061))
+
+
+### Bug Fixes
+
+* **available_interfaces:** fix regression of unwanted trailing colons ([c2f83e0](https://github.com/scop/bash-completion/commit/c2f83e0436208ef2bfa9c762bc28ff6374ba0c73))
+* **ip:** Complete addrlabel add/del properties ([ea07616](https://github.com/scop/bash-completion/commit/ea076166e9a5cce9d22a27e63f95bbf00be9b894))
+* **ip:** Complete ip delete with type correctly ([f3a9be3](https://github.com/scop/bash-completion/commit/f3a9be3e2f6eaf0d94bb66220fd02cf0e3c76481))
+* **ip:** Complete more variations of subcommands ([c8920c5](https://github.com/scop/bash-completion/commit/c8920c57f83199a14230485cc44b426f028acafb))
+* **ip:** Complete netns attach subcommand ([bfb1de6](https://github.com/scop/bash-completion/commit/bfb1de64a53d1eba749c9921cea3809460cd2319))
+* **ip:** Complete only relevant addrlabel subcmds ([05147f1](https://github.com/scop/bash-completion/commit/05147f19d3d04040fa8dacbd9e1705bfc1432073))
+* **ip:** Keep completing after -netns name ([1a5df4f](https://github.com/scop/bash-completion/commit/1a5df4fe22eb374424b18e7db27b8446e919f4b2))
+* **ip:** Quote all instantiation of ip as "$1" ([ef25163](https://github.com/scop/bash-completion/commit/ef25163e6bd9095e528b57d44cb31d32f0321bb9))
+* **ip:** Quote network namespace names ([216734b](https://github.com/scop/bash-completion/commit/216734bed7ba02655128bf1dbc2f184420ad69ef))
+* **Makefile:** include api-and-naming.md in dist ([fdd8048](https://github.com/scop/bash-completion/commit/fdd80487ba6944e639baf32ba991f8665840728d))
+
+## [2.12.0](https://github.com/scop/bash-completion/compare/v2.11.0...2.12.0) (2024-02-21)
+
+
+### Features
+
+* **_comp_backup_glob:** add `ucf` generated backup files ([351be1c](https://github.com/scop/bash-completion/commit/351be1c81ecd97135d3df64475a93d57526d5630))
+* **_comp_backup_glob:** require dash in dpkg backup files ([59a57f9](https://github.com/scop/bash-completion/commit/59a57f9f8c6a47dc9d21c61d13ffb90a5f3b82f0))
+* **_comp_compgen_{filedir,set}:** define exit status ([7920c9d](https://github.com/scop/bash-completion/commit/7920c9dbe46bd5ad0a92e78b744f00ffe8b14e76))
+* **_comp_compgen_commands:** align return value with other compgens ([9d3362e](https://github.com/scop/bash-completion/commit/9d3362e4a092efaecda2fa2a5f01feca75e7b24e))
+* **_comp_compgen_commands:** auto set `-o filenames` when appropriate ([4d4839e](https://github.com/scop/bash-completion/commit/4d4839e50210de4d3a8780caa4b9d8ab44b8f86d))
+* **_comp_compgen_commands:** include dirs ([b9c7b5d](https://github.com/scop/bash-completion/commit/b9c7b5dc414c09d27a6b157d37bede70e662b91c))
+* **_comp_compgen_known_hosts:** return 2 on usage error ([43bb8f0](https://github.com/scop/bash-completion/commit/43bb8f03798811d95a3068a8a53d2eac9ad877b5))
+* **_comp_compgen:** support `-i cmd` and `-x cmd` ([39cc200](https://github.com/scop/bash-completion/commit/39cc200f9e6d9b03d1e76a924371f85304e786d5))
+* **_comp_compgen:** support `-U var` to unlocal var ([b603535](https://github.com/scop/bash-completion/commit/b60353508eb470515f1063a1e1a75bdf1fda730f))
+* **_comp_compgen:** support option -C ([6b3dfa5](https://github.com/scop/bash-completion/commit/6b3dfa529950f3bc51b8ead9323a82f65c5cfeb9))
+* **_comp_expand_glob:** fail when no paths are generated ([6b0a466](https://github.com/scop/bash-completion/commit/6b0a46644d587182c20f880755a821a7680753fe))
+* **_comp_get_fist_arg:** support "-o GLOB" to skip optargs ([0f14cc0](https://github.com/scop/bash-completion/commit/0f14cc030ebdb54f3d120d8cadc08651dad00624))
+* **_ip_addresses:** auto ltrim colon completions when appropriate ([ccdf953](https://github.com/scop/bash-completion/commit/ccdf953b7956d6fc65334e9049e157a3480a5cfa))
+* add _comp_compgen_split ([542bf73](https://github.com/scop/bash-completion/commit/542bf73f571312659293dac664bf257ef66fbfef))
+* add `_comp_locate_first_arg` ([0384bd5](https://github.com/scop/bash-completion/commit/0384bd51df3f68a3e065aeead4e921462fff6655))
+* **airflow:** add fallback 3rd party completion loader ([bf5550b](https://github.com/scop/bash-completion/commit/bf5550b5fc304ed956b6061221f173516408d82d))
+* **ansible*:** add fallback 3rd party completion loader ([5f8384e](https://github.com/scop/bash-completion/commit/5f8384ef71acd1dc6e214177e5bbe3b0b83ee976))
+* **apt-get:** prefer `apt-cache` in same dir as command ([a731bfd](https://github.com/scop/bash-completion/commit/a731bfd0acf77c7e5ec52315e3b470cffa177b4a))
+* **b2sum:** new completion ([cd985df](https://github.com/scop/bash-completion/commit/cd985df6d8e613fd5421066248db1c50dc1686bd))
+* **bash_completion:** add function _comp_compgen_ltrim_colon ([ce5889b](https://github.com/scop/bash-completion/commit/ce5889ba3b1364d9afe7096c6fa14d7c65d08cc6))
+* **black,blackd:** add fallback 3rd party completion loader ([47a1f05](https://github.com/scop/bash-completion/commit/47a1f05e75399d25dcf0281ae6f8ba363a82e6bc))
+* **carton:** support exec command completions ([0eb3a21](https://github.com/scop/bash-completion/commit/0eb3a21afdcd4c52966e0894f43f501dc3b727e3))
+* **chezmoi:** add 3rd-party completion loader (cobra) ([31baa69](https://github.com/scop/bash-completion/commit/31baa69954351a2d30047f707692d361646aea53))
+* **conda:** add 3rd-party completion loader (argcomplete) ([c0f5ba2](https://github.com/scop/bash-completion/commit/c0f5ba2e19abea70dcde4bf0aafe36de801b28c0))
+* **crc:** add 3rd-party completion loader (cobra) ([f10866e](https://github.com/scop/bash-completion/commit/f10866e1aaf810ae5cb29ccd5c1e8ac722d0f2ae))
+* **cz:** add fallback 3rd party completion loader ([b7ba70e](https://github.com/scop/bash-completion/commit/b7ba70e52e1e0f287c29b5d7362439dccd132e8b))
+* **dot:** support filename extension .gv ([be0010e](https://github.com/scop/bash-completion/commit/be0010e8517de89bf06bda02bdccacc51968136e))
+* **dprint:** add fallback 3rd party completion loader ([e201e0e](https://github.com/scop/bash-completion/commit/e201e0ee336e79c26bce2afc3f2b4f98d4fea12d))
+* **eog:** add missing extension .heif ([9e4a48f](https://github.com/scop/bash-completion/commit/9e4a48fdaa372a41e6ad5c7d021164394054aa97))
+* **eog:** associate with `*.avif` and `*.webp` ([#1005](https://github.com/scop/bash-completion/issues/1005)) ([f1c04b8](https://github.com/scop/bash-completion/commit/f1c04b816e1612acdac62605528d32b5d896916f))
+* **eog:** associate with `*.heic` and `*.jxl` ([20c9cea](https://github.com/scop/bash-completion/commit/20c9cea129e1f1e92045098ce7555a3f2add30e8))
+* **eog:** associate with `*.pbm` ([#1006](https://github.com/scop/bash-completion/issues/1006)) ([5472cc1](https://github.com/scop/bash-completion/commit/5472cc1fef9c60abf240bd8f4acf38dbdaabf1a1))
+* **feh:** associate with y4m and heic/heif/avif ([e252c73](https://github.com/scop/bash-completion/commit/e252c73ff2b92320dfabc9daf0d3f4ac15171e96))
+* **feh:** deassociate with avci/avcs ([af46f34](https://github.com/scop/bash-completion/commit/af46f3411acfbd28624f57ff6a7511148d1857f9))
+* **flask:** add fallback 3rd party completion loader ([3e0d00d](https://github.com/scop/bash-completion/commit/3e0d00d4ea55a200ea67196a6de841e8633fcad3))
+* **hash:** new completion ([#1013](https://github.com/scop/bash-completion/issues/1013)) ([4d0bffb](https://github.com/scop/bash-completion/commit/4d0bffb791c34c96114aeb2e4f6726b80aa8698e))
+* **httpx:** add fallback 3rd party completion loader ([3f4861c](https://github.com/scop/bash-completion/commit/3f4861cc41ea05982b2c4a98cc1f56f21895419b))
+* **ip:** Add completion for monitor subcommand ([fa696e6](https://github.com/scop/bash-completion/commit/fa696e60f3fe525a14bfbb409effb4e51b2e4450))
+* **jungle:** add fallback 3rd-party completion loader ([c69845a](https://github.com/scop/bash-completion/commit/c69845abf7efe9c226cef46ebf8b9129058db43d))
+* **keyring:** add fallback 3rd party completion loader ([8082602](https://github.com/scop/bash-completion/commit/80826028b7760409f20624a6fb4f4c5a4eaec8e3))
+* **kontena:** add fallback 3rd-party completion loader ([5eef0ce](https://github.com/scop/bash-completion/commit/5eef0ce3e5bd29f32d5830abfaf60da1295c4562))
+* **lefthook:** add fallback 3rd party completion loader ([dc9650e](https://github.com/scop/bash-completion/commit/dc9650e917d2018fa9eeb251e2c3db2b0f9d230a))
+* **mailman:** prefer `list_lists` in same dir as command ([a46ccf1](https://github.com/scop/bash-completion/commit/a46ccf132d53f4f5adf5ad3b0e51ec1dde931298))
+* **mysql:** prefer `mysqlshow` from same dir ([643886c](https://github.com/scop/bash-completion/commit/643886cf3c34eef47a86fbc6c2a64712c455dad3))
+* no empty command completion if `no_empty_cmd_completion` is on ([faab292](https://github.com/scop/bash-completion/commit/faab29286074ec3c952dfe50f0cb22af65dadbeb))
+* **npm:** add fallback 3rd-party completion loader ([f1c085c](https://github.com/scop/bash-completion/commit/f1c085cc56cf15d2bd0c97148535e36e81dfc5d4))
+* **nvm:** add fallback 3rd-party completion loader ([dea7e1d](https://github.com/scop/bash-completion/commit/dea7e1d431f1700c2515ece47b07ba472e1f999c))
+* **oc:** add 3rd-party completion loader (cobra) ([26b5f09](https://github.com/scop/bash-completion/commit/26b5f09490159fd8fc6b7c592cb70c40e8b214dc))
+* **pip{,3}:** add fallback 3rd-party completion loader ([e3cbfba](https://github.com/scop/bash-completion/commit/e3cbfba64e6f52ee49c59052ef40eb4a11a48849))
+* **pipenv:** add fallback 3rd party completion loader ([#1020](https://github.com/scop/bash-completion/issues/1020)) ([6ecf5bd](https://github.com/scop/bash-completion/commit/6ecf5bdb3c534db894da60e336f58235547de80d))
+* **pytest:** complete new --import-mode value ([#1021](https://github.com/scop/bash-completion/issues/1021)) ([2d636a3](https://github.com/scop/bash-completion/commit/2d636a3cb4ee66b4bc3355fadff1a1e4246199d4))
+* **rtx:** add fallback 3rd party completion loader ([0628e22](https://github.com/scop/bash-completion/commit/0628e223689b7bad0b9dc43e56d935a66b73b8a2))
+* **scp,sftp:** prefer `ssh` from same dir to resolve options etc ([d55f5e6](https://github.com/scop/bash-completion/commit/d55f5e6a9e9fb53b02bb86a8fc6278e671099bb0))
+* **ssh-copy-id,ssh-keygen:** prefer `ssh` from same dir ([5c1d270](https://github.com/scop/bash-completion/commit/5c1d2701456e14fbe946ef7ccfecc7e10829b806))
+* **ssh-inscribe:** add fallback 3rd party completion loader ([7f2c197](https://github.com/scop/bash-completion/commit/7f2c197e4e59b313d0f47cde902f57145106660e))
+* **ssh:** complete RequiredRSASize ([#1064](https://github.com/scop/bash-completion/issues/1064)) ([de15205](https://github.com/scop/bash-completion/commit/de15205d6c7997e8596dce4f9d2a2bfc476be716))
+* **tkn-pac:** add 3rd-party completion loader (cobra) ([d0f2604](https://github.com/scop/bash-completion/commit/d0f26045937276427ebb9844e84f40cff1b928f4))
+* **tkn:** add 3rd-party completion loader (cobra) ([161fc5d](https://github.com/scop/bash-completion/commit/161fc5d42cd7dd814a9197f788045ca052062c22))
+* **xrandr:** comma separated `--setmonitor` third argument ([8a76f3d](https://github.com/scop/bash-completion/commit/8a76f3d75db290302f94ea732e01a9afd25c2c24))
+
+
+### Bug Fixes
+
+* **__load_completion:** quoted compspec for variants ([#1008](https://github.com/scop/bash-completion/issues/1008)) ([0a2443e](https://github.com/scop/bash-completion/commit/0a2443e3eec8557273dd905df9a28dc177861023))
+* **_cd_devices:** `/dev/cdc-*` CDC device false positives ([5250728](https://github.com/scop/bash-completion/commit/52507286a6ea8c576414d7cca0f6a2d30dd78c84))
+* **_comp__init_set_up_service_completions:** work around failglob ([2529d40](https://github.com/scop/bash-completion/commit/2529d40f22039b344fd0bb5280a8469b8783f2a9))
+* **_comp_{first_arg,count_args}:** count - as argument ([e23a79e](https://github.com/scop/bash-completion/commit/e23a79e0fd715b0ae564082d9f1e4e7a907a195d))
+* **_comp_{first_arg,count_args}:** count any arguments after -- ([9bfd760](https://github.com/scop/bash-completion/commit/9bfd760c1192da7b3d0d8f0f9c8bea8ed16f4e47))
+* **_comp_command_offset:** Support complete -C ([80450ca](https://github.com/scop/bash-completion/commit/80450ca06973535671dc76ffe5abd6e377418f76))
+* **_comp_compgen_fstypes:** avoid unexpected expansions ([a856d81](https://github.com/scop/bash-completion/commit/a856d811b73500550d317eff5fec487e41581add))
+* **_comp_compgen_help:** allow dots to connect names in longopt ([79dadfc](https://github.com/scop/bash-completion/commit/79dadfc7fa37be26c7b263b809687db0907ae71f))
+* **_comp_compgen_known_hosts:** work around bash-4.2 nounset ([d2860cb](https://github.com/scop/bash-completion/commit/d2860cb481be8f3cf97172cb1bf063da8f238e53))
+* **_comp_compgen_split:** work around nounset ([f488f96](https://github.com/scop/bash-completion/commit/f488f9615a58140dc610bf2d406f3fcf6b8d82da))
+* **_comp_compgen_term:** replace completions by default ([d3696a3](https://github.com/scop/bash-completion/commit/d3696a3f793b2e0b9a0940287b3ab3dd23ef247d))
+* **_comp_compgen_usergroup:** avoid directly overwriting COMPREPLY ([d380498](https://github.com/scop/bash-completion/commit/d3804982650ec4fc7fbb7f7cab5522709b43f52d))
+* **_comp_compgen:** do not inherit -a for explicitly specified var ([3c20766](https://github.com/scop/bash-completion/commit/3c20766a6248aec000eb55731dd6b159ecf45dc2))
+* **_comp_compgen:** explicitly exclude `cur` from the target variable ([5fe98f3](https://github.com/scop/bash-completion/commit/5fe98f3c30fa69d0921703c7c90522a28bb00737))
+* **_comp_count_args:** check optarg correctly ([874c503](https://github.com/scop/bash-completion/commit/874c5031986e23a3ca7843d216d7dde94b0f1d4b))
+* **_comp_count_args:** exclude <>& from wordbreaks as _comp_initialize ([521d2bb](https://github.com/scop/bash-completion/commit/521d2bb5330de4a721ae20d37d330190aa4beef0))
+* **_comp_count_args:** ignore empty $3 ([76eea74](https://github.com/scop/bash-completion/commit/76eea74581d4f404e817f686ea86236c8c75a9fc))
+* **_comp_count_args:** perform optarg check also on $3 ([21d3122](https://github.com/scop/bash-completion/commit/21d3122fa933169849e9743212248c80b7843abb))
+* **_comp_count_args:** skip reassembling cword and words ([3127703](https://github.com/scop/bash-completion/commit/3127703f12f3e82ddf3f950a801ab430024aca22))
+* **_comp_delimited:** treat delimiter as a fixed string ([571a0f7](https://github.com/scop/bash-completion/commit/571a0f70f39fed70b2db51e1624b2a0ee29f00c4))
+* **_comp_deprecate_func:** argument order in usage error message ([597f62f](https://github.com/scop/bash-completion/commit/597f62fe38627452f5330d40bc9004f2b3d4dda5))
+* **_comp_get_words:** empty prev if unavailable (localvar_inherit) ([d8b8eef](https://github.com/scop/bash-completion/commit/d8b8eef63602cb0e34837320938b0819363d7d87))
+* **_comp_initialize:** fix completions of redirections without space ([da16bf6](https://github.com/scop/bash-completion/commit/da16bf61c2604ea4efa9b2d125aedd2dd4acd4e5))
+* **_comp_initialize:** protect against "localvar_inherit" ([0cc8d83](https://github.com/scop/bash-completion/commit/0cc8d833011c0763eb00939ad9a94d525d87bcea))
+* **_comp_split,_comp_compgen:** strip periods from error message ([b3b6a7c](https://github.com/scop/bash-completion/commit/b3b6a7cf2865b3591ab571dc2563d1980a822ac5))
+* **_comp_split:** update error message for the correct options ([3c4a89c](https://github.com/scop/bash-completion/commit/3c4a89ce48ca29c0c6461d12519bbf78bcc1ca02))
+* **_comp_sysvdirs:** work around nounset ([da26178](https://github.com/scop/bash-completion/commit/da26178b9c7eaf11711b451ae292a01bd423a80c))
+* **_filedir_xspec:** clean up unused variable `tmp` ([67f1189](https://github.com/scop/bash-completion/commit/67f11892351b710b9b3609e138a0a2c9248c4422))
+* **_get_cword_at_cursor,cvs:** quote array length ([201239c](https://github.com/scop/bash-completion/commit/201239cb597a3d7d0165a5e37a093f063fe700d1))
+* **_get_first_arg:** remove invalid doccomment ([eb40f56](https://github.com/scop/bash-completion/commit/eb40f566cc9e3c5a845a12caf0f4344dab2a0b2c))
+* **_known_hosts:** use array for `options` (work around SC2178,SC2179) ([743d0a9](https://github.com/scop/bash-completion/commit/743d0a9be714c516dce23415e3a5c5f81d5d7bea))
+* **_mock,rpm:** avoid icase flag `s/reg/rep/i` of GNU sed ([33c18ce](https://github.com/scop/bash-completion/commit/33c18ce90df153dabb89813d472dacf5a6259b92))
+* **_service:** quote word ([c2d7fb7](https://github.com/scop/bash-completion/commit/c2d7fb73844531ccb10576ddd905fb058e00c88e))
+* **_slackpkg:** do not scan after cword ([ecd1384](https://github.com/scop/bash-completion/commit/ecd13849f76966d9e15607bdd604972279bb9cd8))
+* **7z:** remove redundant `printf '%s\n' "..."` ([20c2e32](https://github.com/scop/bash-completion/commit/20c2e322f8eb93240de73b62647e7ca2f7b8fa4f))
+* **ant:** work around custom IFS ([584e567](https://github.com/scop/bash-completion/commit/584e56748da32e8f17a713b14c23ea2b7c92a4dc))
+* **apt-cache:** check all the words ([84cfeda](https://github.com/scop/bash-completion/commit/84cfedabe958ad6f7cfc52525d79e9b801de4233))
+* **aptitude:** do not use non-POSIX BRE \w ([cd8c870](https://github.com/scop/bash-completion/commit/cd8c8701b60f17f9aecc27482f64f121821085ee))
+* **aspell:** use `_comp_expand_glob` against unexpected splitting ([58d5176](https://github.com/scop/bash-completion/commit/58d5176cba8bb25fe5348aadef100c083afa992f))
+* **bash_completion:** remove some unnecessary `-a` to `_comp_compgen` ([636bb7c](https://github.com/scop/bash-completion/commit/636bb7c4062c3e410904769f1fde4f5b14a12afc))
+* **bts:** update functions to generators and fix variable conflicts ([7d2867c](https://github.com/scop/bash-completion/commit/7d2867c01527c3037579fe24da62cccfdfd1883e))
+* **carton:** remove a branch never happening ([cd063f9](https://github.com/scop/bash-completion/commit/cd063f9a40e4dc85e0a9de7ceeac019cdac57449))
+* **chgrp:** fix typo `_comp_compgen{d => _}filedir` ([#1063](https://github.com/scop/bash-completion/issues/1063)) ([4c98ce5](https://github.com/scop/bash-completion/commit/4c98ce58b7686b9f23f14bf05e809d9cd1a5669c))
+* **compat:** find compat dir for prefix-install ([b6d06bc](https://github.com/scop/bash-completion/commit/b6d06bc47119fcfc47f10eed328ff54e95ddc14d))
+* **completions/*:** quote array assignments properly ([848aa41](https://github.com/scop/bash-completion/commit/848aa413273516529ccc163966f138ad3a6c53a0))
+* **completions/*:** scan until cword instead of ${#words[@]}-1 ([17e0cc3](https://github.com/scop/bash-completion/commit/17e0cc36fdb4c6543c7729419d6f736ee779db1f))
+* **completions/*:** work around localvar_inherit ([e3a871d](https://github.com/scop/bash-completion/commit/e3a871d2517f688d7fe7132f33e96669a71b6aa1))
+* **curl,koji:** use _comp_compgen_help ([f37f221](https://github.com/scop/bash-completion/commit/f37f221f3f191fec0d301815d276d830f6119186))
+* **curl,qemu:** avoid using POSIX character classes for mawk ([d60c530](https://github.com/scop/bash-completion/commit/d60c5306f918b370c74f5ba6d3100720be139ad6))
+* **curl:** colon handling for IPv6 address completions ([8508d1d](https://github.com/scop/bash-completion/commit/8508d1d8f6f3d50ac6fb45ec2eb0f05dcef8d817))
+* **cvs,mutt,pkg_delete:** quote prefix to remove for literal matching ([533903e](https://github.com/scop/bash-completion/commit/533903edd5d0752cb4b910c3bcc6d86a0e55d779))
+* **cvs:** avoid variable conflicts ([0d145c9](https://github.com/scop/bash-completion/commit/0d145c9f2852955848ca1855d9fae216ebbd78c3))
+* **dict:** nounset error when host/port not set ([57191e2](https://github.com/scop/bash-completion/commit/57191e2731eb307434c2f11813d7dea303458dce))
+* **dict:** protect splitting from custom IFS ([b31fe1e](https://github.com/scop/bash-completion/commit/b31fe1e3e1b3480d9dc6a469cae4e83ed204b382))
+* **dict:** work around bash-4.2 array nounset ([d76dd9e](https://github.com/scop/bash-completion/commit/d76dd9ea448b71e111763e8048df49dde797d85e))
+* **dict:** work around bash-4.3 ${v+"$@"} with custom IFS ([cc21298](https://github.com/scop/bash-completion/commit/cc212983a2b2523e5b62e9735c6dff5f011bb80a))
+* **dmypy:** protect against "localvar_inherit" ([768ce65](https://github.com/scop/bash-completion/commit/768ce656099879ba1b81de04b75db11679791c47))
+* **dpkg-source:** filter completions by `cur` ([dbcef6e](https://github.com/scop/bash-completion/commit/dbcef6e37313b00f00ca65397be6a061b1af3bb8))
+* **filedir:** work around bash-4.2 `compgen -f -- "''"` ([c8bb123](https://github.com/scop/bash-completion/commit/c8bb123abc0c148bfa078cf8bfe01bafc5cf50ff))
+* fix problems with `set -o nounset` ([9c3e196](https://github.com/scop/bash-completion/commit/9c3e1961928248da8a6dd8e327c3860f71eb7dff))
+* **gdb:** fix regression that fails to generate command names ([ca8e240](https://github.com/scop/bash-completion/commit/ca8e2405ae49c927f9c9d312aa0efdde3d231bf2))
+* **gdb:** remove duplicate candidates ([532fc05](https://github.com/scop/bash-completion/commit/532fc05a73b415369ce1987463d82d791ee72dc0))
+* **gdb:** use POSIX-compatible find expression ([73938cd](https://github.com/scop/bash-completion/commit/73938cd857c3a7fa884e24be7216d1c5b12d5a1c))
+* **gdb:** work around bash 4.4 ${v+"$@"} ([41236da](https://github.com/scop/bash-completion/commit/41236da411794133d08792df28207e2a77271c57))
+* **get_words:** work around bash-4.3 connected ${v+"$@"} ([81affbd](https://github.com/scop/bash-completion/commit/81affbd999a24f796f79fb5c1eec80e88b3a98d8))
+* **getent:** check noargopts ([6143f25](https://github.com/scop/bash-completion/commit/6143f257f1593c319504c2627fe01b4c94e90a48))
+* **getent:** work around localvar_inherit ([a12f438](https://github.com/scop/bash-completion/commit/a12f438ebf93d7427d1b5df7056ace8ec67e890c))
+* **gzip,isort:** fix typo `_comp_com{gp => pg}en` ([462feb3](https://github.com/scop/bash-completion/commit/462feb34d3b49f70a2451cbf724d14e59bfd8e0a))
+* **iperf,puppet:** use \{m,n\} instead of \? and \+ for POSIX sed ([3f0322b](https://github.com/scop/bash-completion/commit/3f0322b73d98c177ede1973ad1b84e66ee593ca9))
+* **iperf:** work around failglob with backslash in bash-5.0 ([979f04f](https://github.com/scop/bash-completion/commit/979f04f67c76395e21f77b7945639f2eeaa3b37f))
+* **ip:** Remove non-existent route completion ([3b9ce4d](https://github.com/scop/bash-completion/commit/3b9ce4dc0ba0a14d1d390f0e83c7b7b53a26b5a5))
+* **isql:** work around nounset ([cb7007a](https://github.com/scop/bash-completion/commit/cb7007af225369e5872280411bb6871b55f274a5))
+* **java,kldload:** use `_comp_compgen` for filename-based mod names ([81adc6c](https://github.com/scop/bash-completion/commit/81adc6ce741f69e936dfb0e1e891c372341814f2))
+* **java:** localize `cur` ([ec0068d](https://github.com/scop/bash-completion/commit/ec0068d13f3c98551771e4ada4335f131c2f0cb4))
+* **kcov,povray:** quote array expansions to avoid extra processing ([215edab](https://github.com/scop/bash-completion/commit/215edabcceece2b53becc78cf88a24fb120db299))
+* **kldload,mplayer,mutt:** work around nounset ([5330fbe](https://github.com/scop/bash-completion/commit/5330fbeecdd490aa79f1cf7ce320e1b27a776d69))
+* **kldunload:** remove unused -X option ([35017d2](https://github.com/scop/bash-completion/commit/35017d25acee6830d4c30485a1b2cba2f12e00ed))
+* **known_hosts_real:** match `*.pub` instead of `*pub` ([470a644](https://github.com/scop/bash-completion/commit/470a644be3144d9fbd7d58d99d1c3fd73c773b9f))
+* **known_hosts_real:** use `_comp_expand_glob` to avoid failglob ([672215e](https://github.com/scop/bash-completion/commit/672215e010d5f78085caf61cecda620b4c67f4ae))
+* **known_hosts_real:** work around nounset ([07c619a](https://github.com/scop/bash-completion/commit/07c619a56950de1960312ae24411c27688e5aa1a))
+* **lilo,rpcdebug,slapt-{get,src}:** work around nounset ([cfc3eda](https://github.com/scop/bash-completion/commit/cfc3eda9575a8b0b48a531652875206db36957d5))
+* **lvm:** replace array slices with existing utility ([ea49840](https://github.com/scop/bash-completion/commit/ea498402ccf07eb1e4acef0ad40a7c188e567145))
+* **lvm:** update call to sub-command ([30494f7](https://github.com/scop/bash-completion/commit/30494f7b426c73b1a6a616f63d3510027c6fb02e))
+* **make:** handle multiple short options in skipping arguments ([24c80c9](https://github.com/scop/bash-completion/commit/24c80c91b7183ea5fcc9f2e7bc7ded303ea57d0a))
+* **make:** typo fix in a code comment ([e72cc82](https://github.com/scop/bash-completion/commit/e72cc826534a0ea9dc840546134c19962697c3a0))
+* **mdadm,update-alternatives:** fix leak variable ([14cd53b](https://github.com/scop/bash-completion/commit/14cd53bb38d0d0ef91bf82731e8946551f15023a))
+* **medusa:** filter completions by the current word `cur` ([f3ae706](https://github.com/scop/bash-completion/commit/f3ae706e114c4924416c50cca90473e6ce98ae20))
+* **mr:** avoid ${var/pat/$'...'} for compat42 in bash >= 4.3 ([b5ae5fa](https://github.com/scop/bash-completion/commit/b5ae5fada8b788885b0fd65cca34b85672f08189))
+* **mr:** exactly match command names ([800b103](https://github.com/scop/bash-completion/commit/800b10372e383124856c37b505d5dc9232eb1e45))
+* **mutt:** avoid unexpected word splitting ([3183e67](https://github.com/scop/bash-completion/commit/3183e67c72fcf5ba3d713de59a5d6898a9a64952))
+* **mutt:** fix use of regex in the glob context ([63924e6](https://github.com/scop/bash-completion/commit/63924e67527e5fa7698ac0610c7fd90c7ba36ecf))
+* **mutt:** rewrite ${cur/#!/X} to X${cur:1} against patsub_replacement ([6b8f82b](https://github.com/scop/bash-completion/commit/6b8f82b44e2308db66bc10e4f3529fe0ca5137e5))
+* **mutt:** use _comp_dequote for safe eval ([f98379d](https://github.com/scop/bash-completion/commit/f98379d33ee376df7a7f7de6fb85af8fffb469ee))
+* **openssl:** avoid variable conflicts ([a31906c](https://github.com/scop/bash-completion/commit/a31906cd2886b51e74d5d1bcbae3528a0f9f135b))
+* **openssl:** fix variable `i` leak ([83844b7](https://github.com/scop/bash-completion/commit/83844b7df11ad4ca02bb5da473fa4c5e8e3df80d))
+* **perl:** fix ineffective condition in an awk script ([302dc52](https://github.com/scop/bash-completion/commit/302dc52b9b02dc9a8fa9b1833012b3c4f96b6d7b))
+* **perl:** helper call regression from 01611dd3d ([b85263a](https://github.com/scop/bash-completion/commit/b85263a6de7f8e60f09489caac3f9a0d613e804f))
+* **pgrep:** do not rely on uncontrolled IFS ([99e38b2](https://github.com/scop/bash-completion/commit/99e38b27424a53f901ec274269f5646bb4b02850))
+* **portinstall:** use awk and _comp_compgen to filter completions ([791f56c](https://github.com/scop/bash-completion/commit/791f56c62656ba19c4db804b7ccf8c2e8ba1d55a))
+* **povray,sbopkg:** check filetype ([434eb08](https://github.com/scop/bash-completion/commit/434eb0853ed25c8730a38d5c3afbac170b397153))
+* **povray:** process each element against patsub_replacement ([0afc2e4](https://github.com/scop/bash-completion/commit/0afc2e4a5db45b569827ca3bbef90f70bc7e74f5))
+* **povray:** quote an argument properly ([0a240bd](https://github.com/scop/bash-completion/commit/0a240bd958a8aed9ef4251d0b223c42c60a77125))
+* **ps,ss:** avoid extra expansions by -W "$(...)" in _comp_delimited ([cb347cb](https://github.com/scop/bash-completion/commit/cb347cb208c5708e30aa3d847849aa6ce71ba814))
+* **pydoc:** specify -a to _comp_compgen_filedir ([34a91e9](https://github.com/scop/bash-completion/commit/34a91e9425992262913cbacf36706618a6f99bd4))
+* **pytest:** do not filter underscores from parsed option arg choices ([ea13241](https://github.com/scop/bash-completion/commit/ea13241b2aaa9361ba6d701aaadd8f4ce39dc28a))
+* **python:** avoid variable conflicts ([bef94c3](https://github.com/scop/bash-completion/commit/bef94c39b9fac23655c8b50181d7834869d72702))
+* **python:** complete filenames for script arguments ([#1018](https://github.com/scop/bash-completion/issues/1018)) ([397a49d](https://github.com/scop/bash-completion/commit/397a49d1c3a4faa5e15639d2852828f99b659bcc))
+* **python:** complete micropython and pyston script args consistently ([5b60ccc](https://github.com/scop/bash-completion/commit/5b60ccc1ee573637263bdaac070065af1406de4d))
+* **qdbus:** remove cur and all the rest arguments ([531b751](https://github.com/scop/bash-completion/commit/531b75142dc812a37b638de5c272c2356506fcc2))
+* replace \s with [[:space:]] for POSIX sed/awk ([1989ba9](https://github.com/scop/bash-completion/commit/1989ba9ad3de5cf33da3c9623fa87be5194fac08))
+* **ri:** avoid interference on existing COMPREPLY ([0a9d931](https://github.com/scop/bash-completion/commit/0a9d9319d50db21e0ca0051c19b9b3375790d353))
+* **ri:** fix wrongly quoted options to compgen ([5248bbf](https://github.com/scop/bash-completion/commit/5248bbf475d275bd6fc743d62f6f7f3ab0c30a39))
+* **ri:** properly split methods ([910a5a0](https://github.com/scop/bash-completion/commit/910a5a07c0f43095134c97c6b10db9d05505c3ef))
+* **ri:** split classes using `_comp_split` ([c95baa1](https://github.com/scop/bash-completion/commit/c95baa12d7879c81967b6dc9df896255d3253781))
+* **ri:** work around localvar_inherit ([9d6ff68](https://github.com/scop/bash-completion/commit/9d6ff689f44a2e560cbb643607f87551e7a88190))
+* **sbopkg:** add `;` mandatory before `}` in POSIX sed ([b286d53](https://github.com/scop/bash-completion/commit/b286d53dec9e7fb5edb513afa8bd60f8c0e9b68c))
+* **sbopkg:** work around nounset ([9709bdf](https://github.com/scop/bash-completion/commit/9709bdf226996878760ad87759f0011ff8587a3b))
+* **scp:** `nounset` mode error on unknown suboption, bash 4.2 ([82ca8d9](https://github.com/scop/bash-completion/commit/82ca8d924c4514f6570861d97b1ed953cbf9fe11))
+* **ssh-copy-id:** call ssh, not -copy-id for suboption completion check ([473278f](https://github.com/scop/bash-completion/commit/473278faed2f6d7d894dc674e71d1cef41022b6c))
+* **ssh-keygen:** call ssh, not -keygen to resolve supported protocols ([d569ea2](https://github.com/scop/bash-completion/commit/d569ea26389824b73732157947193efaea5f4ba8))
+* **ssh-keygen:** first arg to ssh query for protocol versions ([8a0a71e](https://github.com/scop/bash-completion/commit/8a0a71e449b5458f89fbc55b0ab7d6f6bf6656e9))
+* **ssh:** avoid variable conflicts ([f2df91d](https://github.com/scop/bash-completion/commit/f2df91d378004780d5237ab89faea2d6789169c0))
+* **ssh:** fix wrong quoting inside compgen -W ([febb3b3](https://github.com/scop/bash-completion/commit/febb3b3257fca6402fc4c33c4de293bbf962580c))
+* **ssh:** remove -a of generators ([55c5c45](https://github.com/scop/bash-completion/commit/55c5c459387e54ecdc869121fa97242e92ab87a8))
+* **ssh:** remove unnecessary -a to _comp_compgen ([992f28e](https://github.com/scop/bash-completion/commit/992f28e73c82f3157e346845ba9e440b7f3d8f22))
+* **ssh:** resolve relative ssh_config Include correctly ([4ac86e8](https://github.com/scop/bash-completion/commit/4ac86e84e55e793ba468c8cb6111510c9831377b))
+* **ssh:** use `_comp_compgen` for `_comp_xfunc_ssh_identityfile` ([05e70ed](https://github.com/scop/bash-completion/commit/05e70ede40dc4b50cdeb67bfa8484af53d24f995))
+* **ssh:** work around bash-4.2 nounset ([4447f83](https://github.com/scop/bash-completion/commit/4447f83c5d72823f336e3eefab2e8e10e080711b))
+* **ssh:** work around bash-4.2 nounset ([d0695d0](https://github.com/scop/bash-completion/commit/d0695d0bc9d44d851d41b5c7e123ab6b95f29e81))
+* **sudo:** use $1 (sudo) as $root_command ([329ca0e](https://github.com/scop/bash-completion/commit/329ca0eefd540b78e5fc287c2a4a2e2afdbfb45d))
+* **svcadm:** fix ineffective IFS for splitting ([1fd456e](https://github.com/scop/bash-completion/commit/1fd456e7435b88811b82809dc5845ee53ff7aafb))
+* **svcadm:** use the first matching name as command ([1870d5e](https://github.com/scop/bash-completion/commit/1870d5e0a67650a67c19895aefaae79eb2d6d76e))
+* **sysbench:** fix extraction of test-name option ([cc246a1](https://github.com/scop/bash-completion/commit/cc246a1b7d0433996c99534f64e0363170ac00cd))
+* **timeout:** always treat word after duration as command ([0d0531b](https://github.com/scop/bash-completion/commit/0d0531b254b03510f5dfa422a4198c33b5becd54))
+* **tipc:** remove filtered-out elements ([75b36b2](https://github.com/scop/bash-completion/commit/75b36b20b57e67a253d0c2622e88ba84ccc3bc25))
+* **update-alternatives:** quote dirname ([1205ed1](https://github.com/scop/bash-completion/commit/1205ed1958fa914faa8ccec778079e3f0ea2945b))
+* **update-alternatives:** suppress error for non-existent directory ([adbdab8](https://github.com/scop/bash-completion/commit/adbdab8fb5620e208826256e66851a1343f09e75))
+* **update-alternatives:** work around localvar_inherit ([1d9e19c](https://github.com/scop/bash-completion/commit/1d9e19cd2ae3650aa81512dc2ab811a80c16ca33))
+* **upgradepkg:** use `_comp_compgen` for `_comp_cmd_upgradepkg` ([a0973d7](https://github.com/scop/bash-completion/commit/a0973d77e8a3706490e33ba0f807727250b95c0e))
+* use _comp_compgen_split to avoid extra expansions by -W "$(...)" ([49997d0](https://github.com/scop/bash-completion/commit/49997d0b2ff4fbbea37558570632e096d777ee54))
+* use `_comp_compgen_split` to split and filter words ([158b8ba](https://github.com/scop/bash-completion/commit/158b8ba1de91913108507ae163611a44ae4871b0))
+* use `_comp_compgen_split` while keeping filtering by $cur ([a00ee19](https://github.com/scop/bash-completion/commit/a00ee19962e78f51a12b83bb1b11b89dc7512b22))
+* use `_comp_compgen` for word list ([83f033f](https://github.com/scop/bash-completion/commit/83f033f798c0fefbc9f37149d3bd40b0f238eabc))
+* use `_comp_split` while keeping filtering by $cur ([509e642](https://github.com/scop/bash-completion/commit/509e642d42a696a5737c94dc296c69ed60a4dd3b))
+* use compgen -P prefix -W '"${arr[@]}"' against patsub_replacement ([45d036a](https://github.com/scop/bash-completion/commit/45d036ad804973a4b1916e818a73421435db444d))
+* use XPG4 awk in Solaris ([cdd6da9](https://github.com/scop/bash-completion/commit/cdd6da9c77c7c99cab0aed7b9d7a5e4c0c5e0c78))
+* **wol:** filter IP addresses by `cur` ([c3505c5](https://github.com/scop/bash-completion/commit/c3505c518f9d2695f678d82a1efcf35118af08ec))
+* **wtf:** quote array assignment ([44c1d12](https://github.com/scop/bash-completion/commit/44c1d1292fdb840640a848aab6b2827002477ee9))
+* **xfreerdp:** support the new form of the option /list:kbd ([d8cadfe](https://github.com/scop/bash-completion/commit/d8cadfea1036cb558f5c6f663843a19eaa3b5025))
+* **xfunc ssh identityfile:** localize change to cur ([76b5726](https://github.com/scop/bash-completion/commit/76b572650f224e2e3b85918944af0bc8dfb49952))
+
+
+### Performance Improvements
+
+* **_comp_count_args:** skip reinitializing cword and words ([29398ef](https://github.com/scop/bash-completion/commit/29398efab4dd06fceb7c94c5329c5002b14cb8b4))
+* **mutt:** return earlier on empty `cur` ([a244587](https://github.com/scop/bash-completion/commit/a244587e3c2d83bbef090438b329478da1896a4c))
+* **portinstall:** return earlier for -lLo and non-existent file ([395e463](https://github.com/scop/bash-completion/commit/395e463d7e22bfb8b8b9f8ce4884ff7a979b2e35))
+* **vncviewer:** set nocasematch inside subshell ([5ed0020](https://github.com/scop/bash-completion/commit/5ed0020f4ec39c5ff9994882cae9f04eb45e4ed7))
+
## 2.11 (2020-07-25)
* lilo: add -B and -E completions ([7dd16ad](https://www.github.com/scop/bash-completion/commit/7dd16adf6ae409ee76256ac8b73977e9a88e341e))
@@ -299,264 +601,6 @@
* pre-commit: anchor exclude patterns ([cc697a6](https://www.github.com/scop/bash-completion/commit/cc697a646c1bd1100890abd367bb8d0274a42275))
* extra/make-changelog: check and output usage message ([cf90b29](https://www.github.com/scop/bash-completion/commit/cf90b297696cee57650f4fb6c29cebe872f773a7))
-## [2.13.0](https://github.com/scop/bash-completion/compare/2.12.0...2.13.0) (2024-04-03)
-
-
-### Features
-
-* **curl:** Complete protocols for --proto-default ([7051379](https://github.com/scop/bash-completion/commit/7051379e448147407c3fe43c89872dafb76ebb27))
-* **ip:** Add completion for netconf subcommand ([03a10ff](https://github.com/scop/bash-completion/commit/03a10ff63226782e61dae4407138c3240ff0c7c2))
-* **ip:** Complete commands for netns exec ([1f03796](https://github.com/scop/bash-completion/commit/1f03796cd930ddad6207d46814da820674f16edc))
-* **ip:** Complete help for unknown subcommands ([21f7e32](https://github.com/scop/bash-completion/commit/21f7e32f9009c2064d1659668425b6b6ccb537bd))
-* **ip:** Complete ip link property ([efa663c](https://github.com/scop/bash-completion/commit/efa663cd0dd63d54fd2d2987ee66fb954ccf4a86))
-* **ip:** Complete link types for address show ([ca5ea03](https://github.com/scop/bash-completion/commit/ca5ea037e2ec1b0b5ec4d31295df88125d51b43e))
-* **ip:** Complete neigh show and flush ([c7c3c03](https://github.com/scop/bash-completion/commit/c7c3c039bf5a462ea577e8fcc92ebd94d6afad49))
-* **ip:** Complete stats subcommand ([cd73e8c](https://github.com/scop/bash-completion/commit/cd73e8c1689e3e014c4a75d5101ee3d932013120))
-* **ip:** Create function to get link types ([8e60245](https://github.com/scop/bash-completion/commit/8e60245c7531e1615dc96b032035bb4f59972f4a))
-* **rg:** add fallback 3rd party completion loader ([7e4cc2f](https://github.com/scop/bash-completion/commit/7e4cc2fb199f1c88bd9a358a157fe06327fc2b28))
-* **xmllint,xmlwf:** also suggest *.rss files ([a89cde2](https://github.com/scop/bash-completion/commit/a89cde2216b1634521b4a264b2dbc5cda7522061))
-
-
-### Bug Fixes
-
-* **available_interfaces:** fix regression of unwanted trailing colons ([c2f83e0](https://github.com/scop/bash-completion/commit/c2f83e0436208ef2bfa9c762bc28ff6374ba0c73))
-* **ip:** Complete addrlabel add/del properties ([ea07616](https://github.com/scop/bash-completion/commit/ea076166e9a5cce9d22a27e63f95bbf00be9b894))
-* **ip:** Complete ip delete with type correctly ([f3a9be3](https://github.com/scop/bash-completion/commit/f3a9be3e2f6eaf0d94bb66220fd02cf0e3c76481))
-* **ip:** Complete more variations of subcommands ([c8920c5](https://github.com/scop/bash-completion/commit/c8920c57f83199a14230485cc44b426f028acafb))
-* **ip:** Complete netns attach subcommand ([bfb1de6](https://github.com/scop/bash-completion/commit/bfb1de64a53d1eba749c9921cea3809460cd2319))
-* **ip:** Complete only relevant addrlabel subcmds ([05147f1](https://github.com/scop/bash-completion/commit/05147f19d3d04040fa8dacbd9e1705bfc1432073))
-* **ip:** Keep completing after -netns name ([1a5df4f](https://github.com/scop/bash-completion/commit/1a5df4fe22eb374424b18e7db27b8446e919f4b2))
-* **ip:** Quote all instantiation of ip as "$1" ([ef25163](https://github.com/scop/bash-completion/commit/ef25163e6bd9095e528b57d44cb31d32f0321bb9))
-* **ip:** Quote network namespace names ([216734b](https://github.com/scop/bash-completion/commit/216734bed7ba02655128bf1dbc2f184420ad69ef))
-* **Makefile:** include api-and-naming.md in dist ([fdd8048](https://github.com/scop/bash-completion/commit/fdd80487ba6944e639baf32ba991f8665840728d))
-
-## [2.12.0](https://github.com/scop/bash-completion/compare/v2.11.0...2.12.0) (2024-02-21)
-
-
-### Features
-
-* **_comp_backup_glob:** add `ucf` generated backup files ([351be1c](https://github.com/scop/bash-completion/commit/351be1c81ecd97135d3df64475a93d57526d5630))
-* **_comp_backup_glob:** require dash in dpkg backup files ([59a57f9](https://github.com/scop/bash-completion/commit/59a57f9f8c6a47dc9d21c61d13ffb90a5f3b82f0))
-* **_comp_compgen_{filedir,set}:** define exit status ([7920c9d](https://github.com/scop/bash-completion/commit/7920c9dbe46bd5ad0a92e78b744f00ffe8b14e76))
-* **_comp_compgen_commands:** align return value with other compgens ([9d3362e](https://github.com/scop/bash-completion/commit/9d3362e4a092efaecda2fa2a5f01feca75e7b24e))
-* **_comp_compgen_commands:** auto set `-o filenames` when appropriate ([4d4839e](https://github.com/scop/bash-completion/commit/4d4839e50210de4d3a8780caa4b9d8ab44b8f86d))
-* **_comp_compgen_commands:** include dirs ([b9c7b5d](https://github.com/scop/bash-completion/commit/b9c7b5dc414c09d27a6b157d37bede70e662b91c))
-* **_comp_compgen_known_hosts:** return 2 on usage error ([43bb8f0](https://github.com/scop/bash-completion/commit/43bb8f03798811d95a3068a8a53d2eac9ad877b5))
-* **_comp_compgen:** support `-i cmd` and `-x cmd` ([39cc200](https://github.com/scop/bash-completion/commit/39cc200f9e6d9b03d1e76a924371f85304e786d5))
-* **_comp_compgen:** support `-U var` to unlocal var ([b603535](https://github.com/scop/bash-completion/commit/b60353508eb470515f1063a1e1a75bdf1fda730f))
-* **_comp_compgen:** support option -C ([6b3dfa5](https://github.com/scop/bash-completion/commit/6b3dfa529950f3bc51b8ead9323a82f65c5cfeb9))
-* **_comp_expand_glob:** fail when no paths are generated ([6b0a466](https://github.com/scop/bash-completion/commit/6b0a46644d587182c20f880755a821a7680753fe))
-* **_comp_get_fist_arg:** support "-o GLOB" to skip optargs ([0f14cc0](https://github.com/scop/bash-completion/commit/0f14cc030ebdb54f3d120d8cadc08651dad00624))
-* **_ip_addresses:** auto ltrim colon completions when appropriate ([ccdf953](https://github.com/scop/bash-completion/commit/ccdf953b7956d6fc65334e9049e157a3480a5cfa))
-* add _comp_compgen_split ([542bf73](https://github.com/scop/bash-completion/commit/542bf73f571312659293dac664bf257ef66fbfef))
-* add `_comp_locate_first_arg` ([0384bd5](https://github.com/scop/bash-completion/commit/0384bd51df3f68a3e065aeead4e921462fff6655))
-* **airflow:** add fallback 3rd party completion loader ([bf5550b](https://github.com/scop/bash-completion/commit/bf5550b5fc304ed956b6061221f173516408d82d))
-* **ansible*:** add fallback 3rd party completion loader ([5f8384e](https://github.com/scop/bash-completion/commit/5f8384ef71acd1dc6e214177e5bbe3b0b83ee976))
-* **apt-get:** prefer `apt-cache` in same dir as command ([a731bfd](https://github.com/scop/bash-completion/commit/a731bfd0acf77c7e5ec52315e3b470cffa177b4a))
-* **b2sum:** new completion ([cd985df](https://github.com/scop/bash-completion/commit/cd985df6d8e613fd5421066248db1c50dc1686bd))
-* **bash_completion:** add function _comp_compgen_ltrim_colon ([ce5889b](https://github.com/scop/bash-completion/commit/ce5889ba3b1364d9afe7096c6fa14d7c65d08cc6))
-* **black,blackd:** add fallback 3rd party completion loader ([47a1f05](https://github.com/scop/bash-completion/commit/47a1f05e75399d25dcf0281ae6f8ba363a82e6bc))
-* **carton:** support exec command completions ([0eb3a21](https://github.com/scop/bash-completion/commit/0eb3a21afdcd4c52966e0894f43f501dc3b727e3))
-* **chezmoi:** add 3rd-party completion loader (cobra) ([31baa69](https://github.com/scop/bash-completion/commit/31baa69954351a2d30047f707692d361646aea53))
-* **conda:** add 3rd-party completion loader (argcomplete) ([c0f5ba2](https://github.com/scop/bash-completion/commit/c0f5ba2e19abea70dcde4bf0aafe36de801b28c0))
-* **crc:** add 3rd-party completion loader (cobra) ([f10866e](https://github.com/scop/bash-completion/commit/f10866e1aaf810ae5cb29ccd5c1e8ac722d0f2ae))
-* **cz:** add fallback 3rd party completion loader ([b7ba70e](https://github.com/scop/bash-completion/commit/b7ba70e52e1e0f287c29b5d7362439dccd132e8b))
-* **dot:** support filename extension .gv ([be0010e](https://github.com/scop/bash-completion/commit/be0010e8517de89bf06bda02bdccacc51968136e))
-* **dprint:** add fallback 3rd party completion loader ([e201e0e](https://github.com/scop/bash-completion/commit/e201e0ee336e79c26bce2afc3f2b4f98d4fea12d))
-* **eog:** add missing extension .heif ([9e4a48f](https://github.com/scop/bash-completion/commit/9e4a48fdaa372a41e6ad5c7d021164394054aa97))
-* **eog:** associate with `*.avif` and `*.webp` ([#1005](https://github.com/scop/bash-completion/issues/1005)) ([f1c04b8](https://github.com/scop/bash-completion/commit/f1c04b816e1612acdac62605528d32b5d896916f))
-* **eog:** associate with `*.heic` and `*.jxl` ([20c9cea](https://github.com/scop/bash-completion/commit/20c9cea129e1f1e92045098ce7555a3f2add30e8))
-* **eog:** associate with `*.pbm` ([#1006](https://github.com/scop/bash-completion/issues/1006)) ([5472cc1](https://github.com/scop/bash-completion/commit/5472cc1fef9c60abf240bd8f4acf38dbdaabf1a1))
-* **feh:** associate with y4m and heic/heif/avif ([e252c73](https://github.com/scop/bash-completion/commit/e252c73ff2b92320dfabc9daf0d3f4ac15171e96))
-* **feh:** deassociate with avci/avcs ([af46f34](https://github.com/scop/bash-completion/commit/af46f3411acfbd28624f57ff6a7511148d1857f9))
-* **flask:** add fallback 3rd party completion loader ([3e0d00d](https://github.com/scop/bash-completion/commit/3e0d00d4ea55a200ea67196a6de841e8633fcad3))
-* **hash:** new completion ([#1013](https://github.com/scop/bash-completion/issues/1013)) ([4d0bffb](https://github.com/scop/bash-completion/commit/4d0bffb791c34c96114aeb2e4f6726b80aa8698e))
-* **httpx:** add fallback 3rd party completion loader ([3f4861c](https://github.com/scop/bash-completion/commit/3f4861cc41ea05982b2c4a98cc1f56f21895419b))
-* **ip:** Add completion for monitor subcommand ([fa696e6](https://github.com/scop/bash-completion/commit/fa696e60f3fe525a14bfbb409effb4e51b2e4450))
-* **jungle:** add fallback 3rd-party completion loader ([c69845a](https://github.com/scop/bash-completion/commit/c69845abf7efe9c226cef46ebf8b9129058db43d))
-* **keyring:** add fallback 3rd party completion loader ([8082602](https://github.com/scop/bash-completion/commit/80826028b7760409f20624a6fb4f4c5a4eaec8e3))
-* **kontena:** add fallback 3rd-party completion loader ([5eef0ce](https://github.com/scop/bash-completion/commit/5eef0ce3e5bd29f32d5830abfaf60da1295c4562))
-* **lefthook:** add fallback 3rd party completion loader ([dc9650e](https://github.com/scop/bash-completion/commit/dc9650e917d2018fa9eeb251e2c3db2b0f9d230a))
-* **mailman:** prefer `list_lists` in same dir as command ([a46ccf1](https://github.com/scop/bash-completion/commit/a46ccf132d53f4f5adf5ad3b0e51ec1dde931298))
-* **mysql:** prefer `mysqlshow` from same dir ([643886c](https://github.com/scop/bash-completion/commit/643886cf3c34eef47a86fbc6c2a64712c455dad3))
-* no empty command completion if `no_empty_cmd_completion` is on ([faab292](https://github.com/scop/bash-completion/commit/faab29286074ec3c952dfe50f0cb22af65dadbeb))
-* **npm:** add fallback 3rd-party completion loader ([f1c085c](https://github.com/scop/bash-completion/commit/f1c085cc56cf15d2bd0c97148535e36e81dfc5d4))
-* **nvm:** add fallback 3rd-party completion loader ([dea7e1d](https://github.com/scop/bash-completion/commit/dea7e1d431f1700c2515ece47b07ba472e1f999c))
-* **oc:** add 3rd-party completion loader (cobra) ([26b5f09](https://github.com/scop/bash-completion/commit/26b5f09490159fd8fc6b7c592cb70c40e8b214dc))
-* **pip{,3}:** add fallback 3rd-party completion loader ([e3cbfba](https://github.com/scop/bash-completion/commit/e3cbfba64e6f52ee49c59052ef40eb4a11a48849))
-* **pipenv:** add fallback 3rd party completion loader ([#1020](https://github.com/scop/bash-completion/issues/1020)) ([6ecf5bd](https://github.com/scop/bash-completion/commit/6ecf5bdb3c534db894da60e336f58235547de80d))
-* **pytest:** complete new --import-mode value ([#1021](https://github.com/scop/bash-completion/issues/1021)) ([2d636a3](https://github.com/scop/bash-completion/commit/2d636a3cb4ee66b4bc3355fadff1a1e4246199d4))
-* **rtx:** add fallback 3rd party completion loader ([0628e22](https://github.com/scop/bash-completion/commit/0628e223689b7bad0b9dc43e56d935a66b73b8a2))
-* **scp,sftp:** prefer `ssh` from same dir to resolve options etc ([d55f5e6](https://github.com/scop/bash-completion/commit/d55f5e6a9e9fb53b02bb86a8fc6278e671099bb0))
-* **ssh-copy-id,ssh-keygen:** prefer `ssh` from same dir ([5c1d270](https://github.com/scop/bash-completion/commit/5c1d2701456e14fbe946ef7ccfecc7e10829b806))
-* **ssh-inscribe:** add fallback 3rd party completion loader ([7f2c197](https://github.com/scop/bash-completion/commit/7f2c197e4e59b313d0f47cde902f57145106660e))
-* **ssh:** complete RequiredRSASize ([#1064](https://github.com/scop/bash-completion/issues/1064)) ([de15205](https://github.com/scop/bash-completion/commit/de15205d6c7997e8596dce4f9d2a2bfc476be716))
-* **tkn-pac:** add 3rd-party completion loader (cobra) ([d0f2604](https://github.com/scop/bash-completion/commit/d0f26045937276427ebb9844e84f40cff1b928f4))
-* **tkn:** add 3rd-party completion loader (cobra) ([161fc5d](https://github.com/scop/bash-completion/commit/161fc5d42cd7dd814a9197f788045ca052062c22))
-* **xrandr:** comma separated `--setmonitor` third argument ([8a76f3d](https://github.com/scop/bash-completion/commit/8a76f3d75db290302f94ea732e01a9afd25c2c24))
-
-
-### Bug Fixes
-
-* **__load_completion:** quoted compspec for variants ([#1008](https://github.com/scop/bash-completion/issues/1008)) ([0a2443e](https://github.com/scop/bash-completion/commit/0a2443e3eec8557273dd905df9a28dc177861023))
-* **_cd_devices:** `/dev/cdc-*` CDC device false positives ([5250728](https://github.com/scop/bash-completion/commit/52507286a6ea8c576414d7cca0f6a2d30dd78c84))
-* **_comp__init_set_up_service_completions:** work around failglob ([2529d40](https://github.com/scop/bash-completion/commit/2529d40f22039b344fd0bb5280a8469b8783f2a9))
-* **_comp_{first_arg,count_args}:** count - as argument ([e23a79e](https://github.com/scop/bash-completion/commit/e23a79e0fd715b0ae564082d9f1e4e7a907a195d))
-* **_comp_{first_arg,count_args}:** count any arguments after -- ([9bfd760](https://github.com/scop/bash-completion/commit/9bfd760c1192da7b3d0d8f0f9c8bea8ed16f4e47))
-* **_comp_command_offset:** Support complete -C ([80450ca](https://github.com/scop/bash-completion/commit/80450ca06973535671dc76ffe5abd6e377418f76))
-* **_comp_compgen_fstypes:** avoid unexpected expansions ([a856d81](https://github.com/scop/bash-completion/commit/a856d811b73500550d317eff5fec487e41581add))
-* **_comp_compgen_help:** allow dots to connect names in longopt ([79dadfc](https://github.com/scop/bash-completion/commit/79dadfc7fa37be26c7b263b809687db0907ae71f))
-* **_comp_compgen_known_hosts:** work around bash-4.2 nounset ([d2860cb](https://github.com/scop/bash-completion/commit/d2860cb481be8f3cf97172cb1bf063da8f238e53))
-* **_comp_compgen_split:** work around nounset ([f488f96](https://github.com/scop/bash-completion/commit/f488f9615a58140dc610bf2d406f3fcf6b8d82da))
-* **_comp_compgen_term:** replace completions by default ([d3696a3](https://github.com/scop/bash-completion/commit/d3696a3f793b2e0b9a0940287b3ab3dd23ef247d))
-* **_comp_compgen_usergroup:** avoid directly overwriting COMPREPLY ([d380498](https://github.com/scop/bash-completion/commit/d3804982650ec4fc7fbb7f7cab5522709b43f52d))
-* **_comp_compgen:** do not inherit -a for explicitly specified var ([3c20766](https://github.com/scop/bash-completion/commit/3c20766a6248aec000eb55731dd6b159ecf45dc2))
-* **_comp_compgen:** explicitly exclude `cur` from the target variable ([5fe98f3](https://github.com/scop/bash-completion/commit/5fe98f3c30fa69d0921703c7c90522a28bb00737))
-* **_comp_count_args:** check optarg correctly ([874c503](https://github.com/scop/bash-completion/commit/874c5031986e23a3ca7843d216d7dde94b0f1d4b))
-* **_comp_count_args:** exclude <>& from wordbreaks as _comp_initialize ([521d2bb](https://github.com/scop/bash-completion/commit/521d2bb5330de4a721ae20d37d330190aa4beef0))
-* **_comp_count_args:** ignore empty $3 ([76eea74](https://github.com/scop/bash-completion/commit/76eea74581d4f404e817f686ea86236c8c75a9fc))
-* **_comp_count_args:** perform optarg check also on $3 ([21d3122](https://github.com/scop/bash-completion/commit/21d3122fa933169849e9743212248c80b7843abb))
-* **_comp_count_args:** skip reassembling cword and words ([3127703](https://github.com/scop/bash-completion/commit/3127703f12f3e82ddf3f950a801ab430024aca22))
-* **_comp_delimited:** treat delimiter as a fixed string ([571a0f7](https://github.com/scop/bash-completion/commit/571a0f70f39fed70b2db51e1624b2a0ee29f00c4))
-* **_comp_deprecate_func:** argument order in usage error message ([597f62f](https://github.com/scop/bash-completion/commit/597f62fe38627452f5330d40bc9004f2b3d4dda5))
-* **_comp_get_words:** empty prev if unavailable (localvar_inherit) ([d8b8eef](https://github.com/scop/bash-completion/commit/d8b8eef63602cb0e34837320938b0819363d7d87))
-* **_comp_initialize:** fix completions of redirections without space ([da16bf6](https://github.com/scop/bash-completion/commit/da16bf61c2604ea4efa9b2d125aedd2dd4acd4e5))
-* **_comp_initialize:** protect against "localvar_inherit" ([0cc8d83](https://github.com/scop/bash-completion/commit/0cc8d833011c0763eb00939ad9a94d525d87bcea))
-* **_comp_split,_comp_compgen:** strip periods from error message ([b3b6a7c](https://github.com/scop/bash-completion/commit/b3b6a7cf2865b3591ab571dc2563d1980a822ac5))
-* **_comp_split:** update error message for the correct options ([3c4a89c](https://github.com/scop/bash-completion/commit/3c4a89ce48ca29c0c6461d12519bbf78bcc1ca02))
-* **_comp_sysvdirs:** work around nounset ([da26178](https://github.com/scop/bash-completion/commit/da26178b9c7eaf11711b451ae292a01bd423a80c))
-* **_filedir_xspec:** clean up unused variable `tmp` ([67f1189](https://github.com/scop/bash-completion/commit/67f11892351b710b9b3609e138a0a2c9248c4422))
-* **_get_cword_at_cursor,cvs:** quote array length ([201239c](https://github.com/scop/bash-completion/commit/201239cb597a3d7d0165a5e37a093f063fe700d1))
-* **_get_first_arg:** remove invalid doccomment ([eb40f56](https://github.com/scop/bash-completion/commit/eb40f566cc9e3c5a845a12caf0f4344dab2a0b2c))
-* **_known_hosts:** use array for `options` (work around SC2178,SC2179) ([743d0a9](https://github.com/scop/bash-completion/commit/743d0a9be714c516dce23415e3a5c5f81d5d7bea))
-* **_mock,rpm:** avoid icase flag `s/reg/rep/i` of GNU sed ([33c18ce](https://github.com/scop/bash-completion/commit/33c18ce90df153dabb89813d472dacf5a6259b92))
-* **_service:** quote word ([c2d7fb7](https://github.com/scop/bash-completion/commit/c2d7fb73844531ccb10576ddd905fb058e00c88e))
-* **_slackpkg:** do not scan after cword ([ecd1384](https://github.com/scop/bash-completion/commit/ecd13849f76966d9e15607bdd604972279bb9cd8))
-* **7z:** remove redundant `printf '%s\n' "..."` ([20c2e32](https://github.com/scop/bash-completion/commit/20c2e322f8eb93240de73b62647e7ca2f7b8fa4f))
-* **ant:** work around custom IFS ([584e567](https://github.com/scop/bash-completion/commit/584e56748da32e8f17a713b14c23ea2b7c92a4dc))
-* **apt-cache:** check all the words ([84cfeda](https://github.com/scop/bash-completion/commit/84cfedabe958ad6f7cfc52525d79e9b801de4233))
-* **aptitude:** do not use non-POSIX BRE \w ([cd8c870](https://github.com/scop/bash-completion/commit/cd8c8701b60f17f9aecc27482f64f121821085ee))
-* **aspell:** use `_comp_expand_glob` against unexpected splitting ([58d5176](https://github.com/scop/bash-completion/commit/58d5176cba8bb25fe5348aadef100c083afa992f))
-* **bash_completion:** remove some unnecessary `-a` to `_comp_compgen` ([636bb7c](https://github.com/scop/bash-completion/commit/636bb7c4062c3e410904769f1fde4f5b14a12afc))
-* **bts:** update functions to generators and fix variable conflicts ([7d2867c](https://github.com/scop/bash-completion/commit/7d2867c01527c3037579fe24da62cccfdfd1883e))
-* **carton:** remove a branch never happening ([cd063f9](https://github.com/scop/bash-completion/commit/cd063f9a40e4dc85e0a9de7ceeac019cdac57449))
-* **chgrp:** fix typo `_comp_compgen{d => _}filedir` ([#1063](https://github.com/scop/bash-completion/issues/1063)) ([4c98ce5](https://github.com/scop/bash-completion/commit/4c98ce58b7686b9f23f14bf05e809d9cd1a5669c))
-* **compat:** find compat dir for prefix-install ([b6d06bc](https://github.com/scop/bash-completion/commit/b6d06bc47119fcfc47f10eed328ff54e95ddc14d))
-* **completions/*:** quote array assignments properly ([848aa41](https://github.com/scop/bash-completion/commit/848aa413273516529ccc163966f138ad3a6c53a0))
-* **completions/*:** scan until cword instead of ${#words[@]}-1 ([17e0cc3](https://github.com/scop/bash-completion/commit/17e0cc36fdb4c6543c7729419d6f736ee779db1f))
-* **completions/*:** work around localvar_inherit ([e3a871d](https://github.com/scop/bash-completion/commit/e3a871d2517f688d7fe7132f33e96669a71b6aa1))
-* **curl,koji:** use _comp_compgen_help ([f37f221](https://github.com/scop/bash-completion/commit/f37f221f3f191fec0d301815d276d830f6119186))
-* **curl,qemu:** avoid using POSIX character classes for mawk ([d60c530](https://github.com/scop/bash-completion/commit/d60c5306f918b370c74f5ba6d3100720be139ad6))
-* **curl:** colon handling for IPv6 address completions ([8508d1d](https://github.com/scop/bash-completion/commit/8508d1d8f6f3d50ac6fb45ec2eb0f05dcef8d817))
-* **cvs,mutt,pkg_delete:** quote prefix to remove for literal matching ([533903e](https://github.com/scop/bash-completion/commit/533903edd5d0752cb4b910c3bcc6d86a0e55d779))
-* **cvs:** avoid variable conflicts ([0d145c9](https://github.com/scop/bash-completion/commit/0d145c9f2852955848ca1855d9fae216ebbd78c3))
-* **dict:** nounset error when host/port not set ([57191e2](https://github.com/scop/bash-completion/commit/57191e2731eb307434c2f11813d7dea303458dce))
-* **dict:** protect splitting from custom IFS ([b31fe1e](https://github.com/scop/bash-completion/commit/b31fe1e3e1b3480d9dc6a469cae4e83ed204b382))
-* **dict:** work around bash-4.2 array nounset ([d76dd9e](https://github.com/scop/bash-completion/commit/d76dd9ea448b71e111763e8048df49dde797d85e))
-* **dict:** work around bash-4.3 ${v+"$@"} with custom IFS ([cc21298](https://github.com/scop/bash-completion/commit/cc212983a2b2523e5b62e9735c6dff5f011bb80a))
-* **dmypy:** protect against "localvar_inherit" ([768ce65](https://github.com/scop/bash-completion/commit/768ce656099879ba1b81de04b75db11679791c47))
-* **dpkg-source:** filter completions by `cur` ([dbcef6e](https://github.com/scop/bash-completion/commit/dbcef6e37313b00f00ca65397be6a061b1af3bb8))
-* **filedir:** work around bash-4.2 `compgen -f -- "''"` ([c8bb123](https://github.com/scop/bash-completion/commit/c8bb123abc0c148bfa078cf8bfe01bafc5cf50ff))
-* fix problems with `set -o nounset` ([9c3e196](https://github.com/scop/bash-completion/commit/9c3e1961928248da8a6dd8e327c3860f71eb7dff))
-* **gdb:** fix regression that fails to generate command names ([ca8e240](https://github.com/scop/bash-completion/commit/ca8e2405ae49c927f9c9d312aa0efdde3d231bf2))
-* **gdb:** remove duplicate candidates ([532fc05](https://github.com/scop/bash-completion/commit/532fc05a73b415369ce1987463d82d791ee72dc0))
-* **gdb:** use POSIX-compatible find expression ([73938cd](https://github.com/scop/bash-completion/commit/73938cd857c3a7fa884e24be7216d1c5b12d5a1c))
-* **gdb:** work around bash 4.4 ${v+"$@"} ([41236da](https://github.com/scop/bash-completion/commit/41236da411794133d08792df28207e2a77271c57))
-* **get_words:** work around bash-4.3 connected ${v+"$@"} ([81affbd](https://github.com/scop/bash-completion/commit/81affbd999a24f796f79fb5c1eec80e88b3a98d8))
-* **getent:** check noargopts ([6143f25](https://github.com/scop/bash-completion/commit/6143f257f1593c319504c2627fe01b4c94e90a48))
-* **getent:** work around localvar_inherit ([a12f438](https://github.com/scop/bash-completion/commit/a12f438ebf93d7427d1b5df7056ace8ec67e890c))
-* **gzip,isort:** fix typo `_comp_com{gp => pg}en` ([462feb3](https://github.com/scop/bash-completion/commit/462feb34d3b49f70a2451cbf724d14e59bfd8e0a))
-* **iperf,puppet:** use \{m,n\} instead of \? and \+ for POSIX sed ([3f0322b](https://github.com/scop/bash-completion/commit/3f0322b73d98c177ede1973ad1b84e66ee593ca9))
-* **iperf:** work around failglob with backslash in bash-5.0 ([979f04f](https://github.com/scop/bash-completion/commit/979f04f67c76395e21f77b7945639f2eeaa3b37f))
-* **ip:** Remove non-existent route completion ([3b9ce4d](https://github.com/scop/bash-completion/commit/3b9ce4dc0ba0a14d1d390f0e83c7b7b53a26b5a5))
-* **isql:** work around nounset ([cb7007a](https://github.com/scop/bash-completion/commit/cb7007af225369e5872280411bb6871b55f274a5))
-* **java,kldload:** use `_comp_compgen` for filename-based mod names ([81adc6c](https://github.com/scop/bash-completion/commit/81adc6ce741f69e936dfb0e1e891c372341814f2))
-* **java:** localize `cur` ([ec0068d](https://github.com/scop/bash-completion/commit/ec0068d13f3c98551771e4ada4335f131c2f0cb4))
-* **kcov,povray:** quote array expansions to avoid extra processing ([215edab](https://github.com/scop/bash-completion/commit/215edabcceece2b53becc78cf88a24fb120db299))
-* **kldload,mplayer,mutt:** work around nounset ([5330fbe](https://github.com/scop/bash-completion/commit/5330fbeecdd490aa79f1cf7ce320e1b27a776d69))
-* **kldunload:** remove unused -X option ([35017d2](https://github.com/scop/bash-completion/commit/35017d25acee6830d4c30485a1b2cba2f12e00ed))
-* **known_hosts_real:** match `*.pub` instead of `*pub` ([470a644](https://github.com/scop/bash-completion/commit/470a644be3144d9fbd7d58d99d1c3fd73c773b9f))
-* **known_hosts_real:** use `_comp_expand_glob` to avoid failglob ([672215e](https://github.com/scop/bash-completion/commit/672215e010d5f78085caf61cecda620b4c67f4ae))
-* **known_hosts_real:** work around nounset ([07c619a](https://github.com/scop/bash-completion/commit/07c619a56950de1960312ae24411c27688e5aa1a))
-* **lilo,rpcdebug,slapt-{get,src}:** work around nounset ([cfc3eda](https://github.com/scop/bash-completion/commit/cfc3eda9575a8b0b48a531652875206db36957d5))
-* **lvm:** replace array slices with existing utility ([ea49840](https://github.com/scop/bash-completion/commit/ea498402ccf07eb1e4acef0ad40a7c188e567145))
-* **lvm:** update call to sub-command ([30494f7](https://github.com/scop/bash-completion/commit/30494f7b426c73b1a6a616f63d3510027c6fb02e))
-* **make:** handle multiple short options in skipping arguments ([24c80c9](https://github.com/scop/bash-completion/commit/24c80c91b7183ea5fcc9f2e7bc7ded303ea57d0a))
-* **make:** typo fix in a code comment ([e72cc82](https://github.com/scop/bash-completion/commit/e72cc826534a0ea9dc840546134c19962697c3a0))
-* **mdadm,update-alternatives:** fix leak variable ([14cd53b](https://github.com/scop/bash-completion/commit/14cd53bb38d0d0ef91bf82731e8946551f15023a))
-* **medusa:** filter completions by the current word `cur` ([f3ae706](https://github.com/scop/bash-completion/commit/f3ae706e114c4924416c50cca90473e6ce98ae20))
-* **mr:** avoid ${var/pat/$'...'} for compat42 in bash >= 4.3 ([b5ae5fa](https://github.com/scop/bash-completion/commit/b5ae5fada8b788885b0fd65cca34b85672f08189))
-* **mr:** exactly match command names ([800b103](https://github.com/scop/bash-completion/commit/800b10372e383124856c37b505d5dc9232eb1e45))
-* **mutt:** avoid unexpected word splitting ([3183e67](https://github.com/scop/bash-completion/commit/3183e67c72fcf5ba3d713de59a5d6898a9a64952))
-* **mutt:** fix use of regex in the glob context ([63924e6](https://github.com/scop/bash-completion/commit/63924e67527e5fa7698ac0610c7fd90c7ba36ecf))
-* **mutt:** rewrite ${cur/#!/X} to X${cur:1} against patsub_replacement ([6b8f82b](https://github.com/scop/bash-completion/commit/6b8f82b44e2308db66bc10e4f3529fe0ca5137e5))
-* **mutt:** use _comp_dequote for safe eval ([f98379d](https://github.com/scop/bash-completion/commit/f98379d33ee376df7a7f7de6fb85af8fffb469ee))
-* **openssl:** avoid variable conflicts ([a31906c](https://github.com/scop/bash-completion/commit/a31906cd2886b51e74d5d1bcbae3528a0f9f135b))
-* **openssl:** fix variable `i` leak ([83844b7](https://github.com/scop/bash-completion/commit/83844b7df11ad4ca02bb5da473fa4c5e8e3df80d))
-* **perl:** fix ineffective condition in an awk script ([302dc52](https://github.com/scop/bash-completion/commit/302dc52b9b02dc9a8fa9b1833012b3c4f96b6d7b))
-* **perl:** helper call regression from 01611dd3d ([b85263a](https://github.com/scop/bash-completion/commit/b85263a6de7f8e60f09489caac3f9a0d613e804f))
-* **pgrep:** do not rely on uncontrolled IFS ([99e38b2](https://github.com/scop/bash-completion/commit/99e38b27424a53f901ec274269f5646bb4b02850))
-* **portinstall:** use awk and _comp_compgen to filter completions ([791f56c](https://github.com/scop/bash-completion/commit/791f56c62656ba19c4db804b7ccf8c2e8ba1d55a))
-* **povray,sbopkg:** check filetype ([434eb08](https://github.com/scop/bash-completion/commit/434eb0853ed25c8730a38d5c3afbac170b397153))
-* **povray:** process each element against patsub_replacement ([0afc2e4](https://github.com/scop/bash-completion/commit/0afc2e4a5db45b569827ca3bbef90f70bc7e74f5))
-* **povray:** quote an argument properly ([0a240bd](https://github.com/scop/bash-completion/commit/0a240bd958a8aed9ef4251d0b223c42c60a77125))
-* **ps,ss:** avoid extra expansions by -W "$(...)" in _comp_delimited ([cb347cb](https://github.com/scop/bash-completion/commit/cb347cb208c5708e30aa3d847849aa6ce71ba814))
-* **pydoc:** specify -a to _comp_compgen_filedir ([34a91e9](https://github.com/scop/bash-completion/commit/34a91e9425992262913cbacf36706618a6f99bd4))
-* **pytest:** do not filter underscores from parsed option arg choices ([ea13241](https://github.com/scop/bash-completion/commit/ea13241b2aaa9361ba6d701aaadd8f4ce39dc28a))
-* **python:** avoid variable conflicts ([bef94c3](https://github.com/scop/bash-completion/commit/bef94c39b9fac23655c8b50181d7834869d72702))
-* **python:** complete filenames for script arguments ([#1018](https://github.com/scop/bash-completion/issues/1018)) ([397a49d](https://github.com/scop/bash-completion/commit/397a49d1c3a4faa5e15639d2852828f99b659bcc))
-* **python:** complete micropython and pyston script args consistently ([5b60ccc](https://github.com/scop/bash-completion/commit/5b60ccc1ee573637263bdaac070065af1406de4d))
-* **qdbus:** remove cur and all the rest arguments ([531b751](https://github.com/scop/bash-completion/commit/531b75142dc812a37b638de5c272c2356506fcc2))
-* replace \s with [[:space:]] for POSIX sed/awk ([1989ba9](https://github.com/scop/bash-completion/commit/1989ba9ad3de5cf33da3c9623fa87be5194fac08))
-* **ri:** avoid interference on existing COMPREPLY ([0a9d931](https://github.com/scop/bash-completion/commit/0a9d9319d50db21e0ca0051c19b9b3375790d353))
-* **ri:** fix wrongly quoted options to compgen ([5248bbf](https://github.com/scop/bash-completion/commit/5248bbf475d275bd6fc743d62f6f7f3ab0c30a39))
-* **ri:** properly split methods ([910a5a0](https://github.com/scop/bash-completion/commit/910a5a07c0f43095134c97c6b10db9d05505c3ef))
-* **ri:** split classes using `_comp_split` ([c95baa1](https://github.com/scop/bash-completion/commit/c95baa12d7879c81967b6dc9df896255d3253781))
-* **ri:** work around localvar_inherit ([9d6ff68](https://github.com/scop/bash-completion/commit/9d6ff689f44a2e560cbb643607f87551e7a88190))
-* **sbopkg:** add `;` mandatory before `}` in POSIX sed ([b286d53](https://github.com/scop/bash-completion/commit/b286d53dec9e7fb5edb513afa8bd60f8c0e9b68c))
-* **sbopkg:** work around nounset ([9709bdf](https://github.com/scop/bash-completion/commit/9709bdf226996878760ad87759f0011ff8587a3b))
-* **scp:** `nounset` mode error on unknown suboption, bash 4.2 ([82ca8d9](https://github.com/scop/bash-completion/commit/82ca8d924c4514f6570861d97b1ed953cbf9fe11))
-* **ssh-copy-id:** call ssh, not -copy-id for suboption completion check ([473278f](https://github.com/scop/bash-completion/commit/473278faed2f6d7d894dc674e71d1cef41022b6c))
-* **ssh-keygen:** call ssh, not -keygen to resolve supported protocols ([d569ea2](https://github.com/scop/bash-completion/commit/d569ea26389824b73732157947193efaea5f4ba8))
-* **ssh-keygen:** first arg to ssh query for protocol versions ([8a0a71e](https://github.com/scop/bash-completion/commit/8a0a71e449b5458f89fbc55b0ab7d6f6bf6656e9))
-* **ssh:** avoid variable conflicts ([f2df91d](https://github.com/scop/bash-completion/commit/f2df91d378004780d5237ab89faea2d6789169c0))
-* **ssh:** fix wrong quoting inside compgen -W ([febb3b3](https://github.com/scop/bash-completion/commit/febb3b3257fca6402fc4c33c4de293bbf962580c))
-* **ssh:** remove -a of generators ([55c5c45](https://github.com/scop/bash-completion/commit/55c5c459387e54ecdc869121fa97242e92ab87a8))
-* **ssh:** remove unnecessary -a to _comp_compgen ([992f28e](https://github.com/scop/bash-completion/commit/992f28e73c82f3157e346845ba9e440b7f3d8f22))
-* **ssh:** resolve relative ssh_config Include correctly ([4ac86e8](https://github.com/scop/bash-completion/commit/4ac86e84e55e793ba468c8cb6111510c9831377b))
-* **ssh:** use `_comp_compgen` for `_comp_xfunc_ssh_identityfile` ([05e70ed](https://github.com/scop/bash-completion/commit/05e70ede40dc4b50cdeb67bfa8484af53d24f995))
-* **ssh:** work around bash-4.2 nounset ([4447f83](https://github.com/scop/bash-completion/commit/4447f83c5d72823f336e3eefab2e8e10e080711b))
-* **ssh:** work around bash-4.2 nounset ([d0695d0](https://github.com/scop/bash-completion/commit/d0695d0bc9d44d851d41b5c7e123ab6b95f29e81))
-* **sudo:** use $1 (sudo) as $root_command ([329ca0e](https://github.com/scop/bash-completion/commit/329ca0eefd540b78e5fc287c2a4a2e2afdbfb45d))
-* **svcadm:** fix ineffective IFS for splitting ([1fd456e](https://github.com/scop/bash-completion/commit/1fd456e7435b88811b82809dc5845ee53ff7aafb))
-* **svcadm:** use the first matching name as command ([1870d5e](https://github.com/scop/bash-completion/commit/1870d5e0a67650a67c19895aefaae79eb2d6d76e))
-* **sysbench:** fix extraction of test-name option ([cc246a1](https://github.com/scop/bash-completion/commit/cc246a1b7d0433996c99534f64e0363170ac00cd))
-* **timeout:** always treat word after duration as command ([0d0531b](https://github.com/scop/bash-completion/commit/0d0531b254b03510f5dfa422a4198c33b5becd54))
-* **tipc:** remove filtered-out elements ([75b36b2](https://github.com/scop/bash-completion/commit/75b36b20b57e67a253d0c2622e88ba84ccc3bc25))
-* **update-alternatives:** quote dirname ([1205ed1](https://github.com/scop/bash-completion/commit/1205ed1958fa914faa8ccec778079e3f0ea2945b))
-* **update-alternatives:** suppress error for non-existent directory ([adbdab8](https://github.com/scop/bash-completion/commit/adbdab8fb5620e208826256e66851a1343f09e75))
-* **update-alternatives:** work around localvar_inherit ([1d9e19c](https://github.com/scop/bash-completion/commit/1d9e19cd2ae3650aa81512dc2ab811a80c16ca33))
-* **upgradepkg:** use `_comp_compgen` for `_comp_cmd_upgradepkg` ([a0973d7](https://github.com/scop/bash-completion/commit/a0973d77e8a3706490e33ba0f807727250b95c0e))
-* use _comp_compgen_split to avoid extra expansions by -W "$(...)" ([49997d0](https://github.com/scop/bash-completion/commit/49997d0b2ff4fbbea37558570632e096d777ee54))
-* use `_comp_compgen_split` to split and filter words ([158b8ba](https://github.com/scop/bash-completion/commit/158b8ba1de91913108507ae163611a44ae4871b0))
-* use `_comp_compgen_split` while keeping filtering by $cur ([a00ee19](https://github.com/scop/bash-completion/commit/a00ee19962e78f51a12b83bb1b11b89dc7512b22))
-* use `_comp_compgen` for word list ([83f033f](https://github.com/scop/bash-completion/commit/83f033f798c0fefbc9f37149d3bd40b0f238eabc))
-* use `_comp_split` while keeping filtering by $cur ([509e642](https://github.com/scop/bash-completion/commit/509e642d42a696a5737c94dc296c69ed60a4dd3b))
-* use compgen -P prefix -W '"${arr[@]}"' against patsub_replacement ([45d036a](https://github.com/scop/bash-completion/commit/45d036ad804973a4b1916e818a73421435db444d))
-* use XPG4 awk in Solaris ([cdd6da9](https://github.com/scop/bash-completion/commit/cdd6da9c77c7c99cab0aed7b9d7a5e4c0c5e0c78))
-* **wol:** filter IP addresses by `cur` ([c3505c5](https://github.com/scop/bash-completion/commit/c3505c518f9d2695f678d82a1efcf35118af08ec))
-* **wtf:** quote array assignment ([44c1d12](https://github.com/scop/bash-completion/commit/44c1d1292fdb840640a848aab6b2827002477ee9))
-* **xfreerdp:** support the new form of the option /list:kbd ([d8cadfe](https://github.com/scop/bash-completion/commit/d8cadfea1036cb558f5c6f663843a19eaa3b5025))
-* **xfunc ssh identityfile:** localize change to cur ([76b5726](https://github.com/scop/bash-completion/commit/76b572650f224e2e3b85918944af0bc8dfb49952))
-
-
-### Performance Improvements
-
-* **_comp_count_args:** skip reinitializing cword and words ([29398ef](https://github.com/scop/bash-completion/commit/29398efab4dd06fceb7c94c5329c5002b14cb8b4))
-* **mutt:** return earlier on empty `cur` ([a244587](https://github.com/scop/bash-completion/commit/a244587e3c2d83bbef090438b329478da1896a4c))
-* **portinstall:** return earlier for -lLo and non-existent file ([395e463](https://github.com/scop/bash-completion/commit/395e463d7e22bfb8b8b9f8ce4884ff7a979b2e35))
-* **vncviewer:** set nocasematch inside subshell ([5ed0020](https://github.com/scop/bash-completion/commit/5ed0020f4ec39c5ff9994882cae9f04eb45e4ed7))
-
## 2.10 (2019-12-05)
* README: link to cygwin package ([8d60fd3](https://www.github.com/scop/bash-completion/commit/8d60fd32be777e4c6e734c1dac431b39b53fb216))
diff --git a/bash_completion b/bash_completion
index 42a5dca..2bc27cc 100644
--- a/bash_completion
+++ b/bash_completion
@@ -25,7 +25,7 @@
BASH_COMPLETION_VERSINFO=(
2 # x-release-please-major
- 13 # x-release-please-minor
+ 14 # x-release-please-minor
0 # x-release-please-patch
)
@@ -649,7 +649,7 @@ _comp_compgen()
else
_generator=("_comp_compgen_$1")
fi
- if ! declare -F "${_generator[0]}" &>/dev/null; then
+ if ! declare -F -- "${_generator[0]}" &>/dev/null; then
printf 'bash_completion: %s: unrecognized generator `%s'\'' (function %s not found)\n' "$FUNCNAME" "$1" "${_generator[0]}" >&2
return 2
fi
@@ -1737,7 +1737,7 @@ _comp_compgen_available_interfaces()
fi
} 2>/dev/null | _comp_awk \
'/^[^ \t]/ { if ($1 ~ /^[0-9]+:/) { print $2 } else { print $1 } }')" &&
- _comp_compgen -U generated set "${generated[@]%%[[:punct:]]*}"
+ _comp_compgen -U generated set "${generated[@]%:}"
}
# Echo number of CPUs, falling back to 1 on failure.
@@ -2201,7 +2201,7 @@ _comp_realcommand()
{
REPLY=""
local file
- file=$(type -P "$1") || return $?
+ file=$(type -P -- "$1") || return $?
if type -p realpath >/dev/null; then
REPLY=$(realpath "$file")
elif type -p greadlink >/dev/null; then
@@ -2765,18 +2765,18 @@ _comp_command_offset()
else
_comp_dequote "${COMP_WORDS[0]}" || REPLY=${COMP_WORDS[0]}
local cmd=$REPLY compcmd=$REPLY
- local cspec=$(complete -p "$cmd" 2>/dev/null)
+ local cspec=$(complete -p -- "$cmd" 2>/dev/null)
# If we have no completion for $cmd yet, see if we have for basename
if [[ ! $cspec && $cmd == */* ]]; then
- cspec=$(complete -p "${cmd##*/}" 2>/dev/null)
+ cspec=$(complete -p -- "${cmd##*/}" 2>/dev/null)
[[ $cspec ]] && compcmd=${cmd##*/}
fi
# If still nothing, just load it for the basename
if [[ ! $cspec ]]; then
compcmd=${cmd##*/}
_comp_load -D -- "$compcmd"
- cspec=$(complete -p "$compcmd" 2>/dev/null)
+ cspec=$(complete -p -- "$compcmd" 2>/dev/null)
fi
local retry_count=0
@@ -2809,7 +2809,7 @@ _comp_command_offset()
# state of COMPREPLY is discarded.
COMPREPLY=()
- cspec=$(complete -p "$compcmd" 2>/dev/null)
+ cspec=$(complete -p -- "$compcmd" 2>/dev/null)
# Note: When completion spec is removed after 124, we
# do not generate any completions including the default
@@ -2991,7 +2991,7 @@ _comp_complete_longopt()
# makeinfo and texi2dvi are defined elsewhere.
complete -F _comp_complete_longopt \
a2ps awk base64 bash bc bison cat chroot colordiff cp \
- csplit cut date df diff dir du enscript env expand fmt fold gperf \
+ csplit cut date df diff dir du enscript expand fmt fold gperf \
grep grub head irb ld ldd less ln ls m4 mkdir mkfifo mknod \
mv netstat nl nm objcopy objdump od paste pr ptx readelf rm rmdir \
sed seq shar sort split strip sum tac tail tee \
@@ -3147,13 +3147,13 @@ _comp_load()
if [[ $cmd == \\* ]]; then
cmd=${cmd:1}
# If we already have a completion for the "real" command, use it
- $(complete -p "$cmd" 2>/dev/null || echo false) "\\$cmd" && return 0
+ $(complete -p -- "$cmd" 2>/dev/null || echo false) "\\$cmd" && return 0
backslash=\\
fi
# Resolve absolute path to $cmd
local REPLY pathcmd origcmd=$cmd
- if pathcmd=$(type -P "$cmd"); then
+ if pathcmd=$(type -P -- "$cmd"); then
_comp_abspath "$pathcmd"
cmd=$REPLY
fi
@@ -3222,18 +3222,18 @@ _comp_load()
elif [[ -e $compfile ]] && . "$compfile" "$cmd" "$@"; then
# At least $cmd is expected to have a completion set when
# we return successfully; see if it already does
- if compspec=$(complete -p "$cmd" 2>/dev/null); then
+ if compspec=$(complete -p -- "$cmd" 2>/dev/null); then
# $cmd is the case in which we do backslash processing
[[ $backslash ]] && eval "$compspec \"\$backslash\$cmd\""
# If invoked without path, that one should be set, too
# ...but let's not overwrite an existing one, if any
[[ $origcmd != */* ]] &&
- ! complete -p "$origcmd" &>/dev/null &&
+ ! complete -p -- "$origcmd" &>/dev/null &&
eval "$compspec \"\$origcmd\""
return 0
fi
# If not, see if we got one for $cmdname
- if [[ $cmdname != "$cmd" ]] && compspec=$(complete -p "$cmdname" 2>/dev/null); then
+ if [[ $cmdname != "$cmd" ]] && compspec=$(complete -p -- "$cmdname" 2>/dev/null); then
# Use that for $cmd too, if we have a full path to it
[[ $cmd == /* ]] && eval "$compspec \"\$cmd\""
return 0
@@ -3281,7 +3281,7 @@ _comp_xfunc()
local xfunc_name=$2
[[ $xfunc_name == _* ]] ||
xfunc_name=_comp_xfunc_${1//[^a-zA-Z0-9_]/_}_$xfunc_name
- declare -F "$xfunc_name" &>/dev/null || _comp_load "$1"
+ declare -F -- "$xfunc_name" &>/dev/null || _comp_load -- "$1"
"$xfunc_name" "${@:3}"
}
diff --git a/completions/.gitignore b/completions/.gitignore
index 0837060..c3bf546 100644
--- a/completions/.gitignore
+++ b/completions/.gitignore
@@ -28,6 +28,7 @@
/autoupdate
/avahi-browse-domains
/b2sum
+/_bao
/_black
/_blackd
/bmake
@@ -68,6 +69,7 @@
/dfutool
/_diesel
/display
+/_dlv
/_docker
/dpkg-deb
/dpkg-query
@@ -115,6 +117,7 @@
/gpgv2
/gssdp-device-sniffer
/gtar
+/_gup
/hciattach
/hciconfig
/hd
@@ -131,6 +134,7 @@
/ifstatus
/_ignite
/import
+/_incus
/_infracost
/inotifywatch
/insmod.static
@@ -313,6 +317,7 @@
/_tkn
/_tkn-pac
/tightvncviewer
+/_tofu
/tracepath6
/_trivy
/typeset
@@ -348,4 +353,5 @@
/xpovray
/xvnc4viewer
/ypcat
+/_zarf
/_zitadel
diff --git a/completions/Makefile.am b/completions/Makefile.am
index ed1f215..219ea10 100644
--- a/completions/Makefile.am
+++ b/completions/Makefile.am
@@ -100,6 +100,7 @@ bashcomp_DATA = 2to3 \
ebtables \
ecryptfs-migrate-home \
_eject \
+ env \
eog \
ether-wake \
evince \
@@ -545,6 +546,7 @@ CLEANFILES = \
autossh \
autoupdate \
avahi-browse-domains \
+ _bao \
_black \
_blackd \
bmake \
@@ -585,6 +587,7 @@ CLEANFILES = \
dfutool \
_diesel \
display \
+ _dlv \
_docker \
dpkg-deb \
dpkg-query \
@@ -644,6 +647,7 @@ CLEANFILES = \
gpgv2 \
gssdp-device-sniffer \
gtar \
+ _gup \
hciattach \
hciconfig \
hd \
@@ -660,6 +664,7 @@ CLEANFILES = \
ifstatus \
_ignite \
import \
+ _incus \
_infracost \
inotifywatch \
insmod.static \
@@ -876,6 +881,7 @@ CLEANFILES = \
_tkn \
_tkn-pac \
tightvncviewer \
+ _tofu \
tracepath6 \
_trivy \
typeset \
@@ -911,6 +917,7 @@ CLEANFILES = \
xpovray \
xvnc4viewer \
ypcat \
+ _zarf \
_zitadel
symlinks: $(DATA)
@@ -998,6 +1005,7 @@ symlinks: $(DATA)
_constellation \
_crc \
_datree \
+ _dlv \
_docker \
_gardenctl \
_gh-label \
@@ -1005,8 +1013,10 @@ symlinks: $(DATA)
_go-licenses \
_gopherjs \
_goreleaser \
+ _gup \
_helm \
_hugo \
+ _incus \
_ignite \
_istioctl \
_k3s \
@@ -1047,6 +1057,7 @@ symlinks: $(DATA)
_upctl \
_vacuum \
_virtctl \
+ _zarf \
_zitadel
$(ss) gpgv \
gpgv2
@@ -1198,7 +1209,7 @@ symlinks: $(DATA)
$(ss) update-alternatives \
alternatives
$(ss) _vault \
- _consul _nomad _packer _terraform
+ _bao _consul _nomad _packer _terraform _tofu
$(ss) vipw \
vigr
$(ss) vncviewer \
diff --git a/completions/_nox b/completions/_nox
index 40b8bb1..6293109 100644
--- a/completions/_nox
+++ b/completions/_nox
@@ -4,8 +4,8 @@
# This serves as a fallback in case the completion is not installed otherwise.
eval -- "$(
- bin_path=$(type -P "$1" 2>/dev/null | command sed 's,/[^/]*$,,')
- [[ $bin_path ]] && PATH=$bin_path${PATH:+:$PATH}
+ pathcmd=$(type -P -- "$1" 2>/dev/null | command sed 's,/[^/]*$,,')
+ [[ $pathcmd ]] && PATH=$pathcmd${PATH:+:$PATH}
register-python-argcomplete --shell bash "$1" 2>/dev/null ||
register-python-argcomplete3 --shell bash "$1" 2>/dev/null
)"
diff --git a/completions/add_members b/completions/add_members
index d691884..d83957a 100644
--- a/completions/add_members
+++ b/completions/add_members
@@ -24,7 +24,7 @@ _comp_cmd_add_members()
else
# Prefer `list_lists` in the same dir as command
local pathcmd
- pathcmd=$(type -P "$1") && local PATH=${pathcmd%/*}:$PATH
+ pathcmd=$(type -P -- "$1") && local PATH=${pathcmd%/*}:$PATH
_comp_xfunc list_lists mailman_lists
fi
diff --git a/completions/apt-get b/completions/apt-get
index f59c62b..4c62b25 100644
--- a/completions/apt-get
+++ b/completions/apt-get
@@ -33,7 +33,7 @@ _comp_cmd_apt_get()
source)
# Prefer `apt-cache` in the same dir as command
local pathcmd
- pathcmd=$(type -P "$1") && local PATH=${pathcmd%/*}:$PATH
+ pathcmd=$(type -P -- "$1") && local PATH=${pathcmd%/*}:$PATH
_comp_compgen -x apt-cache packages
_comp_compgen -a split -- "$(apt-cache dumpavail |
_comp_awk '$1 == "Source:" { print $2 }' | sort -u)"
@@ -79,7 +79,7 @@ _comp_cmd_apt_get()
--target-release | --default-release | -${noargopts}t)
# Prefer `apt-cache` in the same dir as command
local pathcmd
- pathcmd=$(type -P "$1") && local PATH=${pathcmd%/*}:$PATH
+ pathcmd=$(type -P -- "$1") && local PATH=${pathcmd%/*}:$PATH
_comp_compgen_split -- "$(apt-cache policy | command sed -ne \
's/^ *release.*[ ,]o=\(Debian\|Ubuntu\),a=\(\w*\).*/\2/p')"
return
diff --git a/completions/arch b/completions/arch
index 7ca9738..e03056f 100644
--- a/completions/arch
+++ b/completions/arch
@@ -34,7 +34,7 @@ _comp_have_command mailmanctl &&
1)
# Prefer `list_lists` in the same dir as command
local pathcmd
- pathcmd=$(type -P "$1") && local PATH=${pathcmd%/*}:$PATH
+ pathcmd=$(type -P -- "$1") && local PATH=${pathcmd%/*}:$PATH
_comp_compgen -x list_lists mailman_lists
;;
2)
diff --git a/completions/change_pw b/completions/change_pw
index 819c082..dd5dd52 100644
--- a/completions/change_pw
+++ b/completions/change_pw
@@ -9,7 +9,7 @@ _comp_cmd_change_pw()
-l | --listname)
# Prefer `list_lists` in the same dir as command
local pathcmd
- pathcmd=$(type -P "$1") && local PATH=${pathcmd%/*}:$PATH
+ pathcmd=$(type -P -- "$1") && local PATH=${pathcmd%/*}:$PATH
_comp_compgen -x list_lists mailman_lists
return
;;
diff --git a/completions/check_db b/completions/check_db
index 6480a11..851829e 100644
--- a/completions/check_db
+++ b/completions/check_db
@@ -10,7 +10,7 @@ _comp_cmd_check_db()
else
# Prefer `list_lists` in the same dir as command
local pathcmd
- pathcmd=$(type -P "$1") && local PATH=${pathcmd%/*}:$PATH
+ pathcmd=$(type -P -- "$1") && local PATH=${pathcmd%/*}:$PATH
_comp_compgen -x list_lists mailman_lists
fi
diff --git a/completions/clone_member b/completions/clone_member
index 01f87e6..46514be 100644
--- a/completions/clone_member
+++ b/completions/clone_member
@@ -9,7 +9,7 @@ _comp_cmd_clone_member()
-l | --listname)
# Prefer `list_lists` in the same dir as command
local pathcmd
- pathcmd=$(type -P "$1") && local PATH=${pathcmd%/*}:$PATH
+ pathcmd=$(type -P -- "$1") && local PATH=${pathcmd%/*}:$PATH
_comp_compgen -x list_lists mailman_lists
return
;;
diff --git a/completions/config_list b/completions/config_list
index d75ef2e..96a7ab8 100644
--- a/completions/config_list
+++ b/completions/config_list
@@ -20,7 +20,7 @@ _comp_cmd_config_list()
else
# Prefer `list_lists` in the same dir as command
local pathcmd
- pathcmd=$(type -P "$1") && local PATH=${pathcmd%/*}:$PATH
+ pathcmd=$(type -P -- "$1") && local PATH=${pathcmd%/*}:$PATH
_comp_xfunc list_lists mailman_lists
fi
diff --git a/completions/cryptsetup b/completions/cryptsetup
index 9d23bfa..dbe2a2c 100644
--- a/completions/cryptsetup
+++ b/completions/cryptsetup
@@ -22,7 +22,7 @@ _comp_cmd_cryptsetup()
--skip | --iter-time | --timeout | --tries | -${noargopts}[chslSbopitT])
return
;;
- --key-file | --master-key-file | --header-backup-file | -${noargopts}d)
+ --key-file | --master-key-file | --header | --header-backup-file | -${noargopts}d)
_comp_compgen_filedir
return
;;
diff --git a/completions/env b/completions/env
new file mode 100644
index 0000000..9576510
--- /dev/null
+++ b/completions/env
@@ -0,0 +1,56 @@
+# bash completion for env(1) -*- shell-script -*-
+
+_comp_cmd_env()
+{
+ local cur prev words cword was_split comp_args
+ _comp_initialize -s -- "$@" || return
+
+ local i noargopts='!(-*|*[uCS]*)'
+ for ((i = 1; i <= cword; i++)); do
+ if [[ ${words[i]} != -* || ${words[i]} == -?(-) && i -lt cword ]]; then
+ [[ ${words[i]} == -?(-) ]] && ((i++))
+ for (( ; i <= cword; i++)); do
+ if [[ ${words[i]} != *=* ]]; then
+ _comp_command_offset "$i"
+ return
+ fi
+ done
+ break
+ fi
+
+ # shellcheck disable=SC2254
+ [[ ${words[i]} == @(--@(unset|chdir|split-string)|-${noargopts}[uCS]) ]] &&
+ ((i++))
+ done
+
+ # shellcheck disable=SC2254
+ case "$prev" in
+ --unset | -${noargopts}u)
+ _comp_compgen -- -A variable
+ return
+ ;;
+ --chdir | -${noargopts}C)
+ _comp_compgen_filedir -d
+ return
+ ;;
+ --split-string | -${noargopts}S)
+ return
+ ;;
+ --block-signal | --default-signal | --ignore-signal)
+ # TODO signals, but only if completing with a =SIG
+ ;;
+ esac
+
+ [[ $was_split ]] && return
+
+ _comp_variable_assignments "$cur" && return
+
+ if [[ $cur == -* ]]; then
+ _comp_compgen_help || _comp_compgen_usage
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ return
+ fi
+} &&
+ complete -F _comp_cmd_env env
+
+# ex: filetype=sh
diff --git a/completions/find_member b/completions/find_member
index d2620e8..35214aa 100644
--- a/completions/find_member
+++ b/completions/find_member
@@ -9,7 +9,7 @@ _comp_cmd_find_member()
-l | -x | --listname | --exclude)
# Prefer `list_lists` in the same dir as command
local pathcmd
- pathcmd=$(type -P "$1") && local PATH=${pathcmd%/*}:$PATH
+ pathcmd=$(type -P -- "$1") && local PATH=${pathcmd%/*}:$PATH
_comp_compgen -x list_lists mailman_lists
return
;;
diff --git a/completions/fio b/completions/fio
index 7fbcdd4..51eb74e 100644
--- a/completions/fio
+++ b/completions/fio
@@ -2,7 +2,7 @@
_comp_cmd_fio__compgen_engines()
{
- _comp_compgen_split -l -- "$("$1" --enghelp 2>/dev/null | command sed -ne '/^[[:space:]]/p'))"
+ _comp_compgen_split -F $'\t\n' -- "$("$1" --enghelp 2>/dev/null | command sed -ne '/^[[:space:]]/p')"
}
_comp_cmd_fio()
diff --git a/completions/inject b/completions/inject
index 4b46921..4dc3bc4 100644
--- a/completions/inject
+++ b/completions/inject
@@ -9,7 +9,7 @@ _comp_cmd_inject()
-l | --listname)
# Prefer `list_lists` in the same dir as command
local pathcmd
- pathcmd=$(type -P "$1") && local PATH=${pathcmd%/*}:$PATH
+ pathcmd=$(type -P -- "$1") && local PATH=${pathcmd%/*}:$PATH
_comp_compgen -x list_lists mailman_lists
return
;;
diff --git a/completions/ip b/completions/ip
index 09bec5b..3b495b6 100644
--- a/completions/ip
+++ b/completions/ip
@@ -121,6 +121,13 @@ _comp_cmd_ip()
add)
# TODO
;;
+ afstats)
+ if [[ $prev == dev ]]; then
+ _comp_compgen_available_interfaces
+ else
+ _comp_compgen -- -W 'dev'
+ fi
+ ;;
delete)
if [[ $prev == type ]]; then
_comp_cmd_ip__link_types "$1"
@@ -129,7 +136,7 @@ _comp_cmd_ip()
_comp_compgen -a -- -W 'type'
fi
;;
- set)
+ set | change)
if ((cword - subcword == 1)); then
_comp_compgen_available_interfaces
else
@@ -173,7 +180,7 @@ _comp_cmd_ip()
;;
*)
((cword == subcword)) &&
- _comp_compgen -- -W 'help add delete set show property'
+ _comp_compgen -- -W 'help add change delete set show property afstats'
;;
esac
;;
@@ -181,13 +188,24 @@ _comp_cmd_ip()
a | addr | address)
case $subcmd in
add | change | replace)
- if [[ $prev == dev ]]; then
- _comp_compgen_available_interfaces
- elif [[ $prev == scope ]]; then
- _comp_cmd_ip__iproute2_etc rt_scopes
- else
- : # TODO
- fi
+ case $prev in
+ dev | label)
+ _comp_compgen_available_interfaces
+ ;;
+ scope)
+ _comp_cmd_ip__iproute2_etc rt_scopes
+ ;;
+ broadcast | anycast | peer | metric)
+ :
+ ;;
+ valid_lft | preferred_lft)
+ _comp_compgen -- -W 'forever'
+ ;;
+ *)
+ _comp_compgen -- -W 'anycast autojoin broadcast dev home label scope nodad metric mngtmpaddr
+ noprefixroute valid_lft peer preferred_lft'
+ ;;
+ esac
;;
del)
if [[ $prev == dev ]]; then
@@ -241,15 +259,45 @@ _comp_cmd_ip()
r | route)
case $subcmd in
- list | flush)
- if [[ $prev == proto ]]; then
- _comp_cmd_ip__iproute2_etc rt_protos
- else
- : # TODO
- fi
+ list | flush | save)
+ case "$prev" in
+ proto)
+ _comp_cmd_ip__iproute2_etc rt_protos
+ ;;
+ table)
+ _comp_compgen -- -W 'local main default all'
+ ;;
+ scope)
+ _comp_cmd_ip__iproute2_etc rt_scopes
+ ;;
+ root | match | exact | vrf)
+ : # TODO: Can we complete vrf?
+ ;;
+ type)
+ _comp_compgen -- -W 'unicast local broadcast multicast throw unreachable prohibit blackhole nat'
+ ;;
+ *)
+ _comp_compgen -- -W 'root match exact table vrf proto type scope'
+ ;;
+ esac
;;
get)
- # TODO
+ case $prev in
+ as | dport | from | sport | ipproto | vrf | to | tos | mark)
+ : # TODO: Can we complete ipproto, tos, or vrf?
+ ;;
+ uid)
+ _comp_compgen_uids
+ ;;
+ oif | iif | dev)
+ _comp_compgen_available_interfaces -a
+ ;;
+ *)
+ # TODO: 'iif' only works if also 'from' is specified
+ _comp_compgen -- -W 'as connected dport from fibmatch
+ iif ipproto mark notify oif sport to tos uid vrf'
+ ;;
+ esac
;;
a | add | d | del | change | append | r | replace)
if [[ $prev == via ]]; then
@@ -276,7 +324,7 @@ _comp_cmd_ip()
*)
((cword == subcword)) &&
_comp_compgen -- -W 'help list flush get add del change
- append replace'
+ append replace save showdump'
;;
esac
;;
@@ -357,7 +405,26 @@ _comp_cmd_ip()
n | neigh | neighbor | neighbour)
case $subcmd in
add | del | change | replace)
- # TODO
+ case $prev in
+ lladdr)
+ _comp_compgen_mac_addresses
+ ;;
+ nud)
+ _comp_cmd_ip__neigh_states "$1"
+ ;;
+ dev)
+ _comp_compgen_available_interfaces
+ ;;
+ protocol)
+ _comp_cmd_ip__iproute2_etc rt_protos
+ ;;
+ proxy)
+ :
+ ;;
+ *)
+ _comp_compgen -- -W 'lladdr nud proxy dev router use managed extern_learn protocol'
+ ;;
+ esac
;;
show | flush)
case "$prev" in
@@ -367,7 +434,7 @@ _comp_cmd_ip()
dev)
_comp_compgen_available_interfaces
;;
- nomaster | proxy | to | vrf) # TODO - Maybe we can complete vrf here?
+ to | vrf) # TODO - Maybe we can complete vrf here?
:
;;
*)
diff --git a/completions/iperf b/completions/iperf
index 0168814..ef2860a 100644
--- a/completions/iperf
+++ b/completions/iperf
@@ -5,16 +5,16 @@ _comp_cmd_iperf()
local cur prev words cword was_split comp_args
_comp_initialize -s -n : -- "$@" || return
- local noargopts='!(-*|*[ilpwMXbntLPTZCkOSAfIoFBcxy]*)'
+ local noargopts='!(-*|*[ilpwMXbntLPTZCkOAfIoFBcxy]*)'
# shellcheck disable=SC2254
case $prev in
--help | --version | --interval | --len | --port | --window | --mss | --bandwidth | \
--num | --time | --listenport | --parallel | --ttl | --linux-congestion | --omit | \
--congestion | --bytes | --blockcount | --cport | --set-mss | --flowlabel | \
- --title | --tos | --affinity | --rcv-timeout | --server-bitrate-limit | \
+ --title | --affinity | --rcv-timeout | --server-bitrate-limit | \
--idle-timeout | --time-skew-threshold | --xbind | --nstreams | --connect-timeout | \
--bitrate | --pacing-timer | --fq-rate | --length | --dscp | --extra-data | \
- --username | -${noargopts}[hvilpwMXbntLPTZCkOSA])
+ --username | -${noargopts}[hvilpwMXbntLPTZCkOA])
return
;;
--format | -${noargopts}f)
@@ -59,6 +59,10 @@ _comp_cmd_iperf()
_comp_compgen_filedir log
return
;;
+ --tos | -${noargopts}S)
+ _comp_compgen -- -W '{0..255}'
+ return
+ ;;
--rsa-private-key-path | --rsa-public-key-path)
_comp_compgen_filedir pem
return
diff --git a/completions/list_admins b/completions/list_admins
index 98452eb..e9de58e 100644
--- a/completions/list_admins
+++ b/completions/list_admins
@@ -10,7 +10,7 @@ _comp_cmd_list_admins()
else
# Prefer `list_lists` in the same dir as command
local pathcmd
- pathcmd=$(type -P "$1") && local PATH=${pathcmd%/*}:$PATH
+ pathcmd=$(type -P -- "$1") && local PATH=${pathcmd%/*}:$PATH
_comp_compgen -x list_lists mailman_lists
fi
diff --git a/completions/list_members b/completions/list_members
index a15a2cc..52d9398 100644
--- a/completions/list_members
+++ b/completions/list_members
@@ -28,7 +28,7 @@ _comp_cmd_list_members()
else
# Prefer `list_lists` in the same dir as command
local pathcmd
- pathcmd=$(type -P "$1") && local PATH=${pathcmd%/*}:$PATH
+ pathcmd=$(type -P -- "$1") && local PATH=${pathcmd%/*}:$PATH
_comp_compgen -x list_lists mailman_lists
fi
diff --git a/completions/list_owners b/completions/list_owners
index 6179176..f9e4225 100644
--- a/completions/list_owners
+++ b/completions/list_owners
@@ -10,7 +10,7 @@ _comp_cmd_list_owners()
else
# Prefer `list_lists` in the same dir as command
local pathcmd
- pathcmd=$(type -P "$1") && local PATH=${pathcmd%/*}:$PATH
+ pathcmd=$(type -P -- "$1") && local PATH=${pathcmd%/*}:$PATH
_comp_compgen -x list_lists mailman_lists
fi
diff --git a/completions/mysql b/completions/mysql
index 4ba049f..f1b9a9b 100644
--- a/completions/mysql
+++ b/completions/mysql
@@ -24,7 +24,7 @@ _comp_cmd_mysql()
# Prefer `mysqlshow` in the same dir as the command
local pathcmd
- pathcmd=$(type -P "$1") && local PATH=${pathcmd%/*}:$PATH
+ pathcmd=$(type -P -- "$1") && local PATH=${pathcmd%/*}:$PATH
local noargopts='!(-*|*[uDhSPeI]*)'
# shellcheck disable=SC2254
diff --git a/completions/newlist b/completions/newlist
index b4e6060..1e4d26e 100644
--- a/completions/newlist
+++ b/completions/newlist
@@ -19,7 +19,7 @@ _comp_cmd_newlist()
else
# Prefer `list_lists` in the same dir as command
local pathcmd
- pathcmd=$(type -P "$1") && local PATH=${pathcmd%/*}:$PATH
+ pathcmd=$(type -P -- "$1") && local PATH=${pathcmd%/*}:$PATH
_comp_compgen -x list_lists mailman_lists
fi
} &&
diff --git a/completions/perl b/completions/perl
index 9b82777..ee852f1 100644
--- a/completions/perl
+++ b/completions/perl
@@ -107,7 +107,7 @@ _comp_cmd_perldoc()
# Prefer `perl` in the same dir in utility functions
local pathcmd
- pathcmd=$(type -P "$1") && local PATH=${pathcmd%/*}:$PATH
+ pathcmd=$(type -P -- "$1") && local PATH=${pathcmd%/*}:$PATH
case $prev in
-*[hVnoMwL])
diff --git a/completions/pkgutil b/completions/pkgutil
index 63dc400..0b2e4ec 100644
--- a/completions/pkgutil
+++ b/completions/pkgutil
@@ -1,6 +1,9 @@
# pkgutil completion -*- shell-script -*-
# Copyright 2006 Yann Rouillard <yann@opencsw.org>
+# At least macOS pkgutil is different
+[[ $OSTYPE == *solaris* ]] || return 1
+
_comp_cmd_pkgutil__url2catalog()
{
local filename="$1"
diff --git a/completions/pydoc b/completions/pydoc
index 2cf2987..12e83e4 100644
--- a/completions/pydoc
+++ b/completions/pydoc
@@ -25,7 +25,7 @@ _comp_cmd_pydoc()
if ! _comp_looks_like_path "$cur"; then
# Prefer python in the same dir for resolving modules
local pathcmd
- pathcmd=$(type -P "$1") && local PATH=${pathcmd%/*}:$PATH
+ pathcmd=$(type -P -- "$1") && local PATH=${pathcmd%/*}:$PATH
_comp_compgen -ax python modules
fi
diff --git a/completions/remove_members b/completions/remove_members
index 4689b03..6f1290d 100644
--- a/completions/remove_members
+++ b/completions/remove_members
@@ -20,7 +20,7 @@ _comp_cmd_remove_members()
else
# Prefer `list_lists` in the same dir as command
local pathcmd
- pathcmd=$(type -P "$1") && local PATH=${pathcmd%/*}:$PATH
+ pathcmd=$(type -P -- "$1") && local PATH=${pathcmd%/*}:$PATH
_comp_compgen -x list_lists mailman_lists
fi
diff --git a/completions/rmlist b/completions/rmlist
index f3aca06..b5c140e 100644
--- a/completions/rmlist
+++ b/completions/rmlist
@@ -10,7 +10,7 @@ _comp_cmd_rmlist()
else
# Prefer `list_lists` in the same dir as command
local pathcmd
- pathcmd=$(type -P "$1") && local PATH=${pathcmd%/*}:$PATH
+ pathcmd=$(type -P -- "$1") && local PATH=${pathcmd%/*}:$PATH
_comp_compgen -x list_lists mailman_lists
fi
diff --git a/completions/rpm b/completions/rpm
index b6cafa5..1ffbeae 100644
--- a/completions/rpm
+++ b/completions/rpm
@@ -262,7 +262,7 @@ _comp_cmd_rpmbuild()
--target | --eval | -${noargopts}E | --buildpolicy)
# Prefer `rpm` in the same dir in utility functions
local pathcmd
- pathcmd=$(type -P "$1") && local PATH=${pathcmd%/*}:$PATH
+ pathcmd=$(type -P -- "$1") && local PATH=${pathcmd%/*}:$PATH
;;&
--target)
_comp_cmd_rpm__buildarchs
diff --git a/completions/ssh b/completions/ssh
index 386fd25..561dd07 100644
--- a/completions/ssh
+++ b/completions/ssh
@@ -404,7 +404,7 @@ _comp_cmd_sftp()
# Prefer `ssh` from same dir for resolving options, etc
local pathcmd
- pathcmd=$(type -P "$1") && local PATH=${pathcmd%/*}:$PATH
+ pathcmd=$(type -P -- "$1") && local PATH=${pathcmd%/*}:$PATH
_comp_xfunc_ssh_compgen_suboption_check && return
@@ -469,7 +469,7 @@ _comp_cmd_scp__path_esc='[][(){}<>"'"'"',:;^&!$=?`\\|[:space:]]'
_comp_xfunc_scp_compgen_remote_files()
{
# remove backslash escape from the first colon
- cur=${cur/\\:/:}
+ local cur=${cur/\\:/:}
local _userhost=${cur%%?(\\):*}
local _path=${cur#*:}
@@ -499,7 +499,7 @@ _comp_xfunc_scp_compgen_remote_files()
command sed -e 's/'"$_comp_cmd_scp__path_esc"'/\\\\\\&/g' -e 's/[*@|=]$//g' \
-e 's/[^\/]$/& /g')
fi
- _comp_compgen_split -l -- "$_files"
+ _comp_compgen -R split -l -- "$_files"
}
# @deprecated 2.12 use `_comp_compgen -ax ssh remote_files` instead
@@ -556,7 +556,7 @@ _comp_cmd_scp()
# Prefer `ssh` from same dir for resolving options, remote files, etc
local pathcmd
- pathcmd=$(type -P "$1") && local PATH=${pathcmd%/*}:$PATH
+ pathcmd=$(type -P -- "$1") && local PATH=${pathcmd%/*}:$PATH
_comp_xfunc_ssh_compgen_suboption_check && {
((${#COMPREPLY[@]})) && COMPREPLY=("${COMPREPLY[@]/%/ }")
diff --git a/completions/ssh-add b/completions/ssh-add
index 23c73e0..0589972 100644
--- a/completions/ssh-add
+++ b/completions/ssh-add
@@ -10,6 +10,19 @@ _comp_cmd_ssh_add()
_comp_compgen -- -W 'md5 sha256'
return
;;
+ -*H)
+ _comp_compgen_filedir
+ return
+ ;;
+ -*h)
+ # TODO should we try supporting more types of constraints?
+ if [[ $cur == *@* ]]; then
+ _comp_complete_user_at_host "$@"
+ else
+ _comp_compgen_known_hosts -- "$cur"
+ fi
+ return
+ ;;
-*t)
return
;;
@@ -17,14 +30,14 @@ _comp_cmd_ssh_add()
_comp_compgen_filedir
return
;;
- -*[se])
+ -*S | -*[se])
_comp_compgen_filedir so
return
;;
esac
if [[ $cur == -* ]]; then
- _comp_compgen_help -- '-?'
+ _comp_compgen_usage -- '-?' || _comp_compgen_help -- '-?'
return
fi
diff --git a/completions/ssh-copy-id b/completions/ssh-copy-id
index 52aa9d7..5ead5a6 100644
--- a/completions/ssh-copy-id
+++ b/completions/ssh-copy-id
@@ -7,7 +7,7 @@ _comp_cmd_ssh_copy_id()
# Prefer `ssh` from same dir for resolving options, etc
local pathcmd
- pathcmd=$(type -P "$1") && local PATH=${pathcmd%/*}:$PATH
+ pathcmd=$(type -P -- "$1") && local PATH=${pathcmd%/*}:$PATH
_comp_compgen -x ssh suboption_check && return
@@ -16,7 +16,11 @@ _comp_cmd_ssh_copy_id()
_comp_compgen -x ssh identityfile pub
return
;;
- -p)
+ -p | -t)
+ return
+ ;;
+ -F)
+ _comp_compgen_filedir
return
;;
-o)
diff --git a/completions/ssh-keygen b/completions/ssh-keygen
index 3f9d175..095f36b 100644
--- a/completions/ssh-keygen
+++ b/completions/ssh-keygen
@@ -5,11 +5,14 @@ _comp_cmd_ssh_keygen()
local cur prev words cword comp_args
_comp_initialize -n := -- "$@" || return
+ local IFS=$' \t\n' # for ${words[*]}
+ local noargopts='!(-*|*[ aCIJjMNPSVWzbEFRDwfGKsTmnOrtY]*)'
+ # shellcheck disable=SC2254
case $prev in
- -*[aCIJjMNPSVWz])
+ -${noargopts}[aCIJjMNPSVWz])
return
;;
- -*b)
+ -${noargopts}b)
local -a sizes=()
case "${words[*]}" in
*" -t dsa"?( *))
@@ -26,28 +29,28 @@ _comp_cmd_ssh_keygen()
_comp_compgen -- -W '"${sizes[@]}"'
return
;;
- -*E)
+ -${noargopts}E)
_comp_compgen -- -W 'md5 sha256'
return
;;
- -*[FR])
+ -${noargopts}[FR])
# TODO: trim this down to actual entries in known hosts files
_comp_compgen_known_hosts -- "$cur"
return
;;
- -*[Dw])
+ -${noargopts}[Dw])
_comp_compgen_filedir so
return
;;
- -*[fGKsT])
+ -${noargopts}[fGKsT])
_comp_compgen_filedir
return
;;
- -*m)
+ -${noargopts}m)
_comp_compgen -- -W 'PEM PKCS8 RFC4716'
return
;;
- -*n)
+ -${noargopts}n)
[[ ${words[*]} != *\ -*Y\ * ]] || return
if [[ ${words[*]} == *\ -*h\ * ]]; then
_comp_compgen_known_hosts -- "${cur##*,}"
@@ -58,19 +61,41 @@ _comp_cmd_ssh_keygen()
fi
return
;;
- -*O)
+ -${noargopts}O)
if [[ $cur != *=* ]]; then
- _comp_compgen -- -W 'clear critical: extension: force-command=
- no-agent-forwarding no-port-forwarding no-pty no-user-rc
- no-x11-forwarding permit-agent-forwarding
- permit-port-forwarding permit-pty permit-user-rc
- permit-X11-forwarding no-touch-required source-address=
- verify-required
-
- lines= start-line= checkpoint= memory= start= generator=
-
- application= challenge= device= no-touch-required resident
- user= write-attestation='
+ local -a opts=()
+ case ${words[*]} in
+ *\ -${noargopts}M\ *)
+ opts=(
+ lines= start-line= checkpoint= memory= start=
+ generator=
+ )
+ ;;
+ *\ -${noargopts}r\ *)
+ opts=(hashalg=)
+ ;;
+ *\ -${noargopts}s\ *)
+ opts=(
+ clear critical: extension: force-command=
+ no-agent-forwarding no-port-forwarding no-pty
+ no-user-rc no-x11-forwarding permit-agent-forwarding
+ permit-port-forwarding permit-pty permit-user-rc
+ permit-X11-forwarding no-touch-required
+ source-address= verify-required
+ )
+ ;;
+ *\ -${noargopts}t\ +([a-z0-9])-sk\ *)
+ opts=(
+ application= challenge= device= no-touch-required
+ resident user= verify-required write-attestation=
+ )
+ ;;
+ *\ -${noargopts}Y\ *)
+ opts=(hashalg= print-pubkey verify-time)
+ ;;
+ esac
+ ((${#opts[@]})) &&
+ _comp_compgen -- -W '"${opts[@]}"'
[[ ${COMPREPLY-} == *[:=] ]] && compopt -o nospace
_comp_ltrim_colon_completions "$cur"
@@ -90,18 +115,31 @@ _comp_cmd_ssh_keygen()
user=*)
_comp_compgen -c "${cur#*=}" -- -u
;;
+ hashalg=*)
+ local -a args=()
+ case ${words[*]} in
+ *\ -*Y\ *)
+ args=(sha256 sha512)
+ ;;
+ *\ -*r\ *)
+ args=(sha1 sha256)
+ ;;
+ esac
+ ((${#args[@]})) &&
+ _comp_compgen -c "${cur#*=}" -- -W '"${args[@]}"'
+ ;;
esac
fi
return
;;
- -*r)
- [[ ${words[*]} != *\ -*Y\ * ]] || _comp_compgen_filedir
+ -${noargopts}r)
+ [[ ${words[*]} != *\ -${noargopts}Y\ * ]] || _comp_compgen_filedir
return
;;
- -*t)
+ -${noargopts}t)
# Prefer `ssh` from same dir for resolving options, etc
local pathcmd protocols
- pathcmd=$(type -P "$1") && local PATH=${pathcmd%/*}:$PATH
+ pathcmd=$(type -P -- "$1") && local PATH=${pathcmd%/*}:$PATH
_comp_compgen -v protocols -x ssh query protocol-version
local types='dsa ecdsa ecdsa-sk ed25519 ed25519-sk rsa'
if [[ ${protocols[*]} == *1* ]]; then
@@ -110,7 +148,7 @@ _comp_cmd_ssh_keygen()
_comp_compgen -- -W "$types"
return
;;
- -*Y)
+ -${noargopts}Y)
_comp_compgen -- -W 'find-principals check-novalidate sign verify'
return
;;
@@ -122,7 +160,7 @@ _comp_cmd_ssh_keygen()
_comp_compgen_help -- "-?" # OpenSSH < 7
fi
- if [[ ${words[*]} == *\ -*s\ * ]]; then
+ if [[ ${words[*]} == *\ -${noargopts}s\ * ]]; then
_comp_compgen -a filedir pub
fi
} &&
diff --git a/completions/ssh-keyscan b/completions/ssh-keyscan
index f5e4364..e9d92cc 100644
--- a/completions/ssh-keyscan
+++ b/completions/ssh-keyscan
@@ -3,7 +3,7 @@
_comp_cmd_ssh_keyscan()
{
local cur prev words cword comp_args
- _comp_initialize -- "$@" || return
+ _comp_initialize -n = -- "$@" || return
local ipvx
@@ -18,6 +18,20 @@ _comp_cmd_ssh_keyscan()
_comp_compgen_filedir
return
;;
+ -*O)
+ case $cur in
+ hashalg=*)
+ cur=${cur#*=}
+ _comp_compgen -- -W 'sha1 sha256'
+ ;;
+ *=*) ;;
+ *)
+ _comp_compgen -- -W 'hashalg='
+ compopt -o nospace
+ ;;
+ esac
+ return
+ ;;
-*p | -*T)
return
;;
diff --git a/completions/sync_members b/completions/sync_members
index e8c07a7..450651f 100644
--- a/completions/sync_members
+++ b/completions/sync_members
@@ -24,7 +24,7 @@ _comp_cmd_sync_members()
else
# Prefer `list_lists` in the same dir as command
local pathcmd
- pathcmd=$(type -P "$1") && local PATH=${pathcmd%/*}:$PATH
+ pathcmd=$(type -P -- "$1") && local PATH=${pathcmd%/*}:$PATH
_comp_compgen -x list_lists mailman_lists
fi
diff --git a/completions/withlist b/completions/withlist
index f687511..b91346a 100644
--- a/completions/withlist
+++ b/completions/withlist
@@ -10,7 +10,7 @@ _comp_cmd_withlist()
else
# Prefer `list_lists` in the same dir as command
local pathcmd
- pathcmd=$(type -P "$1") && local PATH=${pathcmd%/*}:$PATH
+ pathcmd=$(type -P -- "$1") && local PATH=${pathcmd%/*}:$PATH
_comp_compgen -x list_lists mailman_lists
fi
diff --git a/configure.ac b/configure.ac
index 649ee3c..bba6890 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,5 +1,5 @@
AC_PREREQ([2.60])
-AC_INIT([bash-completion], [2.13.0]) dnl x-release-please-version
+AC_INIT([bash-completion], [2.14.0]) dnl x-release-please-version
dnl tar-pax for portable UTF-8 handling
AM_INIT_AUTOMAKE([
foreign dist-xz no-dist-gzip tar-pax -Wall -Wno-portability -Werror
diff --git a/test/requirements-dev.txt b/test/requirements-dev.txt
index 68655c4..ed51d1c 100644
--- a/test/requirements-dev.txt
+++ b/test/requirements-dev.txt
@@ -3,4 +3,4 @@
-r requirements.txt
mypy==1.8.0
-ruff==0.3.5
+ruff==0.4.3
diff --git a/test/t/conftest.py b/test/t/conftest.py
index cb279cc..2ca0f9a 100644
--- a/test/t/conftest.py
+++ b/test/t/conftest.py
@@ -381,8 +381,8 @@ def load_completion_for(bash: pexpect.spawn, cmd: str) -> bool:
try:
# Allow _comp_load to fail so we can test completions
# that are directly loaded in bash_completion without a separate file.
- assert_bash_exec(bash, "_comp_load %s || :" % cmd)
- assert_bash_exec(bash, "complete -p %s &>/dev/null" % cmd)
+ assert_bash_exec(bash, "_comp_load -- %s || :" % cmd)
+ assert_bash_exec(bash, "complete -p -- %s &>/dev/null" % cmd)
except AssertionError:
return False
return True
diff --git a/test/t/test_env.py b/test/t/test_env.py
index 3d1a684..7608a4b 100644
--- a/test/t/test_env.py
+++ b/test/t/test_env.py
@@ -1,7 +1,44 @@
import pytest
+from conftest import assert_complete
+
class TestEnv:
@pytest.mark.complete("env --", require_longopt=True)
def test_1(self, completion):
assert completion
+
+ @pytest.mark.complete("env __unknown_variable__=")
+ def test_unknown_variable_falls_back_to_filedir(self, completion):
+ assert "shared/" in completion
+
+ @pytest.mark.complete("env LANG=", xfail="! locale -a &>/dev/null")
+ def test_lang_envvar(self, completion):
+ assert any(x == "C" or x.startswith("C.") for x in completion)
+
+ @pytest.mark.parametrize(
+ "opts",
+ [
+ "",
+ "foo=bar",
+ "--debug",
+ "--debug foo=bar",
+ "-",
+ "- foo=bar",
+ ],
+ )
+ def test_command(self, bash, opts):
+ completion = assert_complete(bash, "env %s s" % opts)
+ assert completion == "h" or "sh" in completion
+
+ @pytest.mark.parametrize(
+ "opts",
+ [
+ "foo=bar --non-existent",
+ "- --non-existent",
+ "-- --non-existent",
+ ],
+ )
+ def test_option_like_command(self, bash, opts):
+ completion = assert_complete(bash, "env %s s" % opts)
+ assert not (completion == "h" or "sh" in completion)
diff --git a/test/t/test_fio.py b/test/t/test_fio.py
index dadb5ac..75b9046 100644
--- a/test/t/test_fio.py
+++ b/test/t/test_fio.py
@@ -23,6 +23,8 @@ class TestFio:
def test_enghelp(self, completion):
"""Test --enghelp parsing."""
assert completion
+ assert all(x == x.strip() for x in completion)
+ assert all(")" not in x for x in completion)
@pytest.mark.complete("fio --unlink=", require_cmd=True)
def test_cmdhelp_boolean(self, completion):
diff --git a/test/t/test_ssh_keygen.py b/test/t/test_ssh_keygen.py
index cc6ff4e..6e9953c 100644
--- a/test/t/test_ssh_keygen.py
+++ b/test/t/test_ssh_keygen.py
@@ -55,11 +55,15 @@ class TestSshKeygen:
assert not completion
@pytest.mark.complete("ssh-keygen -O ")
- def test_O(self, completion):
+ def test_bare_O(self, completion):
+ assert not completion
+
+ @pytest.mark.complete("ssh-keygen -s -O ")
+ def test_s_O(self, completion):
assert completion
assert any(x.endswith("=") for x in completion)
- @pytest.mark.complete("ssh-keygen -O force-command=bas")
+ @pytest.mark.complete("ssh-keygen -s -O force-command=bas")
def test_O_force_command(self, completion):
assert completion
assert not completion.startswith("force-command=")
@@ -68,18 +72,28 @@ class TestSshKeygen:
def test_O_unknown(self, completion):
assert not completion
- @pytest.mark.complete("ssh-keygen -O application=")
+ @pytest.mark.complete("ssh-keygen -t ed25519-sk -O application=")
def test_O_application(self, completion):
assert completion == "ssh:"
- @pytest.mark.complete("ssh-keygen -O application=s")
+ @pytest.mark.complete("ssh-keygen -t ed25519-sk -O application=s")
def test_O_application_s(self, completion):
assert completion == "sh:"
- @pytest.mark.complete("ssh-keygen -O application=ssh:")
+ @pytest.mark.complete("ssh-keygen -t ed25519-sk -O application=ssh:")
def test_O_application_ssh_colon(self, completion):
assert not completion
- @pytest.mark.complete("ssh-keygen -O application=nonexistent")
+ @pytest.mark.complete(
+ "ssh-keygen -t ed25519-sk -O application=nonexistent"
+ )
def test_O_application_nonexistent(self, completion):
assert not completion
+
+ @pytest.mark.complete("ssh-keygen -r -O ")
+ def test_r_O(self, completion):
+ assert completion
+
+ @pytest.mark.complete("ssh-keygen -Y -O ")
+ def test_Y_O(self, completion):
+ assert completion
diff --git a/test/t/unit/test_unit_compgen_available_interfaces.py b/test/t/unit/test_unit_compgen_available_interfaces.py
index 5e93100..f3ebac0 100644
--- a/test/t/unit/test_unit_compgen_available_interfaces.py
+++ b/test/t/unit/test_unit_compgen_available_interfaces.py
@@ -22,4 +22,4 @@ class TestUtilCompgenAvailableInterfaces:
"_comp__test_compgen available_interfaces",
want_output=True,
)
- assert ":" not in output.strip()
+ assert ":>" not in output.strip()
diff --git a/test/t/unit/test_unit_load.py b/test/t/unit/test_unit_load.py
index 3515703..5513041 100644
--- a/test/t/unit/test_unit_load.py
+++ b/test/t/unit/test_unit_load.py
@@ -128,3 +128,6 @@ class TestCompLoad:
# The in-tree `sh` completion should be loaded here,
# and cause no output, unlike our `$PWD/prefix1/bin/sh` canary.
assert_bash_exec(bash, "_comp_load sh", want_output=False)
+
+ def test_option_like_cmd_name(self, bash):
+ assert_bash_exec(bash, "! _comp_load -- --non-existent")
diff --git a/test/t/unit/test_unit_realcommand.py b/test/t/unit/test_unit_realcommand.py
index 4eb7b73..a057788 100644
--- a/test/t/unit/test_unit_realcommand.py
+++ b/test/t/unit/test_unit_realcommand.py
@@ -88,3 +88,11 @@ class TestUnitRealCommand:
want_output=False,
)
assert output.strip() == ""
+
+ def test_option_like_cmd_name(self, bash, functions):
+ output = assert_bash_exec(
+ bash,
+ "! __tester --non-existent",
+ want_output=False,
+ )
+ assert output.strip() == ""
diff --git a/version.txt b/version.txt
index fb2c076..edcfe40 100644
--- a/version.txt
+++ b/version.txt
@@ -1 +1 @@
-2.13.0
+2.14.0