Subject: 30.1; pcomplete/dnf does not work with dnf5

From: Rahguzar <[email-masked]>
Date: Sun, 01 Jun 2025 12:49:02 +0500

Dear Emacs maintainers,

Recently released Fedora 42 defaults to dnf 5. This had the effect of
breaking pcomplete completions provided by pcomplete/dnf. I have worked
around the problem in my init file by means of advice.

I can send a patch with the changes needed to make completion work with
dnf 5. However, I want to make some additional changes too so I would
like to ask some questions first (I have cced Augusto Stoffel since he
added the code in question):

1) I think "upgrade" should offer completions from installed packages
but currently it offers completions from all packages. Is there a reason?

2) Currently completions of package names come with a very long version
string which I have never needed and have to delete by hand. Is it ok to
remove that?

3) The most reliable way of getting package names without version string
is (in my opinion) to use the dnf repoquery command. It also has the
(slight) advantage of not requiring sqlite3. However, although I can get
the list of installed and available packages from it, I can't get the
list of 'not installed' packages. On the other hand the current version
seems to return the same list for 'not installed' and available packages.
Is it ok to just remove the 'not installed' case and use the available
packages instead?

Best,
Rahguzar

In GNU Emacs 30.1 (build 1, aarch64-redhat-linux-gnu, GTK+ Version
 3.24.49, cairo version 1.18.2) of 2025-04-08 built on
 541db5783c4a45e992a56453d3b9080d
System Description: Fedora Linux Asahi Remix 42 (Forty Two [Adams])

Configured using:
 'configure --build=aarch64-redhat-linux-gnu
 --host=aarch64-redhat-linux-gnu --program-prefix=
 --disable-dependency-tracking --prefix=/usr --exec-prefix=/usr
 --bindir=/usr/bin --sbindir=/usr/bin --sysconfdir=/etc
 --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib64
 --libexecdir=/usr/libexec --localstatedir=/var --runstatedir=/run
 --sharedstatedir=/var/lib --mandir=/usr/share/man
 --infodir=/usr/share/info --disable-gc-mark-trace --with-cairo
 --with-dbus --with-gif --with-gpm=no --with-harfbuzz --with-jpeg
 --with-modules --with-native-compilation=aot --with-pgtk --with-png
 --with-rsvg --with-sqlite3 --with-tiff --with-tree-sitter --with-webp
 --with-xpm build_alias=aarch64-redhat-linux-gnu
 host_alias=aarch64-redhat-linux-gnu CC=gcc 'CFLAGS=-DMAIL_USE_LOCKF -O2
 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches
 -pipe -Wall -Werror=format-security
 -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS
 -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong
 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1
 -mbranch-protection=standard -fasynchronous-unwind-tables
 -fstack-clash-protection -fno-omit-frame-pointer
 -mno-omit-leaf-frame-pointer ' 'LDFLAGS=-Wl,-z,relro -Wl,--as-needed
 -Wl,-z,pack-relative-relocs -Wl,-z,now
 -specs=/usr/lib/rpm/redhat/redhat-hardened-ld
 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1
 -specs=/usr/lib/rpm/redhat/redhat-package-notes ' CXX=g++ 'CXXFLAGS=-O2
 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches
 -pipe -Wall -Werror=format-security
 -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS
 -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong
 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1
 -mbranch-protection=standard -fasynchronous-unwind-tables
 -fstack-clash-protection -fno-omit-frame-pointer
 -mno-omit-leaf-frame-pointer '
 PKG_CONFIG_PATH=:/usr/lib64/pkgconfig:/usr/share/pkgconfig'

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ JPEG
LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 MODULES NATIVE_COMP NOTIFY INOTIFY
PDUMPER PGTK PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF
TOOLKIT_SCROLL_BARS TREE_SITTER WEBP XIM GTK3 ZLIB

Important settings:
  value of $LANG: en_US.utf8
  locale-coding-system: utf-8-unix

Major mode: mu4e:main

