Subject: bug#67946: 30.0.50; [RFC PATCH] Add an option to not report "Wrote ..." when saving recentf.

From: Vladimir Nikishkin <[email-masked]>
Date: Thu, 21 Dec 2023 11:26:52 +0800

Dear Emacs Developers,

I have the following setting in my init.el

(add-hook 'buffer-list-update-hook 'recentf-track-opened-file)
(add-hook 'buffer-list-update 'recentf-save-list)

The first one is the one recommended by describe-function recentf-mode,
and the second one is to make this switch persistent, and resistant to
emacs being killed.

However, I am getting a lot of messages like
`Wrote /home/lockywolf/.emacs.d/recentf', which are not very helpful
normally.

I am attaching a trivial patch (001_patch-recentf-verbose.patch), which
adds a `recentf-verbose' defcustom, which, when set to nil, would
suppress these messages.

Please, consider including it into Emacs.

In GNU Emacs 30.0.50 (build 1, x86_64-slackware-linux-gnu, GTK+ Version
 3.24.31, cairo version 1.16.0) of 2023-09-22 built on
 laptop.lockywolf.net
Windowing system distributor 'The X.Org Foundation', version 11.0.12014000
System Description: Slackware 15.0 x86_64

Configured using:
 'configure --prefix=/usr --libdir=/usr/lib64 --sysconfdir=/etc
 --localstatedir=/var --program-prefix= --program-suffix=
 --mandir=/usr/man --infodir=/usr/info --without-gconf
 --without-gsettings --with-modules --with-json
 --with-native-compilation=aot --with-imagemagick --with-pdumper
 --with-xwidgets --enable-year2038 --with-tree-sitter --with-cairo-xcb
 --build=x86_64-slackware-linux 'CFLAGS=-O2 -fPIC -g''

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM HARFBUZZ IMAGEMAGICK
JPEG JSON LCMS2 LIBXML2 MODULES NATIVE_COMP NOTIFY INOTIFY PDUMPER PNG
RSVG SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER
WEBP X11 XDBE XIM XINPUT2 XPM XWIDGETS GTK3 ZLIB

Important settings:
  value of $LC_COLLATE: C
  value of $LC_TIME: en_GB.UTF-8
  value of $LANG: en_US.UTF-8
  value of $XMODIFIERS: @im=ibus
  locale-coding-system: utf-8-unix

Major mode: Dired by name

Minor modes in effect:
  memento-mori-mode: t
  highlight-doxygen-global-mode: t
  hes-mode: t
  global-highlight-parentheses-mode: t
  highlight-parentheses-mode: t
  global-color-identifiers-mode: t
  frecentf-mode: t
  idle-org-agenda-mode: t
  gnus-dired-mode: t
  mu4e-modeline-mode: t
  TeX-PDF-mode: t
  TeX-source-correlate-mode: t
  ido-everywhere: t
  async-bytecomp-package-mode: t
  global-git-commit-mode: t
  magit-auto-revert-mode: t
  server-mode: t
  global-flycheck-mode: t
  global-hl-todo-mode: t
  gdb-many-windows: t
  global-company-mode: t
  company-mode: t
  auto-insert-mode: t
  pdf-occur-dired-minor-mode: t
  pdf-occur-global-minor-mode: t
  shackle-mode: t
  dired-omit-mode: t
  global-auto-revert-mode: t
  electric-pair-mode: t
  which-function-mode: t
  global-hl-line-mode: t
  global-display-fill-column-indicator-mode: t
  display-fill-column-indicator-mode: t
  global-hi-lock-mode: t
  hi-lock-mode: t
  windmove-mode: t
  savehist-mode: t
  recentf-mode: t
  save-place-mode: t
  super-save-mode: t
  xterm-mouse-mode: t
  override-global-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  global-prettify-symbols-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  minibuffer-regexp-mode: t
  buffer-read-only: t
  size-indication-mode: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  auto-save-visited-mode: t
  abbrev-mode: t

