aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-09-29 19:05:49 +0200
committerDanilo M. <danix@danix.xyz>2026-09-29 19:05:49 +0200
commite4aa085a74b10cdb74d0ea2aa5105da7de397aa4 (patch)
tree426fcf702b6bed44bf5e29227eb75aed24d91c70
parentbed9d291370b2b198b2d146c7081066b6dd70641 (diff)
downloadqtmaildir-e4aa085a74b10cdb74d0ea2aa5105da7de397aa4.tar.gz
qtmaildir-e4aa085a74b10cdb74d0ea2aa5105da7de397aa4.zip
feat: bash completion for the launch selectors
Completes the options, and the account keys after --account, read from the [account.<key>] sections of the config the application itself reads. Thread and message ids are deliberately not completed: offering them means querying the whole notmuch index on every Tab, which on a real Maildir is tens of thousands of ids nobody would pick from a list anyway. Installed under share/bash-completion/completions, where bash-completion loads a command's file on demand by name. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
-rw-r--r--CHANGELOG.md3
-rw-r--r--assets/qtmaildir.bash-completion26
-rw-r--r--src/CMakeLists.txt4
3 files changed, 33 insertions, 0 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4a9879a..830c09e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -21,6 +21,9 @@ point at which they are stable.
`--message` accepts a Message-ID with or without its angle brackets. A
selector that matches nothing is named in the status bar and the window
keeps the view it had.
+- Bash completion for the options, completing account keys from the config
+ after `--account`. Thread and message ids are not completed, since that
+ would query the whole index on every Tab.
- A second launch now hands its selectors to the already-running window over a
local socket and asks it to raise itself, rather than opening a second
window. One process, and so one notmuch database handle.
diff --git a/assets/qtmaildir.bash-completion b/assets/qtmaildir.bash-completion
new file mode 100644
index 0000000..a203be8
--- /dev/null
+++ b/assets/qtmaildir.bash-completion
@@ -0,0 +1,26 @@
+# bash completion for qtmaildir
+#
+# Copyright (C) 2026 Danilo M. <danix@danix.xyz>
+# Licensed under the GNU General Public License version 2.
+#
+# Completes the options, and account keys after --account, read from the
+# [account.<key>] sections of the config. Thread and message ids are NOT
+# completed: listing them means querying the whole notmuch index on every Tab.
+
+_qtmaildir()
+{
+ local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]}
+ local conf=${XDG_CONFIG_HOME:-$HOME/.config}/qtmaildir/qtmaildir.conf
+
+ case $prev in
+ --account)
+ [[ -r $conf ]] || return
+ COMPREPLY=($(compgen -W "$(sed -n 's/^\[account\.\(.*\)\][[:space:]]*$/\1/p' "$conf")" -- "$cur"))
+ return ;;
+ --thread|--message)
+ return ;;
+ esac
+
+ COMPREPLY=($(compgen -W '--account --thread --message --help --version' -- "$cur"))
+}
+complete -F _qtmaildir qtmaildir
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 4a344d5..5d41342 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -113,3 +113,7 @@ install(FILES ${CMAKE_SOURCE_DIR}/assets/icons/qtmaildir.svg
DESTINATION share/icons/hicolor/scalable/apps)
install(FILES ${CMAKE_SOURCE_DIR}/assets/qtmaildir.desktop
DESTINATION share/applications)
+# bash-completion loads a command's file on demand from this directory, by name.
+install(FILES ${CMAKE_SOURCE_DIR}/assets/qtmaildir.bash-completion
+ DESTINATION share/bash-completion/completions
+ RENAME qtmaildir)