Minor modes in effect:
  corfu-history-mode: t
  corfu-popupinfo-mode: t
  server-mode: t
  mu4e-search-minor-mode: t
  mu4e-update-minor-mode: t
  mu4e-context-minor-mode: t
  dirvish-override-dired-mode: t
  satchel-mode: t
  nerd-icons-completion-mode: t
  marginalia-mode: t
  vertico-multiform-mode: t
  vertico-mode: t
  evil-goggles-mode: t
  anzu-mode: t
  evil-mode: t
  evil-local-mode: t
  recentf-mode: t
  savehist-mode: t
  save-place-mode: t
  electric-pair-mode: t
  override-global-mode: t
  pixel-scroll-precision-mode: t
  repeat-mode: t
  midnight-mode: t
  global-eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  minibuffer-regexp-mode: t
  buffer-read-only: t
  size-indication-mode: t
  line-number-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  abbrev-mode: t

Load-path shadows:
/home/azeem/.local/state/emacs/elpaca/builds/transient/transient hides /usr/share/emacs/30.1/lisp/transient
/home/azeem/.local/state/emacs/elpaca/builds/ef-themes/theme-loaddefs hides /usr/share/emacs/30.1/lisp/theme-loaddefs

Features:
(shadow emacsbug vertico-directory help-fns radix-tree
mastodon-notifications fabs consult undo-fu-session dabbrev cape-char
nerd-icons-corfu delsel corfu-history corfu-popupinfo corfu evil-embrace
embrace expand-region text-mode-expansions the-org-mode-expansions
org-element org-persist xdg org-id org-refile org-element-ast inline
avl-tree generator er-basic-expansions expand-region-core
expand-region-custom evil-surround jit-spell ispell face-remap
vertico-sort link-hint ffap goto-addr avy mastodon-media
mastodon-profile mastodon-auth mastodon-client plstore mastodon
mastodon-transient tp mastodon-search mastodon-widget mastodon-tl
image-mode exif url-cache mastodon-toot multisession sqlite facemenu
mastodon-iso mastodon-http url-http url-auth url-gw shr-color
smerge-mode diff diff-mode track-changes jka-compr qp sort smiley
gnus-cite mm-archive mail-extr textsec uni-scripts idna-mapping
ucs-normalize uni-confusable textsec-check gnus-async gnus-bcklg
visual-wrap gnus-ml disp-table nndraft nnmh vertico-repeat epa-file
network-stream nsm gnus-agent gnus-srvr gnus-score score-mode nnvirtual
nntp gnus-cache server cape mu4e mu4e-org org ob ob-tangle ob-ref ob-lob
ob-table ob-exp org-macro org-src sh-script smie treesit executable
ob-comint org-pcomplete pcomplete org-list org-footnote org-faces
org-entities noutline outline org-version ob-emacs-lisp ob-core ob-eval
org-cycle org-table ol org-fold org-fold-core org-keys oc org-loaddefs
find-func org-compat org-macs mu4e-notification notifications mu4e-main
smtpmail mu4e-view mu4e-mime-parts crm cal-menu calendar cal-loaddefs
mu4e-headers mu4e-thread mu4e-actions mu4e-compose mu4e-draft gnus-msg
gnus-art mm-uu mml2015 mm-view mml-smime smime gnutls dig gnus-sum
gnus-group gnus-undo gnus-start gnus-dbus dbus gnus-cloud nnimap nnmail
mail-source utf7 nnoo parse-time iso8601 gnus-spec gnus-int gnus-range
gnus-win gnus nnheader range mu4e-search mu4e-lists mu4e-bookmarks
mu4e-mark mu4e-message shr pixel-fill kinsoku url-file svg xml dom
browse-url flow-fill mule-util hl-line mu4e-contacts mu4e-update
mu4e-folders mu4e-context mu4e-query-items mu4e-server mu4e-modeline
mu4e-vars mu4e-helpers mu4e-config mu4e-window ido message sendmail
yank-media puny dirvish transient format-spec cus-start autorevert
filenotify dired dired-loaddefs rfc822 mml mml-sec epa derived epg
rfc6068 epg-config gnus-util time-date mm-decode mm-bodies mm-encode
mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr
mailabbrev mail-utils gmm-utils mailheader mu4e-obsolete usher satchel
ibuf-ext ibuffer ibuffer-loaddefs bookmark nerd-icons-completion
nerd-icons nerd-icons-faces nerd-icons-data nerd-icons-data-mdicon
nerd-icons-data-flicon nerd-icons-data-codicon nerd-icons-data-devicon
nerd-icons-data-sucicon nerd-icons-data-wicon nerd-icons-data-faicon
nerd-icons-data-powerline nerd-icons-data-octicon
nerd-icons-data-pomicon nerd-icons-data-ipsicon marginalia
vertico-multiform vertico evil-goggles pulse color ef-reverie-theme
ef-themes pdf-loader anzu advice evil evil-integration evil-maps
evil-commands reveal evil-jumps evil-command-window evil-types
evil-search evil-ex evil-macros evil-repeat evil-states evil-core comp
comp-cstr cl-extra help-mode comp-run comp-common evil-common rect
evil-vars edmacro kmacro orderless compat mastodon-autoloads
yeetube-autoloads filechooser-autoloads wile-autoloads usher-autoloads
undo-fu-session-autoloads ef-themes-autoloads jit-spell-autoloads
satchel-autoloads pdf-tools-autoloads tablist-autoloads xr-autoloads
link-hint-autoloads avy-autoloads yaml-mode-autoloads
inspirehep-autoloads consult-hoogle-autoloads haskell-ng-mode-autoloads
geiser-guile-autoloads geiser-autoloads fj-autoloads fedi-autoloads
markdown-mode-autoloads tp-autoloads magit-autoloads
magit-section-autoloads llama-autoloads fabs-autoloads
companion-mode-autoloads eww-hacks-autoloads evil-embrace-autoloads
embrace-autoloads expand-region-autoloads evil-surround-autoloads
evil-nerd-commenter-autoloads evil-goggles-autoloads anzu-autoloads
evil-autoloads goto-chg-autoloads eshell-syntax-highlighting-autoloads
eat-autoloads package-lint-flymake-autoloads package-lint-autoloads
macrostep-autoloads helpful-autoloads dash-autoloads
highlight-quoted-autoloads dirvish-autoloads transient-autoloads
diredfl-autoloads trashed-autoloads vertico-autoloads
orderless-autoloads nerd-icons-completion-autoloads marginalia-autoloads
embark-consult-autoloads embark-autoloads nerd-icons-corfu-autoloads
nerd-icons-autoloads corfu-autoloads consult-autoloads cape-autoloads
password-store-autoloads with-editor-autoloads elpaca-log elpaca-ui
recentf tree-widget savehist saveplace elec-pair bind-key easy-mmode
ibuf-macs pcase elpaca-menu-elpa flymake project compile
text-property-search comint ansi-osc ansi-color thingatpt pixel-scroll
cua-base ring repeat rx midnight cus-edit pp cus-load wid-edit
elpaca-menu-melpa url url-proxy url-privacy url-expand url-methods
url-history url-cookie generate-lisp-file url-domsuf url-util url-parse
auth-source eieio eieio-core cl-macs password-cache json subr-x map
byte-opt gv bytecomp byte-compile url-vars mailcap elpaca-menu-org
cl-seq elpaca warnings icons elpaca-process cl-loaddefs cl-lib
elpaca-autoloads rmc iso-transl tooltip cconv eldoc paren electric
uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel
term/pgtk-win pgtk-win term/common-win touch-screen pgtk-dnd tool-bar
dnd fontset image regexp-opt fringe tabulated-list replace newcomment
text-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow
isearch easymenu timer select scroll-bar mouse jit-lock font-lock syntax
font-core term/tty-colors frame minibuffer nadvice seq simple cl-generic
indonesian philippine cham georgian utf-8-lang misc-lang vietnamese
tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek
romanian slovak czech european ethiopic indian cyrillic chinese
composite emoji-zwj charscript charprop case-table epa-hook
jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs
theme-loaddefs faces cus-face macroexp files window text-properties
overlay sha1 md5 base64 format env code-pages mule custom widget keymap
hashtable-print-readable backquote threads dbusbind inotify
dynamic-setting system-font-setting font-render-setting cairo gtk pgtk
multi-tty move-toolbar make-network-process native-compile emacs)

Memory information:
((conses 16 1368123 349490) (symbols 48 46221 8)
 (strings 32 344243 10459) (string-bytes 1 30752177)
 (vectors 16 89242) (vector-slots 8 1100861 100516)
 (floats 8 1033 16553) (intervals 56 19366 531) (buffers 992 30))