Load-path shadows:
/home/lockywolf/.emacs.d/elpa/company-cmake-0.1/company-cmake hides /home/lockywolf/.emacs.d/elpa/company-20230303.2331/company-cmake
/home/lockywolf/OfficialRepos/org-noter/org-noter hides /home/lockywolf/.emacs.d/elpa/org-noter-20230728.2037/org-noter
/home/lockywolf/OfficialRepos/org-noter/org-noter-core hides /home/lockywolf/.emacs.d/elpa/org-noter-20230728.2037/org-noter-core
/home/lockywolf/.emacs.d/elpa/cmake-mode-20230323.1312/cmake-mode hides /usr/share/emacs/site-lisp/cmake-mode
/home/lockywolf/.emacs.d/elpa/transient-20231112.923/transient hides /usr/share/emacs/30.0.50/lisp/transient
/home/lockywolf/.emacs.d/elpa/bind-key-20230203.2004/bind-key hides /usr/share/emacs/30.0.50/lisp/use-package/bind-key
/home/lockywolf/.emacs.d/elpa/flim-20230205.1423/sasl hides /usr/share/emacs/30.0.50/lisp/net/sasl

Features:
(shadow mail-extr face-remap emacsbug time-stamp shortdoc bug-reference
c++-ts-mode c-ts-mode c-ts-common cl-print ffap misearch multi-isearch
vc-git matlab matlab-scan matlab-syntax matlab-compat pulse dired-aux
company-oddmuse company-keywords make-mode company-etags company-gtags
company-dabbrev-code company-dabbrev company-files company-clang
company-capf company-cmake company-semantic company-template
company-bbdb init rc-local lockywolf-postamble-laptop
display-line-numbers lockywolf-exwm exwm exwm-input xcb-keysyms
exwm-manage exwm-floating xcb-cursor xcb-render exwm-layout
exwm-workspace exwm-core xcb-ewmh xcb-icccm xcb xcb-xkb xcb-xproto
xcb-types xcb-debug lockywolf-erc erc-track erc-match erc erc-backend
erc-networks erc-common erc-compat erc-loaddefs lockywolf-equake equake
lockywolf-gui-x11 hamburger-menu lockywolf-gui-general diary-lib
diary-loaddefs memento-mori highlight-doxygen highlight-escape-sequences
highlight-parentheses rainbow-mode color-identifiers-mode prettify-greek
form-feed tsdh-dark-theme lockywolf-calc calc calc-loaddefs calc-macs
lockywolf-monitoring frecentf persist frecency a dirtrack
idle-org-agenda lockywolf-autocomplete-ido avy
lockywolf-org-scientific-large org-download org-attach org-mind-map
org-sticky-header org-pdftools pdf-annot facemenu org-noter
org-noter-djvu org-noter-nov org-noter-pdf org-noter-core org2blog ox-wp
writegood-mode metaweblog xml-rpc url-http url-auth url-gw nsm hydra lv
htmlize org-journal org-crypt cal-iso org-sidebar org-ql-search
org-ql-view ov org-super-agenda ht org-ql peg ts org-habit org-duration
org-mru-clock ox-beamer ox-org ox-md ox-extra ox-odt rng-loc rng-uri
rng-parse rng-match rng-dt rng-util rng-pttrn nxml-parse nxml-ns
nxml-enc xmltok nxml-util ox-latex ox-icalendar org-agenda ox-html table
ox-ascii ox-publish ox org-clock ob-maxima ob-fortran ob-shell ob-latex
ob-scheme geiser-impl help-fns radix-tree geiser-custom geiser-base
geiser ob-C ob-plantuml org-tempo tempo org-protocol ox-youtube org-ebib
org-bibtex-extras ol-bibtex ox-bibtex org-inlinetask
org-fancy-priorities lockywolf-cryptography pinentry lockywolf-elfeed
lockywolf-email-pim bbdb bbdb-site gnus-dired mu4e-speedbar speedbar
ezimage dframe mu4e mu4e-org mu4e-notification notifications mu4e-main
mu4e-view gnus-art mm-uu mml2015 mm-view mml-smime smime gnutls dig
gnus-sum gnus-group gnus-undo gnus-start gnus-dbus gnus-cloud nnimap
nnmail mail-source utf7 nnoo gnus-spec gnus-int gnus-range gnus-win
mu4e-headers mu4e-compose mu4e-draft mu4e-actions mu4e-search mu4e-lists
mu4e-bookmarks mu4e-mark mu4e-message flow-fill mu4e-contacts
mu4e-update mu4e-folders mu4e-context mu4e-query-items mu4e-server
mu4e-modeline mu4e-vars mu4e-helpers mu4e-config mu4e-window
mu4e-obsolete message-view-patch auth-source-xoauth2 auth-source-pass
smtpmail-multi smtpmail khardel yaml-mode vdirel org-vcard lockywolf-tex
company-auctex vdm-snippets yasnippet bib-cite auctex-latexmk latex
latex-flymake tex-ispell tex-style tex texmathp cdlatex lockywolf-bibtex
ivy-bibtex bibtex-completion org-capture biblio biblio-download
biblio-dissemin biblio-ieee biblio-hal biblio-dblp biblio-crossref
biblio-arxiv timezone biblio-doi biblio-core ido f f-shortdoc s ebib
helm helm-global-bindings helm-easymenu helm-core async-bytecomp
helm-source helm-multi-match helm-lib async ivy delsel ivy-faces
ivy-overlay colir ebib-reading-list ebib-notes org-element org-persist
org-id org-refile org ob ob-tangle ob-ref ob-lob ob-table ob-exp
org-macro org-src ob-comint org-pcomplete org-list org-footnote
org-faces org-entities ob-emacs-lisp ob-core ob-eval org-cycle org-table
org-keys oc org-loaddefs cal-menu calendar cal-loaddefs ol org-fold
org-fold-core org-compat avl-tree org-version org-macs ebib-filters
ebib-keywords ebib-utils ebib-db parsebib mule-util bibretrieve
bibtex-utils reftex reftex-loaddefs reftex-vars bibtex
lockywolf-plantuml flycheck-plantuml plantuml-mode lockywolf-matlab
lockywolf-scheme scheme-complete scheme lockywolf-emacs-lisp
paredit-menu paredit lockywolf-helm lockywolf-vala vala-mode cc-langs
lockywolf-cpp clang-format+ clang-format eldoc-cmake cmake-mode rst
company-c-headers flycheck-clangcheck google-c-style cc-mode cc-fonts
cc-guess cc-menus cc-cmds lockywolf-fortran f90 lockywolf-bash sh-script
smie treesit executable lockywolf-version-control magit-bookmark
magit-submodule magit-blame magit-stash magit-reflog magit-bisect
magit-push magit-pull magit-fetch magit-clone magit-remote magit-commit
magit-sequence magit-notes magit-worktree magit-tag magit-merge
magit-branch magit-reset magit-files magit-refs magit-status magit
magit-repos magit-apply magit-wip magit-log magit-diff smerge-mode
git-commit log-edit message sendmail yank-media rfc822 mml mml-sec epa
epg epg-config mm-decode mm-bodies mm-encode mail-parse rfc2231
mailabbrev gmm-utils mailheader pcvs-util add-log magit-core
magit-autorevert magit-margin magit-transient magit-process with-editor
server magit-mode transient magit-git magit-base crm magit-section vc
vc-dispatcher lockywolf-spellchecking-hard languagetool
languagetool-server languagetool-console languagetool-java
languagetool-issue languagetool-correction languagetool-core flycheck
lockywolf-spellchecking-simple hl-todo compat flyspell ispell
lockywolf-debugging gdb-mi bindat gud lockywolf-advanced-editing eglot
external-completion jsonrpc flymake-proc flymake diff diff-mode ert
debug backtrace markdown-mode color company autoinsert ediff ediff-merg
ediff-mult ediff-wind ediff-diff ediff-help ediff-init ediff-util
lockywolf-ggtags ggtags hippie-exp etags fileloop xref project ewoc
lockywolf-tramp lockywolf-shells esh-help dash em-unix em-smart esh-mode
esh-var eshell esh-cmd generator esh-ext esh-opt esh-proc esh-io esh-arg
esh-module esh-groups esh-util lockywolf-paper-pdf-djvu djvu pdf-occur
ibuf-ext ibuffer ibuffer-loaddefs tablist advice tablist-filter
semantic/wisent/comp semantic/wisent semantic/wisent/wisent
semantic/util-modes semantic/util semantic semantic/tag semantic/lex
semantic/fw mode-local find-func cedet pdf-isearch let-alist pdf-misc
pdf-tools pdf-view derived pdf-cache pdf-info tq pdf-util pdf-macs
doc-view jka-compr image-mode exif ps-print ps-print-loaddefs lpr
lockywolf-downloaded-packages diminish shackle trace mic-paren cl
lockywolf-dired dired-x lockywolf-treesitter lockywolf-standard-packages
artist picture reporter rect eww url-queue thingatpt shr pixel-fill
kinsoku url-file svg dom puny mm-url gnus nnheader gnus-util range woman
man info-colors secrets dbus comp comp-cstr warnings xml locate dired
dired-loaddefs arc-mode archive-mode compile autorevert filenotify
elec-pair which-func imenu hl-line display-fill-column-indicator hi-lock
foldout edmacro kmacro noutline outline windmove bookmark
text-property-search savehist recentf tree-widget saveplace tramp-sh
tramp trampver tramp-integration files-x tramp-message tramp-compat xdg
shell pcomplete comint ansi-osc ring parse-time iso8601 time-date
format-spec ansi-color tramp-loaddefs super-save rmail rfc6068 rfc2047
rfc2045 ietf-drums mm-util mail-prsvr mail-utils image-file
image-converter cl-extra help-mode
lockywolf-handy-own-functions-keybindings lockywolf-basic-init xt-mouse
use-package-ensure-system-package system-packages cus-edit pp cus-load
icons wid-edit use-package use-package-ensure use-package-delight
use-package-diminish use-package-bind-key bind-key easy-mmode
use-package-core init-custom finder-inf 0blayout-autoloads
auctex-latexmk-autoloads auth-source-xoauth2-autoloads
bind-key-autoloads cdlatex-autoloads centered-cursor-mode-autoloads
chatgpt-shell-autoloads cmake-font-lock-autoloads cmake-mode-autoloads
color-identifiers-mode-autoloads anaconda-mode-autoloads
auctex-autoloads tex-site company-emoji-autoloads company-math-autoloads
ac-php-core-autoloads company-quickhelp-autoloads
company-shell-autoloads company-autoloads consult-eglot-autoloads
consult-autoloads csv-mode-autoloads debpaste-autoloads
diminish-autoloads djvu-autoloads ebib-autoloads elisp-depmap-autoloads
emms-info-mediainfo-autoloads emms-autoloads ess-autoloads
exwm-x-autoloads exwm-autoloads flycheck-ocaml-autoloads
flycheck-phpstan-autoloads flymake-easy-autoloads frecentf-autoloads
frecency-autoloads a-autoloads geiser-chez-autoloads
geiser-chibi-autoloads geiser-mit-autoloads geiser-racket-autoloads
geiser-stklos-autoloads geiser-autoloads flycheck-autoloads
gitlab-pipeline-autoloads ghub-autoloads go-mode-autoloads
graphviz-dot-mode-autoloads haskell-mode-autoloads
highlight-doxygen-autoloads highlight-escape-sequences-autoloads
highlight-indent-guides-autoloads highlight-parentheses-autoloads
hy-mode-autoloads i3wm-autoloads i3wm-config-mode-autoloads
imenu-list-autoloads info-colors-autoloads ivy-bibtex-autoloads
ivy-autoloads jabber-autoloads fsm-autoloads jupyter-autoloads
khardel-autoloads kotlin-mode-autoloads languagetool-autoloads
lua-mode-autoloads magit-todos-autoloads hl-todo-autoloads
markdown-preview-mode-autoloads markdown-mode-autoloads
math-symbol-lists-autoloads matlab-mode-autoloads merlin-autoloads
mermaid-mode-autoloads mermaid-ts-mode-autoloads
message-view-patch-autoloads magit-autoloads pcase git-commit-autoloads
mic-paren-autoloads mu4e-conversation-autoloads
mu4e-jump-to-list-autoloads nginx-mode-autoloads ob-hy-autoloads
ob-mermaid-autoloads ocaml-ts-mode-autoloads org-bib-mode-autoloads
org-contrib-autoloads org-download-autoloads org-imenu-autoloads
org-journal-autoloads org-mru-clock-autoloads org-pdftools-autoloads
org-noter-autoloads org-ref-autoloads citeproc-autoloads
bibtex-completion-autoloads biblio-autoloads biblio-core-autoloads
org-roam-autoloads magit-section-autoloads emacsql-autoloads
org-sidebar-autoloads org-ql-autoloads org-sticky-header-autoloads
org-super-agenda-autoloads org-xlatex-autoloads org2blog-autoloads
metaweblog-autoloads ov-autoloads ox-pandoc-autoloads paredit-autoloads
parsebib-autoloads pcre2el-autoloads pcsv-autoloads
pdf-drop-mode-autoloads pdf-view-pagemark-autoloads pdf-tools-autoloads
peg-autoloads persist-autoloads phpstan-autoloads php-mode-autoloads
pomm-autoloads alert-autoloads log4e-autoloads gntp-autoloads
pos-tip-autoloads pythonic-autoloads f-autoloads qml-mode-autoloads
qt-pro-mode-autoloads queue-autoloads rainbow-mode-autoloads
semi-autoloads flim-autoloads apel-autoloads shell-maker-autoloads
sml-mode-autoloads smog-autoloads spell-fu-autoloads
sr-speedbar-autoloads srv-autoloads string-inflection-autoloads
sudo-edit-autoloads tablist-autoloads telega-autoloads
rainbow-identifiers-autoloads transient-autoloads treemacs-autoloads
cfrs-autoloads posframe-autoloads ht-autoloads hydra-autoloads
pfuture-autoloads ace-window-autoloads avy-autoloads treepy-autoloads
ts-autoloads dash-autoloads tuareg-autoloads rx caml-autoloads cc-styles
cc-align cc-engine cc-vars cc-defs vdirel-autoloads helm-autoloads
popup-autoloads helm-core-autoloads async-autoloads org-vcard-autoloads
visual-fill-column-autoloads websocket-autoloads with-editor-autoloads
info compat-autoloads writegood-mode-autoloads xml-rpc-autoloads
yaml-mode-autoloads s-autoloads zmq-autoloads package browse-url url
url-proxy url-privacy url-expand url-methods url-history url-cookie
generate-lisp-file url-domsuf url-util mailcap url-handlers url-parse
auth-source cl-seq eieio eieio-core cl-macs password-cache json subr-x
map byte-opt gv bytecomp byte-compile url-vars cl-loaddefs cl-lib rmc
iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook
vc-hooks lisp-float-type elisp-mode mwheel term/x-win x-win
term/common-win x-dnd touch-screen 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 xwidget-internal dbusbind inotify lcms2 dynamic-setting
font-render-setting cairo gtk x-toolkit xinput2 x multi-tty move-toolbar
make-network-process native-compile emacs)

