Package: emacs;
Reported by: Harm Van der Vegt <harmvegt <at> gmail.com>
Date: Sat, 31 Aug 2024 19:34:02 UTC
Severity: normal
Found in version 29.1
Done: Eli Zaretskii <eliz <at> gnu.org>
Bug is archived. No further changes may be made.
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 72919 in the body.
You can then email your comments to 72919 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
View this report as an mbox folder, status mbox, maintainer mbox
bug-gnu-emacs <at> gnu.org
:bug#72919
; Package emacs
.
(Sat, 31 Aug 2024 19:34:02 GMT) Full text and rfc822 format available.Harm Van der Vegt <harmvegt <at> gmail.com>
:bug-gnu-emacs <at> gnu.org
.
(Sat, 31 Aug 2024 19:34:02 GMT) Full text and rfc822 format available.Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
From: Harm Van der Vegt <harmvegt <at> gmail.com> To: bug-gnu-emacs <at> gnu.org Subject: 29.1; chart-space-usage in chart.el does not work correctly on windows Date: Sat, 31 Aug 2024 20:52:41 +0200
[Message part 1 (text/plain, inline)]
Load the builtin chart package. When chart-space-usage is run, targeting any directory, chart fails to find any files and therefore can't create the chart. The expected behavior is that a bar chart is shown, ranking the files of the directory by size. This only fails on my Windows machine, it works on my Ubuntu installation. The output as shown in *Messages* is as follows: Collecting statistics... Running ‘cd g:/Shakespeare/;du -sk *’... Scanning output ... chart-space-usage: No files found! chart-space-usage makes use of the du (disk usage) utility, which might not be present on all machines. In my case I have du installed, but chart-space-usage still failed to find any files. I have patched chart-space-usage to remove the dependency on du and make it OS agnostic and attached the patch to this email. In GNU Emacs 29.1 (build 2, x86_64-w64-mingw32) of 2023-07-31 built on AVALON Windowing system distributor 'Microsoft Corp.', version 10.0.19045 System Description: Microsoft Windows 10 Home (v10.0.2009.19045.4780) Configured using: 'configure --with-modules --without-dbus --with-native-compilation=aot --without-compress-install --with-tree-sitter CFLAGS=-O2' Configured features: ACL GIF GMP GNUTLS HARFBUZZ JPEG JSON LCMS2 LIBXML2 MODULES NATIVE_COMP NOTIFY W32NOTIFY PDUMPER PNG RSVG SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER WEBP XPM ZLIB (NATIVE_COMP present but libgccjit not available) Important settings: value of $LANG: NLD locale-coding-system: cp1252 Major mode: ELisp/l Minor modes in effect: bug-reference-prog-mode: t erefactor-check-eval-mode: t erefactor-highlight-mode: t treemacs-filewatch-mode: t treemacs-follow-mode: t treemacs-git-mode: t treemacs-fringe-indicator-mode: t global-magit-file-mode: t magit-file-mode: t magit-auto-revert-mode: t auto-revert-mode: t global-git-commit-mode: t async-bytecomp-package-mode: t shell-dirtrack-mode: t server-mode: t which-key-mode: t global-corfu-mode: t corfu-mode: t marginalia-mode: t override-global-mode: t savehist-mode: t vertico-mode: t tooltip-mode: t global-eldoc-mode: t eldoc-mode: t show-paren-mode: t electric-indent-mode: t mouse-wheel-mode: t tool-bar-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t blink-cursor-mode: t line-number-mode: t transient-mark-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t Load-path shadows: c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ox hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ox c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ox-texinfo hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ox-texinfo c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ox-publish hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ox-publish c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ox-org hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ox-org c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ox-odt hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ox-odt c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ox-md hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ox-md c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ox-man hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ox-man c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ox-latex hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ox-latex c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ox-icalendar hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ox-icalendar c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ox-html hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ox-html c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ox-beamer hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ox-beamer c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ox-ascii hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ox-ascii c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-version hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-version c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-timer hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-timer c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-tempo hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-tempo c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-table hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-table c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-src hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-src c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-protocol hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-protocol c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-plot hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-plot c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-pcomplete hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-pcomplete c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-num hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-num c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-mouse hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-mouse c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-mobile hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-mobile c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-macs hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-macs c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-macro hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-macro c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-loaddefs hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-loaddefs c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-list hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-list c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-lint hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-lint c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-keys hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-keys c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-install hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-install c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-inlinetask hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-inlinetask c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-indent hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-indent c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-id hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-id c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-habit hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-habit c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-goto hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-goto c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-footnote hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-footnote c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-feed hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-feed c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-faces hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-faces c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-entities hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-entities c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-element hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-element c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-duration hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-duration c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-datetree hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-datetree c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-ctags hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-ctags c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-crypt hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-crypt c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-compat hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-compat c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-colview hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-colview c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-clock hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-clock c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-capture hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-capture c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-attach hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-attach c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-attach-git hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-attach-git c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-archive hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-archive c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-agenda hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-agenda c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ol hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ol c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ol-w3m hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ol-w3m c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ol-rmail hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ol-rmail c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ol-mhe hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ol-mhe c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ol-irc hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ol-irc c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ol-info hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ol-info c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ol-gnus hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ol-gnus c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ol-eww hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ol-eww c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ol-eshell hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ol-eshell c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ol-docview hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ol-docview c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ol-bibtex hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ol-bibtex c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ol-bbdb hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ol-bbdb c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-vala hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-vala c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-tangle hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-tangle c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-table hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-table c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-stan hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-stan c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-sqlite hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-sqlite c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-sql hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-sql c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-shen hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-shen c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-shell hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-shell c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-sed hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-sed c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-screen hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-screen c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-scheme hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-scheme c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-sass hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-sass c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-ruby hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-ruby c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-ref hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-ref c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-R hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-R c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-python hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-python c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-processing hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-processing c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-plantuml hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-plantuml c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-picolisp hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-picolisp c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-perl hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-perl c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-org hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-org c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-octave hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-octave c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-ocaml hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-ocaml c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-mscgen hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-mscgen c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-maxima hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-maxima c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-matlab hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-matlab c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-makefile hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-makefile c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-lua hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-lua c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-lob hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-lob c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-lisp hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-lisp c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-lilypond hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-lilypond c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-ledger hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-ledger c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-latex hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-latex c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-js hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-js c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-java hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-java c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-J hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-J c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-io hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-io c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-hledger hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-hledger c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-haskell hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-haskell c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-groovy hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-groovy c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-gnuplot hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-gnuplot c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-fortran hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-fortran c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-forth hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-forth c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-exp hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-exp c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-eval hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-eval c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-eshell hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-eshell c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-emacs-lisp hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-emacs-lisp c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-ebnf hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-ebnf c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-dot hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-dot c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-ditaa hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-ditaa c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-css hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-css c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-core hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-core c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-coq hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-coq c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-comint hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-comint c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-clojure hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-clojure c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-calc hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-calc c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-C hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-C c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-awk hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-awk c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-asymptote hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-asymptote c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-abc hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-abc c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/transient-20200622.2050/transient hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/transient c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/use-package-20201110.2133/use-package hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/use-package/use-package c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/use-package-20201110.2133/use-package-lint hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/use-package/use-package-lint c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/use-package-20201110.2133/use-package-jump hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/use-package/use-package-jump c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/use-package-20201110.2133/use-package-ensure hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/use-package/use-package-ensure c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/use-package-20201110.2133/use-package-diminish hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/use-package/use-package-diminish c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/use-package-20201110.2133/use-package-delight hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/use-package/use-package-delight c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/use-package-20201110.2133/use-package-core hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/use-package/use-package-core c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/use-package-20201110.2133/use-package-bind-key hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/use-package/use-package-bind-key c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/bind-key-20200805.1727/bind-key hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/use-package/bind-key c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ox hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ox c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ox-texinfo hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ox-texinfo c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ox-publish hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ox-publish c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ox-org hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ox-org c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ox-odt hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ox-odt c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ox-md hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ox-md c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ox-man hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ox-man c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ox-latex hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ox-latex c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ox-koma-letter hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ox-koma-letter c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ox-icalendar hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ox-icalendar c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ox-html hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ox-html c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ox-beamer hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ox-beamer c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ox-ascii hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ox-ascii c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-version hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-version c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-timer hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-timer c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-tempo hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-tempo c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-table hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-table c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-src hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-src c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-refile hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-refile c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-protocol hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-protocol c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-plot hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-plot c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-pcomplete hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-pcomplete c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-num hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-num c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-mouse hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-mouse c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-mobile hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-mobile c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-macs hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-macs c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-macro hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-macro c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-loaddefs hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-loaddefs c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-list hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-list c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-lint hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-lint c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-keys hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-keys c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-inlinetask hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-inlinetask c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-indent hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-indent c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-id hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-id c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-habit hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-habit c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-goto hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-goto c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-footnote hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-footnote c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-feed hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-feed c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-faces hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-faces c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-entities hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-entities c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-element hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-element c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-duration hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-duration c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-datetree hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-datetree c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-ctags hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-ctags c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-crypt hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-crypt c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-compat hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-compat c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-colview hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-colview c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-clock hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-clock c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-capture hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-capture c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-attach hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-attach c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-attach-git hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-attach-git c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-archive hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-archive c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-agenda hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-agenda c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ol hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ol c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ol-w3m hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ol-w3m c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ol-rmail hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ol-rmail c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ol-mhe hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ol-mhe c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ol-man hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ol-man c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ol-irc hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ol-irc c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ol-info hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ol-info c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ol-gnus hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ol-gnus c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ol-eww hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ol-eww c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ol-eshell hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ol-eshell c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ol-docview hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ol-docview c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ol-bibtex hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ol-bibtex c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ol-bbdb hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ol-bbdb c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-tangle hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-tangle c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-table hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-table c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-sqlite hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-sqlite c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-sql hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-sql c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-shell hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-shell c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-sed hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-sed c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-screen hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-screen c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-scheme hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-scheme c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-sass hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-sass c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-ruby hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-ruby c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-ref hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-ref c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-R hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-R c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-python hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-python c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-processing hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-processing c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-plantuml hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-plantuml c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-perl hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-perl c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-org hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-org c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-octave hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-octave c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-ocaml hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-ocaml c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-maxima hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-maxima c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-matlab hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-matlab c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-makefile hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-makefile c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-lua hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-lua c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-lob hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-lob c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-lisp hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-lisp c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-lilypond hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-lilypond c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-latex hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-latex c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-julia hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-julia c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-js hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-js c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-java hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-java c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-haskell hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-haskell c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-groovy hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-groovy c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-gnuplot hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-gnuplot c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-fortran hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-fortran c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-forth hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-forth c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-exp hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-exp c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-eval hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-eval c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-eshell hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-eshell c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-emacs-lisp hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-emacs-lisp c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-dot hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-dot c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-ditaa hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-ditaa c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-css hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-css c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-core hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-core c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-comint hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-comint c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-clojure hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-clojure c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-calc hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-calc c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-C hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-C c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-awk hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-awk Features: (shadow sort mail-extr emacsbug sh-script smie treesit executable files-x whitespace magit-patch magit-subtree magit-ediff ediff ediff-merg ediff-mult ediff-wind ediff-diff ediff-help ediff-init ediff-util misearch multi-isearch magit-extras checkdoc shortdoc help-fns radix-tree bug-reference vc-git vc-dispatcher cus-edit cus-start cus-load wid-edit dired-aux display-line-numbers treemacs-bookmarks treemacs-tags xref magit-bookmark bookmark pp chart lisp-mnt mule-util erefactor flymake-proc flymake project compile thingatpt gptel gptel-openai treemacs treemacs-header-line treemacs-compatibility treemacs-mode treemacs-interface treemacs-persistence treemacs-filewatch-mode treemacs-follow-mode treemacs-rendering treemacs-annotations treemacs-async treemacs-workspaces treemacs-dom treemacs-visuals treemacs-fringe-indicator pulse color treemacs-faces treemacs-icons treemacs-scope treemacs-themes treemacs-core-utils pfuture inline hl-line ht treemacs-logging treemacs-customization treemacs-macros pcase s magit-submodule magit-obsolete 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 which-func imenu magit-diff smerge-mode diff diff-mode magit-core magit-autorevert autorevert filenotify magit-margin magit-transient magit-process magit-mode git-commit transient magit-git magit-section magit-utils crm log-edit message sendmail yank-media puny dired dired-loaddefs rfc822 mml mml-sec epa derived epg rfc6068 epg-config gnus-util text-property-search mm-decode mm-bodies mm-encode mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr mailabbrev mail-utils gmm-utils mailheader pcvs-util add-log with-editor comp comp-cstr warnings rx async-bytecomp async shell server dash which-key corfu edmacro kmacro marginalia use-package-bind-key bind-key easy-mmode savehist orderless vertico compat cl-extra help-mode use-package-ensure use-package-core finder-inf org-checklist org ob ob-tangle ob-ref ob-lob ob-table ob-exp org-macro org-footnote org-src ob-comint org-pcomplete pcomplete comint ansi-osc ansi-color ring org-list org-faces org-entities time-date noutline outline icons org-version ob-emacs-lisp ob-core ob-eval org-table ol org-keys org-compat advice org-macs org-loaddefs format-spec find-func cal-menu calendar cal-loaddefs corfu-autoloads devdocs-autoloads embark-autoloads erefactor-autoloads gptel-autoloads marginalia-autoloads orderless-autoloads treemacs-autoloads cfrs-autoloads posframe-autoloads ht-autoloads hydra-autoloads lv-autoloads pfuture-autoloads ace-window-autoloads avy-autoloads vertico-autoloads compat-autoloads which-key-autoloads info yaml-mode-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 dos-w32 ls-lisp disp-table term/w32-win w32-win w32-vars term/common-win 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 w32notify w32 lcms2 multi-tty make-network-process native-compile emacs) Memory information: ((conses 16 604727 66916) (symbols 48 32728 0) (strings 32 171750 4795) (string-bytes 1 5874342) (vectors 16 64504) (vector-slots 8 1649805 128430) (floats 8 345 545) (intervals 56 7272 265) (buffers 984 34))
[Message part 2 (text/html, inline)]
[0001-Make-chart-space-usage-OS-independent.patch (application/octet-stream, attachment)]
bug-gnu-emacs <at> gnu.org
:bug#72919
; Package emacs
.
(Sun, 01 Sep 2024 08:15:02 GMT) Full text and rfc822 format available.Message #8 received at 72919 <at> debbugs.gnu.org (full text, mbox):
From: Eli Zaretskii <eliz <at> gnu.org> To: Harm Van der Vegt <harmvegt <at> gmail.com> Cc: 72919 <at> debbugs.gnu.org Subject: Re: bug#72919: 29.1; chart-space-usage in chart.el does not work correctly on windows Date: Sun, 01 Sep 2024 11:13:40 +0300
> From: Harm Van der Vegt <harmvegt <at> gmail.com> > Date: Sat, 31 Aug 2024 20:52:41 +0200 > > Load the builtin chart package. When chart-space-usage is run, targeting > any directory, chart fails to find any files and therefore can't create > the chart. The expected behavior is that a bar chart is shown, ranking > the files of the directory by size. > > This only fails on my Windows machine, it works on my Ubuntu > installation. > > The output as shown in *Messages* is as follows: > > Collecting statistics... > Running ‘cd g:/Shakespeare/;du -sk *’... > Scanning output ... > chart-space-usage: No files found! Yes, the current implementation is not portable. > chart-space-usage makes use of the du (disk usage) utility, which might > not be present on all machines. In my case I have du installed, but > chart-space-usage still failed to find any files. > > I have patched chart-space-usage to remove the dependency on du and make > it OS agnostic and attached the patch to this email. Thanks. However, I think your changes are not entirely correct: they fail to account for space usage of files inside subdirectories of the directory which the user types at the prompt, whereas the implementation with "du" does account for that. In addition, I think if someone has 'du' on Windows, it should be used. So I came up with the following changes instead. Could you please try them, both with and without du.exe on PATH? If these changes give good results, I will install them. diff --git a/lisp/emacs-lisp/chart.el b/lisp/emacs-lisp/chart.el index da61e45..03dbe33 100644 --- a/lisp/emacs-lisp/chart.el +++ b/lisp/emacs-lisp/chart.el @@ -641,27 +641,63 @@ chart-file-count (lambda (a b) (> (cdr a) (cdr b)))) )) +;; This assumes 4KB blocks +(defun chart--file-size (size) + (* (/ (+ size 4095) 4096) 4096)) + +(defun chart--directory-size (dir) + "Compute total size of files in directory DIR and its subdirectories. +DIR is assumed to be a directory, verified by the caller." + (let ((size 0)) + (dolist (file (directory-files-recursively dir "." t)) + (let ((fsize (nth 7 (file-attributes file)))) + (if (> fsize 0) + (setq size + (+ size (chart--file-size fsize)))))) + size)) + (defun chart-space-usage (d) "Display a top usage chart for directory D." (interactive "DDirectory: ") (message "Collecting statistics...") (let ((nmlst nil) (cntlst nil) - (b (get-buffer-create " *du-tmp*"))) - (set-buffer b) - (erase-buffer) - (insert "cd " d ";du -sk * \n") - (message "Running `cd %s;du -sk *'..." d) - (call-process-region (point-min) (point-max) shell-file-name t - (current-buffer) nil) - (goto-char (point-min)) - (message "Scanning output ...") - (while (re-search-forward "^\\([0-9]+\\)[ \t]+\\([^ \n]+\\)$" nil t) - (let* ((nam (buffer-substring (match-beginning 2) (match-end 2))) - (num (buffer-substring (match-beginning 1) (match-end 1)))) - (setq nmlst (cons nam nmlst) - ;; * 1000 to put it into bytes - cntlst (cons (* (string-to-number num) 1000) cntlst)))) + b) + (if (executable-find "du") + (progn + (setq b (get-buffer-create " *du-tmp*")) + (set-buffer b) + (erase-buffer) + (if (and (memq system-type '(windows-nt ms-dos)) + (fboundp 'w32-shell-dos-semantics) + (w32-shell-dos-semantics)) + (progn + ;; With Windows shells, 'cd' does not change the drive, + ;; and ';' is not reliable for running multiple + ;; commands, so use alternatives. We quote the + ;; directory because otherwise pushd will barf on a + ;; directory with forward slashes. + (insert "pushd \"" d "\" && du -sk * \n") + (message "Running `pushd \"%s\" && du -sk *'..." d)) + (insert "cd " d ";du -sk * \n") + (message "Running `cd %s;du -sk *'..." d)) + (call-process-region (point-min) (point-max) shell-file-name t + (current-buffer) nil) + (goto-char (point-min)) + (message "Scanning output ...") + (while (re-search-forward "^\\([0-9]+\\)[ \t]+\\([^ \n]+\\)$" nil t) + (let* ((nam (buffer-substring (match-beginning 2) (match-end 2))) + (num (buffer-substring (match-beginning 1) (match-end 1)))) + (setq nmlst (cons nam nmlst) + ;; * 1000 to put it into bytes + cntlst (cons (* (string-to-number num) 1000) cntlst))))) + (dolist (file (directory-files d t directory-files-no-dot-files-regexp)) + (setq nmlst (cons (file-name-nondirectory file) nmlst)) + (if (file-regular-p file) + (setq cntlst (cons (chart--file-size + (nth 7 (file-attributes file))) + cntlst)) + (setq cntlst (cons (chart--directory-size file) cntlst))))) (if (not nmlst) (error "No files found!")) (chart-bar-quickie 'vertical (format "Largest files in %s" d)
bug-gnu-emacs <at> gnu.org
:bug#72919
; Package emacs
.
(Sun, 01 Sep 2024 18:37:01 GMT) Full text and rfc822 format available.Message #11 received at 72919 <at> debbugs.gnu.org (full text, mbox):
From: Eli Zaretskii <eliz <at> gnu.org> To: Harm Van der Vegt <harmvegt <at> gmail.com> Cc: 72919 <at> debbugs.gnu.org Subject: Re: bug#72919: 29.1; chart-space-usage in chart.el does not work correctly on windows Date: Sun, 01 Sep 2024 21:35:03 +0300
[Please use Reply All to reply, so that the bug tracker is CC'ed.] > From: Harm Van der Vegt <harmvegt <at> gmail.com> > Date: Sun, 1 Sep 2024 20:11:39 +0200 > > >Thanks. However, I think your changes are not entirely correct: they > >fail to account for space usage of files inside subdirectories of the > >directory which the user types at the prompt, whereas the > >implementation with "du" does account for that. > > That is indeed a pretty major difference, my bad! > > >In addition, I think if someone has 'du' on Windows, it should be used. > > Is there a preference for using system binaries above elisp for cases like these? I think 'du' has some tricks up its sleeve (like accounting correctly for block size), which a Lisp implementation can only approximate. I don't think minor differences matter here, since this command is just an illustration of what chart.el can be used for, but I do want to use 'du' if it's available. > >So I came up with the following changes instead. Could you please try > >them, both with and without du.exe on PATH? If these changes give > >good results, I will install them. > > Thanks. > > I've tried your changes with and without du. This uncovered something in the > original implementation, namely that the original implementation did not count > hidden files and directories. du * skips dotfiles for me. > > With du present chart-space-usage shows the lisp directory as the largest in the > emacs repository root. Without du it shows .git as the largest. This just means minor adjustments in the code I posted: we need to use a different regexp in the call to directory-files-recursively, and also ignore files that start with a dot in the command itself. I will make those changes, thanks for pointing them out > I'm not sure which output is the wanted output. I think we want to be as close to 'du' as possible. > I've attempted to find a shell independent way to have du show dotfiles, but it > appears to be rather tricky. I don't think we want that. > I've made a new patch that makes the elisp implementation recursive, uses the > rounding function provided by you and shows dotfiles. I'd prefer to avoid recursion (in addition to what directory-files-recursively already does), because that could overflow the stack. I will post a version that ignores dotfiles. Here's the version you sent, repeated for the bug tracker: >From 6f53d65f9ae5e1c61a2ca2650b149c895ce9794c Mon Sep 17 00:00:00 2001 >From: Harm van der Vegt <harmvegt <at> gmail.com> Date: Sun, 1 Sep 2024 20:03:34 +0200 Subject: [PATCH] Make chart-space-usage OS and shell independent --- lisp/emacs-lisp/chart.el | 41 +++++++++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/lisp/emacs-lisp/chart.el b/lisp/emacs-lisp/chart.el index c195ccb7165..b0302b55278 100644 --- a/lisp/emacs-lisp/chart.el +++ b/lisp/emacs-lisp/chart.el @@ -641,27 +641,44 @@ SORT-PRED if desired." (lambda (a b) (> (cdr a) (cdr b)))) )) +;; This assumes 4KB blocks +(defun chart--file-size (size) + (* (/ (+ size 4095) 4096) 4096)) + +(defun chart--directory-size (dir) + "Compute total size of files in directory DIR and its subdirectories. +DIR is assumed to be a directory, verified by the caller." + (let ((total-size 0)) + (dolist (file (directory-files dir t directory-files-no-dot-files-regexp)) + (cond + ((file-regular-p file) + (setq total-size (+ total-size (chart--file-size (nth 7 (file-attributes file)))))) + ((file-directory-p file) + (setq total-size (+ total-size (chart--directory-size file)))))) + total-size)) + (defun chart-space-usage (d) "Display a top usage chart for directory D." (interactive "DDirectory: ") (message "Collecting statistics...") (let ((nmlst nil) - (cntlst nil)) - (dolist (file (directory-files d t)) - (when (file-regular-p file) - (let ((size (nth 7 (file-attributes file)))) + (cntlst nil)) + + (dolist (file (directory-files d t directory-files-no-dot-files-regexp)) + (let ((size (if (file-regular-p file) + (nth 7 (file-attributes file)) + (chart--directory-size file)))) (setq nmlst (cons (file-name-nondirectory file) nmlst)) - (setq cntlst (cons size cntlst))))) + (setq cntlst (cons (chart--file-size size) cntlst)))) (if (not nmlst) - (error "No files found!")) - - ;; Display the chart if files are found + (error "No files found!")) (chart-bar-quickie 'vertical (format "Largest files in %s" d) - nmlst "File Name" - cntlst "File Size" - 10 - (lambda (a b) (> (cdr a) (cdr b)))))) + nmlst "File Name" + cntlst "File Size" + 10 + (lambda (a b) (> (cdr a) (cdr b)))) + )) (defun chart-emacs-storage () "Chart the current storage requirements of Emacs." -- 2.11.0.windows.3
bug-gnu-emacs <at> gnu.org
:bug#72919
; Package emacs
.
(Sun, 01 Sep 2024 21:48:05 GMT) Full text and rfc822 format available.Message #14 received at 72919 <at> debbugs.gnu.org (full text, mbox):
From: Harm Van der Vegt <harmvegt <at> gmail.com> To: 72919 <at> debbugs.gnu.org Subject: Fwd: bug#72919: 29.1; chart-space-usage in chart.el does not work correctly on windows Date: Sun, 1 Sep 2024 20:16:15 +0200
[Message part 1 (text/plain, inline)]
---------- Forwarded message --------- Van: Harm Van der Vegt <harmvegt <at> gmail.com> Date: zo 1 sep 2024 om 20:11 Subject: Re: bug#72919: 29.1; chart-space-usage in chart.el does not work correctly on windows To: Eli Zaretskii <eliz <at> gnu.org> >Thanks. However, I think your changes are not entirely correct: they >fail to account for space usage of files inside subdirectories of the >directory which the user types at the prompt, whereas the >implementation with "du" does account for that. That is indeed a pretty major difference, my bad! >In addition, I think if someone has 'du' on Windows, it should be used. Is there a preference for using system binaries above elisp for cases like these? >So I came up with the following changes instead. Could you please try >them, both with and without du.exe on PATH? If these changes give >good results, I will install them. Thanks. I've tried your changes with and without du. This uncovered something in the original implementation, namely that the original implementation did not count hidden files and directories. du * skips dotfiles for me. With du present chart-space-usage shows the lisp directory as the largest in the emacs repository root. Without du it shows .git as the largest. I'm not sure which output is the wanted output. I've attempted to find a shell independent way to have du show dotfiles, but it appears to be rather tricky. I've made a new patch that makes the elisp implementation recursive, uses the rounding function provided by you and shows dotfiles. Op zo 1 sep 2024 om 10:13 schreef Eli Zaretskii <eliz <at> gnu.org>: > > From: Harm Van der Vegt <harmvegt <at> gmail.com> > > Date: Sat, 31 Aug 2024 20:52:41 +0200 > > > > Load the builtin chart package. When chart-space-usage is run, targeting > > any directory, chart fails to find any files and therefore can't create > > the chart. The expected behavior is that a bar chart is shown, ranking > > the files of the directory by size. > > > > This only fails on my Windows machine, it works on my Ubuntu > > installation. > > > > The output as shown in *Messages* is as follows: > > > > Collecting statistics... > > Running ‘cd g:/Shakespeare/;du -sk *’... > > Scanning output ... > > chart-space-usage: No files found! > > Yes, the current implementation is not portable. > > > chart-space-usage makes use of the du (disk usage) utility, which might > > not be present on all machines. In my case I have du installed, but > > chart-space-usage still failed to find any files. > > > > I have patched chart-space-usage to remove the dependency on du and make > > it OS agnostic and attached the patch to this email. > > Thanks. However, I think your changes are not entirely correct: they > fail to account for space usage of files inside subdirectories of the > directory which the user types at the prompt, whereas the > implementation with "du" does account for that. In addition, I think > if someone has 'du' on Windows, it should be used. > > So I came up with the following changes instead. Could you please try > them, both with and without du.exe on PATH? If these changes give > good results, I will install them. > > diff --git a/lisp/emacs-lisp/chart.el b/lisp/emacs-lisp/chart.el > index da61e45..03dbe33 100644 > --- a/lisp/emacs-lisp/chart.el > +++ b/lisp/emacs-lisp/chart.el > @@ -641,27 +641,63 @@ chart-file-count > (lambda (a b) (> (cdr a) (cdr b)))) > )) > > +;; This assumes 4KB blocks > +(defun chart--file-size (size) > + (* (/ (+ size 4095) 4096) 4096)) > + > +(defun chart--directory-size (dir) > + "Compute total size of files in directory DIR and its subdirectories. > +DIR is assumed to be a directory, verified by the caller." > + (let ((size 0)) > + (dolist (file (directory-files-recursively dir "." t)) > + (let ((fsize (nth 7 (file-attributes file)))) > + (if (> fsize 0) > + (setq size > + (+ size (chart--file-size fsize)))))) > + size)) > + > (defun chart-space-usage (d) > "Display a top usage chart for directory D." > (interactive "DDirectory: ") > (message "Collecting statistics...") > (let ((nmlst nil) > (cntlst nil) > - (b (get-buffer-create " *du-tmp*"))) > - (set-buffer b) > - (erase-buffer) > - (insert "cd " d ";du -sk * \n") > - (message "Running `cd %s;du -sk *'..." d) > - (call-process-region (point-min) (point-max) shell-file-name t > - (current-buffer) nil) > - (goto-char (point-min)) > - (message "Scanning output ...") > - (while (re-search-forward "^\\([0-9]+\\)[ \t]+\\([^ \n]+\\)$" nil t) > - (let* ((nam (buffer-substring (match-beginning 2) (match-end 2))) > - (num (buffer-substring (match-beginning 1) (match-end 1)))) > - (setq nmlst (cons nam nmlst) > - ;; * 1000 to put it into bytes > - cntlst (cons (* (string-to-number num) 1000) cntlst)))) > + b) > + (if (executable-find "du") > + (progn > + (setq b (get-buffer-create " *du-tmp*")) > + (set-buffer b) > + (erase-buffer) > + (if (and (memq system-type '(windows-nt ms-dos)) > + (fboundp 'w32-shell-dos-semantics) > + (w32-shell-dos-semantics)) > + (progn > + ;; With Windows shells, 'cd' does not change the drive, > + ;; and ';' is not reliable for running multiple > + ;; commands, so use alternatives. We quote the > + ;; directory because otherwise pushd will barf on a > + ;; directory with forward slashes. > + (insert "pushd \"" d "\" && du -sk * \n") > + (message "Running `pushd \"%s\" && du -sk *'..." d)) > + (insert "cd " d ";du -sk * \n") > + (message "Running `cd %s;du -sk *'..." d)) > + (call-process-region (point-min) (point-max) shell-file-name t > + (current-buffer) nil) > + (goto-char (point-min)) > + (message "Scanning output ...") > + (while (re-search-forward "^\\([0-9]+\\)[ \t]+\\([^ \n]+\\)$" > nil t) > + (let* ((nam (buffer-substring (match-beginning 2) (match-end > 2))) > + (num (buffer-substring (match-beginning 1) (match-end > 1)))) > + (setq nmlst (cons nam nmlst) > + ;; * 1000 to put it into bytes > + cntlst (cons (* (string-to-number num) 1000) > cntlst))))) > + (dolist (file (directory-files d t > directory-files-no-dot-files-regexp)) > + (setq nmlst (cons (file-name-nondirectory file) nmlst)) > + (if (file-regular-p file) > + (setq cntlst (cons (chart--file-size > + (nth 7 (file-attributes file))) > + cntlst)) > + (setq cntlst (cons (chart--directory-size file) cntlst))))) > (if (not nmlst) > (error "No files found!")) > (chart-bar-quickie 'vertical (format "Largest files in %s" d) >
[Message part 2 (text/html, inline)]
[0001-Make-chart-space-usage-OS-and-shell-independent.patch (application/x-patch, attachment)]
bug-gnu-emacs <at> gnu.org
:bug#72919
; Package emacs
.
(Sun, 01 Sep 2024 21:48:06 GMT) Full text and rfc822 format available.Message #17 received at 72919 <at> debbugs.gnu.org (full text, mbox):
From: Harm Van der Vegt <harmvegt <at> gmail.com> To: Eli Zaretskii <eliz <at> gnu.org> Cc: 72919 <at> debbugs.gnu.org Subject: Re: bug#72919: 29.1; chart-space-usage in chart.el does not work correctly on windows Date: Sun, 1 Sep 2024 21:06:58 +0200
[Message part 1 (text/plain, inline)]
Clear, thanks for the response! Op zo 1 sep 2024 om 20:35 schreef Eli Zaretskii <eliz <at> gnu.org>: > [Please use Reply All to reply, so that the bug tracker is CC'ed.] > > > From: Harm Van der Vegt <harmvegt <at> gmail.com> > > Date: Sun, 1 Sep 2024 20:11:39 +0200 > > > > >Thanks. However, I think your changes are not entirely correct: they > > >fail to account for space usage of files inside subdirectories of the > > >directory which the user types at the prompt, whereas the > > >implementation with "du" does account for that. > > > > That is indeed a pretty major difference, my bad! > > > > >In addition, I think if someone has 'du' on Windows, it should be used. > > > > Is there a preference for using system binaries above elisp for cases > like these? > > I think 'du' has some tricks up its sleeve (like accounting correctly > for block size), which a Lisp implementation can only approximate. I > don't think minor differences matter here, since this command is just > an illustration of what chart.el can be used for, but I do want to use > 'du' if it's available. > > > >So I came up with the following changes instead. Could you please try > > >them, both with and without du.exe on PATH? If these changes give > > >good results, I will install them. > > > > Thanks. > > > > I've tried your changes with and without du. This uncovered something in > the > > original implementation, namely that the original implementation did not > count > > hidden files and directories. du * skips dotfiles for me. > > > > With du present chart-space-usage shows the lisp directory as the > largest in the > > emacs repository root. Without du it shows .git as the largest. > > This just means minor adjustments in the code I posted: we need to use > a different regexp in the call to directory-files-recursively, and > also ignore files that start with a dot in the command itself. I will > make those changes, thanks for pointing them out > > > I'm not sure which output is the wanted output. > > I think we want to be as close to 'du' as possible. > > > I've attempted to find a shell independent way to have du show dotfiles, > but it > > appears to be rather tricky. > > I don't think we want that. > > > I've made a new patch that makes the elisp implementation recursive, > uses the > > rounding function provided by you and shows dotfiles. > > I'd prefer to avoid recursion (in addition to what > directory-files-recursively already does), because that could overflow > the stack. > > I will post a version that ignores dotfiles. > > Here's the version you sent, repeated for the bug tracker: > > >From 6f53d65f9ae5e1c61a2ca2650b149c895ce9794c Mon Sep 17 00:00:00 2001 > >From: Harm van der Vegt <harmvegt <at> gmail.com> > Date: Sun, 1 Sep 2024 20:03:34 +0200 > Subject: [PATCH] Make chart-space-usage OS and shell independent > > --- > lisp/emacs-lisp/chart.el | 41 +++++++++++++++++++++++++++++------------ > 1 file changed, 29 insertions(+), 12 deletions(-) > > diff --git a/lisp/emacs-lisp/chart.el b/lisp/emacs-lisp/chart.el > index c195ccb7165..b0302b55278 100644 > --- a/lisp/emacs-lisp/chart.el > +++ b/lisp/emacs-lisp/chart.el > @@ -641,27 +641,44 @@ SORT-PRED if desired." > (lambda (a b) (> (cdr a) (cdr b)))) > )) > > +;; This assumes 4KB blocks > +(defun chart--file-size (size) > + (* (/ (+ size 4095) 4096) 4096)) > + > +(defun chart--directory-size (dir) > + "Compute total size of files in directory DIR and its subdirectories. > +DIR is assumed to be a directory, verified by the caller." > + (let ((total-size 0)) > + (dolist (file (directory-files dir t > directory-files-no-dot-files-regexp)) > + (cond > + ((file-regular-p file) > + (setq total-size (+ total-size (chart--file-size (nth 7 > (file-attributes file)))))) > + ((file-directory-p file) > + (setq total-size (+ total-size (chart--directory-size file)))))) > + total-size)) > + > (defun chart-space-usage (d) > "Display a top usage chart for directory D." > (interactive "DDirectory: ") > (message "Collecting statistics...") > (let ((nmlst nil) > - (cntlst nil)) > - (dolist (file (directory-files d t)) > - (when (file-regular-p file) > - (let ((size (nth 7 (file-attributes file)))) > + (cntlst nil)) > + > + (dolist (file (directory-files d t > directory-files-no-dot-files-regexp)) > + (let ((size (if (file-regular-p file) > + (nth 7 (file-attributes file)) > + (chart--directory-size file)))) > (setq nmlst (cons (file-name-nondirectory file) nmlst)) > - (setq cntlst (cons size cntlst))))) > + (setq cntlst (cons (chart--file-size size) cntlst)))) > > (if (not nmlst) > - (error "No files found!")) > - > - ;; Display the chart if files are found > + (error "No files found!")) > (chart-bar-quickie 'vertical (format "Largest files in %s" d) > - nmlst "File Name" > - cntlst "File Size" > - 10 > - (lambda (a b) (> (cdr a) (cdr b)))))) > + nmlst "File Name" > + cntlst "File Size" > + 10 > + (lambda (a b) (> (cdr a) (cdr b)))) > + )) > > (defun chart-emacs-storage () > "Chart the current storage requirements of Emacs." > -- > 2.11.0.windows.3 > >
[Message part 2 (text/html, inline)]
Eli Zaretskii <eliz <at> gnu.org>
:Harm Van der Vegt <harmvegt <at> gmail.com>
:Message #22 received at 72919-done <at> debbugs.gnu.org (full text, mbox):
From: Eli Zaretskii <eliz <at> gnu.org> To: harmvegt <at> gmail.com Cc: 72919-done <at> debbugs.gnu.org Subject: Re: bug#72919: 29.1; chart-space-usage in chart.el does not work correctly on windows Date: Sat, 07 Sep 2024 12:24:21 +0300
> Cc: 72919 <at> debbugs.gnu.org > Date: Sun, 01 Sep 2024 21:35:03 +0300 > From: Eli Zaretskii <eliz <at> gnu.org> > > > I've tried your changes with and without du. This uncovered something in the > > original implementation, namely that the original implementation did not count > > hidden files and directories. du * skips dotfiles for me. > > > > With du present chart-space-usage shows the lisp directory as the largest in the > > emacs repository root. Without du it shows .git as the largest. > > This just means minor adjustments in the code I posted: we need to use > a different regexp in the call to directory-files-recursively, and > also ignore files that start with a dot in the command itself. I will > make those changes, thanks for pointing them out Actually, there's more here than meets the eye. 'du' does NOT skip dotfiles (unless instructed to do so via the --exclude= command-line option). What happens here is that a typical Unix shell does not include dotfiles in the expansion of the "*" wildcard, so "du *" does not count dotfiles, but only in the directory in which 'du' was invoked; dotfiles in subdirectories _are_ counted. I made the Lisp implementation skip dotfiles in the directory for which the command is invoked, but not in the subdirectories. Windows users who do have 'du' installed will now depend on how "*" is expanded, which is probably different in different ports of 'du'. I considered using --exclude=, but that would exclude dotfiles in subdirectories as well, which is not what happens in the Unix case. > I will post a version that ignores dotfiles. I installed a modified version on the emacs-30 branch. The patch is below in case you want to try it. With that, I'm closing this bug. diff --git a/lisp/emacs-lisp/chart.el b/lisp/emacs-lisp/chart.el index da61e45..2ca9b64 100644 --- a/lisp/emacs-lisp/chart.el +++ b/lisp/emacs-lisp/chart.el @@ -641,27 +641,68 @@ chart-file-count (lambda (a b) (> (cdr a) (cdr b)))) )) +;; This assumes 4KB blocks +(defun chart--file-size (size) + (* (/ (+ size 4095) 4096) 4096)) + +(defun chart--directory-size (dir) + "Compute total size of files in directory DIR and its subdirectories. +DIR is assumed to be a directory, verified by the caller." + (let ((size 0)) + (dolist (file (directory-files-recursively dir "." t)) + (let ((fsize (nth 7 (file-attributes file)))) + (if (> fsize 0) + (setq size + (+ size (chart--file-size fsize)))))) + size)) + (defun chart-space-usage (d) "Display a top usage chart for directory D." (interactive "DDirectory: ") (message "Collecting statistics...") (let ((nmlst nil) (cntlst nil) - (b (get-buffer-create " *du-tmp*"))) - (set-buffer b) - (erase-buffer) - (insert "cd " d ";du -sk * \n") - (message "Running `cd %s;du -sk *'..." d) - (call-process-region (point-min) (point-max) shell-file-name t - (current-buffer) nil) - (goto-char (point-min)) - (message "Scanning output ...") - (while (re-search-forward "^\\([0-9]+\\)[ \t]+\\([^ \n]+\\)$" nil t) - (let* ((nam (buffer-substring (match-beginning 2) (match-end 2))) - (num (buffer-substring (match-beginning 1) (match-end 1)))) - (setq nmlst (cons nam nmlst) - ;; * 1000 to put it into bytes - cntlst (cons (* (string-to-number num) 1000) cntlst)))) + b) + (if (executable-find "du") + (progn + (setq b (get-buffer-create " *du-tmp*")) + (set-buffer b) + (erase-buffer) + (if (and (memq system-type '(windows-nt ms-dos)) + (fboundp 'w32-shell-dos-semantics) + (w32-shell-dos-semantics)) + (progn + ;; With Windows shells, 'cd' does not change the drive, + ;; and ';' is not reliable for running multiple + ;; commands, so use alternatives. We quote the + ;; directory because otherwise pushd will barf on a + ;; directory with forward slashes. Note that * will not + ;; skip dotfiles with Windows shells, unlike on Unix. + (insert "pushd \"" d "\" && du -sk * \n") + (message "Running `pushd \"%s\" && du -sk *'..." d)) + (insert "cd " d ";du -sk * \n") + (message "Running `cd %s;du -sk *'..." d)) + (call-process-region (point-min) (point-max) shell-file-name t + (current-buffer) nil) + (goto-char (point-min)) + (message "Scanning output ...") + (while (re-search-forward "^\\([0-9]+\\)[ \t]+\\([^ \n]+\\)$" nil t) + (let* ((nam (buffer-substring (match-beginning 2) (match-end 2))) + (num (buffer-substring (match-beginning 1) (match-end 1)))) + (setq nmlst (cons nam nmlst) + ;; * 1000 to put it into bytes + cntlst (cons (* (string-to-number num) 1000) cntlst))))) + (dolist (file (directory-files d t directory-files-no-dot-files-regexp)) + (let ((fbase (file-name-nondirectory file))) + ;; Typical shells exclude files and subdirectories whose names + ;; begin with a period when it expands *, so we do the same. + (unless (string-match-p "\\`\\." fbase) + (setq nmlst (cons fbase nmlst)) + (if (file-regular-p file) + (setq cntlst (cons (chart--file-size + (nth 7 (file-attributes file))) + cntlst)) + (setq cntlst (cons (chart--directory-size file) cntlst))))))) (if (not nmlst) (error "No files found!")) (chart-bar-quickie 'vertical (format "Largest files in %s" d)
Debbugs Internal Request <help-debbugs <at> gnu.org>
to internal_control <at> debbugs.gnu.org
.
(Sat, 05 Oct 2024 11:24:08 GMT) Full text and rfc822 format available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.