Memory information:
((conses 16 1523764 420437) (symbols 48 99499 0) (strings 32 382852 18970)
 (string-bytes 1 12879328) (vectors 16 147918) (vector-slots 8 3842385 201399)
 (floats 8 1392 9690) (intervals 56 11091 4667) (buffers 992 41))

-- 
Your sincerely,
Vladimir Nikishkin (MiEr, lockywolf)
(Laptop)
diff --git a/lisp/recentf.el b/lisp/recentf.el
index 94ae871763b..b9272cb672e 100644
--- a/lisp/recentf.el
+++ b/lisp/recentf.el
@@ -319,6 +319,11 @@ recentf-show-file-shortcuts-flag
 used as shortcuts to open the Nth file."
   :group 'recentf
   :type 'boolean)
+
+(defcustom recentf-verbose t
+  "Non-nil means to show debugging messages related to the recentf machinery."
+  :group 'recentf
+  :type 'boolean)
 
 ;;; Utilities
 ;;
@@ -1324,7 +1329,10 @@ recentf-save-list
                 (format ";; coding: %s\n" recentf-save-file-coding-system)
                 ";; End:\n")
         (write-region (point-min) (point-max)
-                      (expand-file-name recentf-save-file))
+                      (expand-file-name recentf-save-file)
+                      nil
+                      recentf-verbose
+                      )
         (when recentf-save-file-modes
           (set-file-modes recentf-save-file recentf-save-file-modes))
         nil)