From debbugs-submit-bounces@debbugs.gnu.org Sat Aug 31 15:33:31 2024 Received: (at submit) by debbugs.gnu.org; 31 Aug 2024 19:33:31 +0000 Received: from localhost ([127.0.0.1]:56591 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1skTqh-0001ho-Ch for submit@debbugs.gnu.org; Sat, 31 Aug 2024 15:33:31 -0400 Received: from lists.gnu.org ([209.51.188.17]:32930) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1skTER-0000YZ-FZ for submit@debbugs.gnu.org; Sat, 31 Aug 2024 14:53:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1skTDU-0003yT-Hn for bug-gnu-emacs@gnu.org; Sat, 31 Aug 2024 14:52:56 -0400 Received: from mail-ej1-x631.google.com ([2a00:1450:4864:20::631]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1skTDN-0004WU-Em for bug-gnu-emacs@gnu.org; Sat, 31 Aug 2024 14:52:56 -0400 Received: by mail-ej1-x631.google.com with SMTP id a640c23a62f3a-a8692bbec79so328583466b.3 for ; Sat, 31 Aug 2024 11:52:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1725130366; x=1725735166; darn=gnu.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=Nj8RalUHKr1Xixa2qLhjv637WAVVBds7Jcb4XF8/rLg=; b=EEnY9iaCmfre2BbaRh+ffKWNslJyEDZ+NzVwjBkctqjkTDH5RgyoipwwLrOVnkNifM ut3UJXPWX0WamxC8ah8V7foXzdG76SiTGKnFJ0C8utEIG3JyM/PjJAOIe6MwYK9A85S+ k7YErSzZkymHGhWqsTuhSFhf/ogLMr17nCfzkT1QVUcmMLSiuk5y2cE6W9fFE4+QzNWR G/KwE9hkQSeVJ680Vstu+yZFB8To8Z+F11LJNRdmLFWHzKEN/8UOxu7u0ucRw0bNyccW bwCxtyI1M+l44OJH12fTuslToRS6Pax8nvfCRUEp9G1S9SvPYoEk+U2WW4RxJglIo2m3 e4Hw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1725130366; x=1725735166; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=Nj8RalUHKr1Xixa2qLhjv637WAVVBds7Jcb4XF8/rLg=; b=gcmkowgkiBiyye4IBgT3yd+ssqeijmDsGrUuT71KNmQk/zTXCKtI32EuNuEpDyhMuu lP3hJ/8QdHCTMIfxWsPpaYap5e6hyUQUGA3jqHcldEJFi++AEeO/oGhtqHXAbngIDMIY EoQfWyJhczMyI1u+OpqBv0ubRwBTYezU+xdqgpABgrhHPWCm755UbyuwtGvHPmKDjW5D 6Zdc5isihiZJuNEjA5tg4re+/YEBsdOecbHN/ler20HaWmhG39uXTAgy3MSpowfuPApU wWhDEPQeKU8BoHWHh6dup9xyEIe8Q8N/twTfiOTyLzfR54hZfraMuHSLii73kxFK84dl Uz6A== X-Gm-Message-State: AOJu0Yy1+wSVU3oEef5km4O7wLdpf0H/fTtt0Sj2NVHt+BagoaYUhOji UIow4XTWQGmY4Md2sB9da887nWGiq3qp//uwrb53wOz2Bh0fuqC9k12Ylww4su+3YuXpCpnfvWo S1PS8d0CNzAxWqv1zKx52nnWtdWehczUg X-Google-Smtp-Source: AGHT+IHiVFZscm9cBdGWQAa6Yf30D65aOZvdCPe6wCKbcivzlUk9Khm2uBkb6GXWyeFhHm0uGBzcRGokY3t6P5x1IH0= X-Received: by 2002:a17:906:f582:b0:a86:b18e:bb7a with SMTP id a640c23a62f3a-a89a379d1b1mr488546166b.42.1725130362669; Sat, 31 Aug 2024 11:52:42 -0700 (PDT) MIME-Version: 1.0 From: Harm Van der Vegt Date: Sat, 31 Aug 2024 20:52:41 +0200 Message-ID: Subject: 29.1; chart-space-usage in chart.el does not work correctly on windows To: bug-gnu-emacs@gnu.org Content-Type: multipart/mixed; boundary="00000000000075631f0620ff365b" Received-SPF: pass client-ip=2a00:1450:4864:20::631; envelope-from=harmvegt@gmail.com; helo=mail-ej1-x631.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: -1.3 (-) X-Debbugs-Envelope-To: submit X-Mailman-Approved-At: Sat, 31 Aug 2024 15:33:26 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.3 (--) --00000000000075631f0620ff365b Content-Type: multipart/alternative; boundary="00000000000075631c0620ff3659" --00000000000075631c0620ff3659 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable 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 =E2=80=98cd g:/Shakespeare/;du -sk *=E2=80=99... 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=3Daot --without-compress-install --with-tree-sitter CFLAGS=3D-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-te= xinfo 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-pu= blish 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-or= g 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-od= t 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-ma= n 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-la= tex 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-ic= alendar 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-ht= ml 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-be= amer 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-as= cii 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-v= ersion 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-t= imer 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-t= empo 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-t= able 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-s= rc 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-p= rotocol 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-p= lot 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-p= complete 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-n= um 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-m= ouse 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-m= obile 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-m= acs 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-m= acro 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-l= oaddefs 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-l= ist 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-l= int 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-k= eys 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-i= nstall 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-i= nlinetask 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-i= ndent 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-i= d 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-h= abit 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-g= oto 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-f= ootnote 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-f= eed 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-f= aces 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-e= ntities 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-e= lement 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-d= uration 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-d= atetree 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-c= tags 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-c= rypt 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-c= ompat 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-c= olview 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-c= lock 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-c= apture 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-a= ttach 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-a= ttach-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-a= rchive 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-a= genda 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-w3= m 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-rm= ail 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-mh= e 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-ir= c 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-in= fo 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-gn= us 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-ew= w 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-es= hell 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-do= cview 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-bi= btex 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-bb= db 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-va= la 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-ta= ngle 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-ta= ble 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-st= an 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-sq= lite 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-sq= l 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-sh= en 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-sh= ell 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-se= d 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-sc= reen 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-sc= heme 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-sa= ss 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-ru= by 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-re= f 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-py= thon 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-pr= ocessing 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-pl= antuml 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-pi= colisp 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-pe= rl 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-or= g 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-oc= tave 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-oc= aml 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-ms= cgen 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-ma= xima 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-ma= tlab 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-ma= kefile 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-lu= a 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-lo= b 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-li= sp 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-li= lypond 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-le= dger 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-la= tex 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-ja= va 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-hl= edger 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-ha= skell 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-gr= oovy 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-gn= uplot 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-fo= rtran 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-fo= rth 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-ex= p 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-ev= al 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-es= hell 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-em= acs-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-eb= nf 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-do= t 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-di= taa 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-cs= s 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-co= re 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-co= q 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-co= mint 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-cl= ojure 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-ca= lc 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-aw= k 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-as= ymptote 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-ab= c c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/transient-20200622.2050/transie= nt 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-p= ackage 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-p= ackage-lint hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/use-package/use-package-lin= t c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/use-package-20201110.2133/use-p= ackage-jump hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/use-package/use-package-jum= p c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/use-package-20201110.2133/use-p= ackage-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-p= ackage-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-p= ackage-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-p= ackage-core hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/use-package/use-package-cor= e c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/use-package-20201110.2133/use-p= ackage-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-ko= ma-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-r= efile 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-ma= n 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-ju= lia 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)) --00000000000075631c0620ff3659 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Load the builtin chart package. When chart-space-usage is = run, targeting
any directory, chart fails to find any files and therefor= e 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 f= ails on my Windows machine, it works on my Ubuntu
installation.

T= he output as shown in *Messages* is as follows:

Collecting statistic= s...
Running =E2=80=98cd g:/Shakespeare/;du -sk *=E2=80=99...
Scannin= g 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 sti= ll failed to find any files.

I have patched chart-space-usage to rem= ove 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 20= 23-07-31 built on
=C2=A0AVALON
Windowing system distributor 'Micr= osoft Corp.', version 10.0.19045
System Description: Microsoft Windo= ws 10 Home (v10.0.2009.19045.4780)

Configured using:
=C2=A0'c= onfigure --with-modules --without-dbus --with-native-compilation=3Daot
= =C2=A0--without-compress-install --with-tree-sitter CFLAGS=3D-O2'
Configured features:
ACL GIF GMP GNUTLS HARFBUZZ JPEG JSON LCMS2 LIBXM= L2 MODULES NATIVE_COMP
NOTIFY W32NOTIFY PDUMPER PNG RSVG SOUND SQLITE3 T= HREADS TIFF
TOOLKIT_SCROLL_BARS TREE_SITTER WEBP XPM ZLIB

(NATIVE= _COMP present but libgccjit not available)

Important settings:
= =C2=A0 value of $LANG: NLD
=C2=A0 locale-coding-system: cp1252

Ma= jor mode: ELisp/l

Minor modes in effect:
=C2=A0 bug-reference-pro= g-mode: t
=C2=A0 erefactor-check-eval-mode: t
=C2=A0 erefactor-highli= ght-mode: t
=C2=A0 treemacs-filewatch-mode: t
=C2=A0 treemacs-follow-= mode: t
=C2=A0 treemacs-git-mode: t
=C2=A0 treemacs-fringe-indicator-= mode: t
=C2=A0 global-magit-file-mode: t
=C2=A0 magit-file-mode: t=C2=A0 magit-auto-revert-mode: t
=C2=A0 auto-revert-mode: t
=C2=A0 g= lobal-git-commit-mode: t
=C2=A0 async-bytecomp-package-mode: t
=C2=A0= shell-dirtrack-mode: t
=C2=A0 server-mode: t
=C2=A0 which-key-mode: = t
=C2=A0 global-corfu-mode: t
=C2=A0 corfu-mode: t
=C2=A0 marginal= ia-mode: t
=C2=A0 override-global-mode: t
=C2=A0 savehist-mode: t
= =C2=A0 vertico-mode: t
=C2=A0 tooltip-mode: t
=C2=A0 global-eldoc-mod= e: t
=C2=A0 eldoc-mode: t
=C2=A0 show-paren-mode: t
=C2=A0 electri= c-indent-mode: t
=C2=A0 mouse-wheel-mode: t
=C2=A0 tool-bar-mode: t=C2=A0 menu-bar-mode: t
=C2=A0 file-name-shadow-mode: t
=C2=A0 glob= al-font-lock-mode: t
=C2=A0 font-lock-mode: t
=C2=A0 blink-cursor-mod= e: t
=C2=A0 line-number-mode: t
=C2=A0 transient-mark-mode: t
=C2= =A0 auto-composition-mode: t
=C2=A0 auto-encryption-mode: t
=C2=A0 au= to-compression-mode: t

Load-path shadows:
c:/Users/Harm/Documents= /Emacs/.emacs.d/elpa/org-20200406/ox hides c:/Users/Harm/Documents/Emacs/.e= macs.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/.e= macs.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/D= ocuments/Emacs/.emacs.d/elpa/org-20200406/ox-org hides c:/Users/Harm/Docume= nts/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ox-org
c:/Users/Harm/D= ocuments/Emacs/.emacs.d/elpa/org-20200406/ox-odt hides c:/Users/Harm/Docume= nts/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ox-odt
c:/Users/Harm/D= ocuments/Emacs/.emacs.d/elpa/org-20200406/ox-md hides c:/Users/Harm/Documen= ts/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ox-md
c:/Users/Harm/Doc= uments/Emacs/.emacs.d/elpa/org-20200406/ox-man hides c:/Users/Harm/Document= s/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ox-man
c:/Users/Harm/Doc= uments/Emacs/.emacs.d/elpa/org-20200406/ox-latex hides c:/Users/Harm/Docume= nts/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/Har= m/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:/Us= ers/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ox-htmlc:/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-bea= mer
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ox-ascii hi= des c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/o= x-ascii
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org hid= es c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/or= g
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-version h= ides 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-2= 0210222/org-timer
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-202004= 06/org-tempo hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-con= trib-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-pl= us-contrib-20210222/org-table
c:/Users/Harm/Documents/Emacs/.emacs.d/elp= a/org-20200406/org-src hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/or= g-plus-contrib-20210222/org-src
c:/Users/Harm/Documents/Emacs/.emacs.d/e= lpa/org-20200406/org-protocol hides c:/Users/Harm/Documents/Emacs/.emacs.d/= elpa/org-plus-contrib-20210222/org-protocol
c:/Users/Harm/Documents/Emac= s/.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/Document= s/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-pcomplete
c:/Users/H= arm/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/H= arm/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-mobi= le
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-macs hid= es c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/or= g-macs
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-macr= o hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-202102= 22/org-macro
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/or= g-loaddefs hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contr= ib-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-pl= us-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/or= g-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/elp= a/org-plus-contrib-20210222/org-keys
c:/Users/Harm/Documents/Emacs/.emac= s.d/elpa/org-20200406/org-install hides c:/Users/Harm/Documents/Emacs/.emac= s.d/elpa/org-plus-contrib-20210222/org-install
c:/Users/Harm/Documents/E= macs/.emacs.d/elpa/org-20200406/org-inlinetask hides c:/Users/Harm/Document= s/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/H= arm/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:/Use= rs/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-habi= t
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-goto hide= s 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-footn= ote hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-2021= 0222/org-footnote
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-202004= 06/org-feed hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-cont= rib-20210222/org-feed
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20= 200406/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/.e= macs.d/elpa/org-20200406/org-element hides c:/Users/Harm/Documents/Emacs/.e= macs.d/elpa/org-plus-contrib-20210222/org-element
c:/Users/Harm/Document= s/Emacs/.emacs.d/elpa/org-20200406/org-duration hides c:/Users/Harm/Documen= ts/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-duration
c:/Users/H= arm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-datetree hides c:/Users/= Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/org-datetreec:/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-c= tags
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-2= 0210222/org-compat
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200= 406/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/o= rg-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/Ema= cs/.emacs.d/elpa/org-20200406/org-attach hides c:/Users/Harm/Documents/Emac= s/.emacs.d/elpa/org-plus-contrib-20210222/org-attach
c:/Users/Harm/Docum= ents/Emacs/.emacs.d/elpa/org-20200406/org-attach-git hides c:/Users/Harm/Do= cuments/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-arch= ive
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 hide= s 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 hi= des c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/o= l-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-2021022= 2/ol-info
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ol-gn= us hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210= 222/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-2021= 0222/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-2= 0210222/ol-eshell
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-202004= 06/ol-docview hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-co= ntrib-20210222/ol-docview
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/or= g-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/e= lpa/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/or= g-20200406/ob-vala hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-pl= us-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/or= g-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/el= pa/org-plus-contrib-20210222/ob-table
c:/Users/Harm/Documents/Emacs/.ema= cs.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/.e= macs.d/elpa/org-20200406/ob-sqlite hides c:/Users/Harm/Documents/Emacs/.ema= cs.d/elpa/org-plus-contrib-20210222/ob-sqlite
c:/Users/Harm/Documents/Em= acs/.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/Em= acs/.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/Ema= cs/.emacs.d/elpa/org-plus-contrib-20210222/ob-shell
c:/Users/Harm/Docume= nts/Emacs/.emacs.d/elpa/org-20200406/ob-sed hides c:/Users/Harm/Documents/E= macs/.emacs.d/elpa/org-plus-contrib-20210222/ob-sed
c:/Users/Harm/Docume= nts/Emacs/.emacs.d/elpa/org-20200406/ob-screen hides c:/Users/Harm/Document= s/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/Do= cuments/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/Har= m/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-sass
c:/Use= rs/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-ruby hides c:/Users/H= arm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-ruby
c:/U= sers/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:/U= sers/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-R hides c:/Users/Ha= rm/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/H= arm/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-pr= ocessing
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-pla= ntuml hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20= 210222/ob-plantuml
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200= 406/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/el= pa/org-20200406/ob-org hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/or= g-plus-contrib-20210222/ob-org
c:/Users/Harm/Documents/Emacs/.emacs.d/el= pa/org-20200406/ob-octave hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa= /org-plus-contrib-20210222/ob-octave
c:/Users/Harm/Documents/Emacs/.emac= s.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/.em= acs.d/elpa/org-plus-contrib-20210222/ob-mscgen
c:/Users/Harm/Documents/E= macs/.emacs.d/elpa/org-20200406/ob-maxima hides c:/Users/Harm/Documents/Ema= cs/.emacs.d/elpa/org-plus-contrib-20210222/ob-maxima
c:/Users/Harm/Docum= ents/Emacs/.emacs.d/elpa/org-20200406/ob-matlab hides c:/Users/Harm/Documen= ts/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:/User= s/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-lil= ypond
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-ledger= hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-2021022= 2/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-20= 210222/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-2= 0210222/ob-js
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/o= b-java hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-2= 0210222/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-20= 210222/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-20210= 222/ob-io
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-hl= edger hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20= 210222/ob-hledger
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-202004= 06/ob-haskell hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-co= ntrib-20210222/ob-haskell
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/or= g-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/e= lpa/org-20200406/ob-gnuplot hides c:/Users/Harm/Documents/Emacs/.emacs.d/el= pa/org-plus-contrib-20210222/ob-gnuplot
c:/Users/Harm/Documents/Emacs/.e= macs.d/elpa/org-20200406/ob-fortran hides c:/Users/Harm/Documents/Emacs/.em= acs.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/Ema= cs/.emacs.d/elpa/org-plus-contrib-20210222/ob-forth
c:/Users/Harm/Docume= nts/Emacs/.emacs.d/elpa/org-20200406/ob-exp hides c:/Users/Harm/Documents/E= macs/.emacs.d/elpa/org-plus-contrib-20210222/ob-exp
c:/Users/Harm/Docume= nts/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/Docu= ments/Emacs/.emacs.d/elpa/org-20200406/ob-eshell hides c:/Users/Harm/Docume= nts/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-eshell
c:/Users/Har= m/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-emacs-lisp hides c:/Users/H= arm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-emacs-lispc:/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-d= itaa
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-css hid= es 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 hi= des c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/o= b-core
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-coq h= ides 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-comin= t hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contrib-202102= 22/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-202= 00406/ob-calc hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-co= ntrib-20210222/ob-calc
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-2= 0200406/ob-C hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-con= trib-20210222/ob-C
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200= 406/ob-awk hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus-contr= ib-20210222/ob-awk
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200= 406/ob-asymptote hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-plus= -contrib-20210222/ob-asymptote
c:/Users/Harm/Documents/Emacs/.emacs.d/el= pa/org-20200406/ob-abc hides c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/or= g-plus-contrib-20210222/ob-abc
c:/Users/Harm/Documents/Emacs/.emacs.d/el= pa/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-pack= age-20201110.2133/use-package hides g:/Emacs/emacs-29.1/share/emacs/29.1/li= sp/use-package/use-package
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/u= se-package-20201110.2133/use-package-lint hides g:/Emacs/emacs-29.1/share/e= macs/29.1/lisp/use-package/use-package-lint
c:/Users/Harm/Documents/Emac= s/.emacs.d/elpa/use-package-20201110.2133/use-package-jump hides g:/Emacs/e= macs-29.1/share/emacs/29.1/lisp/use-package/use-package-jump
c:/Users/Ha= rm/Documents/Emacs/.emacs.d/elpa/use-package-20201110.2133/use-package-ensu= re 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/u= se-package/use-package-diminish
c:/Users/Harm/Documents/Emacs/.emacs.d/e= lpa/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/Doc= uments/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-p= ackage-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-k= ey-20200805.1727/bind-key hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/u= se-package/bind-key
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-2020= 0406/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/e= macs-29.1/share/emacs/29.1/lisp/org/ox-texinfo
c:/Users/Harm/Documents/E= macs/.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/el= pa/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 h= ides 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/e= lpa/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-late= x 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:/U= sers/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/Do= cuments/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/lis= p/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/o= rg-20200406/org-timer hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/o= rg-timer
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-te= mpo hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-tempo
c:/Use= rs/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/em= acs/29.1/lisp/org/org-src
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/or= g-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-2= 0200406/org-protocol hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/or= g-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:/Use= rs/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-pcomplete hides g:/E= macs/emacs-29.1/share/emacs/29.1/lisp/org/org-pcomplete
c:/Users/Harm/Do= cuments/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/lis= p/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<= br>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/Doc= uments/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/.emac= s.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 h= ides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-lint
c:/Users/Har= m/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/.e= macs.d/elpa/org-20200406/org-inlinetask hides g:/Emacs/emacs-29.1/share/ema= cs/29.1/lisp/org/org-inlinetask
c:/Users/Harm/Documents/Emacs/.emacs.d/e= lpa/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:/Us= ers/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-habit hides g:/Emac= s/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-2020040= 6/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/Docu= ments/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/emac= s/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/o= rg/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-datet= ree
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-ctags h= ides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-ctags
c:/Users/Ha= rm/Documents/Emacs/.emacs.d/elpa/org-20200406/org-crypt hides g:/Emacs/emac= s-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/emac= s/29.1/lisp/org/org-compat
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/o= rg-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/or= g-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/Do= cuments/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/.e= macs.d/elpa/org-20200406/org-attach-git hides g:/Emacs/emacs-29.1/share/ema= cs/29.1/lisp/org/org-attach-git
c:/Users/Harm/Documents/Emacs/.emacs.d/e= lpa/org-20200406/org-archive hides g:/Emacs/emacs-29.1/share/emacs/29.1/lis= p/org/org-archive
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-202004= 06/org-agenda hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/org-agend= a
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ol hides g:/E= macs/emacs-29.1/share/emacs/29.1/lisp/org/ol
c:/Users/Harm/Documents/Ema= cs/.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-202= 00406/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/Docume= nts/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ol-man hides g:/Emacs/ema= cs-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-2020040= 6/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:/Ema= cs/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/ema= cs/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-e= shell
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ol-docvie= w hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ol-docview
c:/User= s/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/E= macs/.emacs.d/elpa/org-20200406/ol-bbdb hides g:/Emacs/emacs-29.1/share/ema= cs/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:/U= sers/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-tangle hides g:/Ema= cs/emacs-29.1/share/emacs/29.1/lisp/org/ob-tangle
c:/Users/Harm/Document= s/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/elp= a/org-20200406/ob-sqlite hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/or= g/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/ema= cs-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-20200= 406/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 hide= s 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/lis= p/org/ob-ruby
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/o= b-ref hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-ref
c:/User= s/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/.emac= s.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-20200= 406/ob-processing hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-pr= ocessing
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-pla= ntuml 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:/Ema= cs/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/ema= cs/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-o= ctave
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/Ha= rm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-maxima hides g:/Emacs/emac= s-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/o= b-makefile
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-l= ua hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-lua
c:/Users/H= arm/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/.ema= cs.d/elpa/org-20200406/ob-lisp hides g:/Emacs/emacs-29.1/share/emacs/29.1/l= isp/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-lilypon= d
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-latex hide= s g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-latex
c:/Users/Harm/D= ocuments/Emacs/.emacs.d/elpa/org-plus-contrib-20210222/ob-julia hides g:/Em= acs/emacs-29.1/share/emacs/29.1/lisp/org/ob-julia
c:/Users/Harm/Document= s/Emacs/.emacs.d/elpa/org-20200406/ob-js hides g:/Emacs/emacs-29.1/share/em= acs/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-jav= a
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-haskell hi= des g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-haskell
c:/Users/Ha= rm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-groovy hides g:/Emacs/emac= s-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/emac= s/29.1/lisp/org/ob-gnuplot
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/o= rg-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-f= orth hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-forth
c:/Use= rs/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-exp hides g:/Emacs/em= acs-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-2020= 0406/ob-eshell hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-eshel= l
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:/Us= ers/Harm/Documents/Emacs/.emacs.d/elpa/org-20200406/ob-dot hides g:/Emacs/e= macs-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-2= 0200406/ob-css hides g:/Emacs/emacs-29.1/share/emacs/29.1/lisp/org/ob-cssc:/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/Docume= nts/Emacs/.emacs.d/elpa/org-20200406/ob-comint hides g:/Emacs/emacs-29.1/sh= are/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/li= sp/org/ob-clojure
c:/Users/Harm/Documents/Emacs/.emacs.d/elpa/org-202004= 06/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-s= cript smie treesit executable
files-x whitespace magit-patch magit-subtr= ee magit-ediff ediff
ediff-merg ediff-mult ediff-wind ediff-diff ediff-h= elp ediff-init
ediff-util misearch multi-isearch magit-extras checkdoc s= hortdoc
help-fns radix-tree bug-reference vc-git vc-dispatcher cus-edit<= br>cus-start cus-load wid-edit dired-aux display-line-numbers
treemacs-b= ookmarks treemacs-tags xref magit-bookmark bookmark pp chart
lisp-mnt mu= le-util erefactor flymake-proc flymake project compile
thingatpt gptel g= ptel-openai treemacs treemacs-header-line
treemacs-compatibility treemac= s-mode treemacs-interface
treemacs-persistence treemacs-filewatch-mode t= reemacs-follow-mode
treemacs-rendering treemacs-annotations treemacs-asy= nc
treemacs-workspaces treemacs-dom treemacs-visuals
treemacs-fringe-= indicator pulse color treemacs-faces treemacs-icons
treemacs-scope treem= acs-themes treemacs-core-utils pfuture inline
hl-line ht treemacs-loggin= g treemacs-customization treemacs-macros pcase
s magit-submodule magit-o= bsolete magit-blame magit-stash magit-reflog
magit-bisect magit-push mag= it-pull magit-fetch magit-clone magit-remote
magit-commit magit-sequence= magit-notes magit-worktree magit-tag
magit-merge magit-branch magit-res= et magit-files magit-refs magit-status
magit magit-repos magit-apply mag= it-wip magit-log which-func imenu
magit-diff smerge-mode diff diff-mode = magit-core magit-autorevert
autorevert filenotify magit-margin magit-tra= nsient magit-process
magit-mode git-commit transient magit-git magit-sec= tion magit-utils crm
log-edit message sendmail yank-media puny dired dir= ed-loaddefs rfc822
mml mml-sec epa derived epg rfc6068 epg-config gnus-u= til
text-property-search mm-decode mm-bodies mm-encode mail-parse rfc223= 1
rfc2047 rfc2045 mm-util ietf-drums mail-prsvr mailabbrev mail-utilsgmm-utils mailheader pcvs-util add-log with-editor comp comp-cstr
warni= ngs rx async-bytecomp async shell server dash which-key corfu
edmacro km= acro marginalia use-package-bind-key bind-key easy-mmode
savehist orderl= ess vertico compat cl-extra help-mode use-package-ensure
use-package-cor= e finder-inf org-checklist org ob ob-tangle ob-ref ob-lob
ob-table ob-ex= p org-macro org-footnote org-src ob-comint org-pcomplete
pcomplete comin= t ansi-osc ansi-color ring org-list org-faces
org-entities time-date nou= tline 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-fun= c cal-menu calendar cal-loaddefs
corfu-autoloads devdocs-autoloads embar= k-autoloads erefactor-autoloads
gptel-autoloads marginalia-autoloads ord= erless-autoloads
treemacs-autoloads cfrs-autoloads posframe-autoloads ht= -autoloads
hydra-autoloads lv-autoloads pfuture-autoloads ace-window-aut= oloads
avy-autoloads vertico-autoloads compat-autoloads which-key-autolo= ads
info yaml-mode-autoloads package browse-url url url-proxy url-privac= y
url-expand url-methods url-history url-cookie generate-lisp-file
ur= l-domsuf url-util mailcap url-handlers url-parse auth-source cl-seq
eiei= o 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 e= ldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type
elisp-m= ode 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 m= enu-bar rfn-eshadow isearch easymenu timer select
scroll-bar mouse jit-l= ock font-lock syntax font-core term/tty-colors
frame minibuffer nadvice = seq simple cl-generic indonesian philippine
cham georgian utf-8-lang mis= c-lang vietnamese tibetan thai tai-viet lao
korean japanese eucjp-ms cp5= 1932 hebrew greek romanian slovak czech
european ethiopic indian cyrilli= c chinese composite emoji-zwj charscript
charprop case-table epa-hook jk= a-cmpr-hook help abbrev obarray oclosure
cl-preloaded button loaddefs th= eme-loaddefs faces cus-face macroexp
files window text-properties overla= y sha1 md5 base64 format env
code-pages mule custom widget keymap hashta= ble-print-readable backquote
threads w32notify w32 lcms2 multi-tty make-= network-process
native-compile emacs)

Memory information:
((co= nses 16 604727 66916)
=C2=A0(symbols 48 32728 0)
=C2=A0(strings 32 17= 1750 4795)
=C2=A0(string-bytes 1 5874342)
=C2=A0(vectors 16 64504)=C2=A0(vector-slots 8 1649805 128430)
=C2=A0(floats 8 345 545)
=C2= =A0(intervals 56 7272 265)
=C2=A0(buffers 984 34))
--00000000000075631c0620ff3659-- --00000000000075631f0620ff365b Content-Type: application/octet-stream; name="0001-Make-chart-space-usage-OS-independent.patch" Content-Disposition: attachment; filename="0001-Make-chart-space-usage-OS-independent.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m0ihjjof0 RnJvbSA0OGViNmFmMGY3ODQyNGRmOWYwMmQ3NDQyNzU1MzhkODBjZWUzYmM0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIYXJtIHZhbiBkZXIgVmVndCA8aGFybXZlZ3RAZ21haWwuY29t PgpEYXRlOiBTYXQsIDMxIEF1ZyAyMDI0IDIwOjEwOjM3ICswMjAwClN1YmplY3Q6IFtQQVRDSF0g TWFrZSBjaGFydC1zcGFjZS11c2FnZSBPUyBpbmRlcGVuZGVudAoKLS0tCiBsaXNwL2VtYWNzLWxp c3AvY2hhcnQuZWwgfCAzNiArKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEg ZmlsZSBjaGFuZ2VkLCAxNCBpbnNlcnRpb25zKCspLCAyMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9saXNwL2VtYWNzLWxpc3AvY2hhcnQuZWwgYi9saXNwL2VtYWNzLWxpc3AvY2hhcnQuZWwK aW5kZXggZGE2MWU0NTIxM2QuLmMxOTVjY2I3MTY1IDEwMDY0NAotLS0gYS9saXNwL2VtYWNzLWxp c3AvY2hhcnQuZWwKKysrIGIvbGlzcC9lbWFjcy1saXNwL2NoYXJ0LmVsCkBAIC02NDYsMzAgKzY0 NiwyMiBAQCBTT1JULVBSRUQgaWYgZGVzaXJlZC4iCiAgIChpbnRlcmFjdGl2ZSAiRERpcmVjdG9y eTogIikKICAgKG1lc3NhZ2UgIkNvbGxlY3Rpbmcgc3RhdGlzdGljcy4uLiIpCiAgIChsZXQgKChu bWxzdCBuaWwpCi0JKGNudGxzdCBuaWwpCi0JKGIgKGdldC1idWZmZXItY3JlYXRlICIgKmR1LXRt cCoiKSkpCi0gICAgKHNldC1idWZmZXIgYikKLSAgICAoZXJhc2UtYnVmZmVyKQotICAgIChpbnNl cnQgImNkICIgZCAiO2R1IC1zayAqIFxuIikKLSAgICAobWVzc2FnZSAiUnVubmluZyBgY2QgJXM7 ZHUgLXNrIConLi4uIiBkKQotICAgIChjYWxsLXByb2Nlc3MtcmVnaW9uIChwb2ludC1taW4pIChw b2ludC1tYXgpIHNoZWxsLWZpbGUtbmFtZSB0Ci0JCQkgKGN1cnJlbnQtYnVmZmVyKSBuaWwpCi0g ICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKLSAgICAobWVzc2FnZSAiU2Nhbm5pbmcgb3V0cHV0 IC4uLiIpCi0gICAgKHdoaWxlIChyZS1zZWFyY2gtZm9yd2FyZCAiXlxcKFswLTldK1xcKVsgXHRd K1xcKFteIFxuXStcXCkkIiBuaWwgdCkKLSAgICAgIChsZXQqICgobmFtIChidWZmZXItc3Vic3Ry aW5nIChtYXRjaC1iZWdpbm5pbmcgMikgKG1hdGNoLWVuZCAyKSkpCi0JICAgICAobnVtIChidWZm ZXItc3Vic3RyaW5nIChtYXRjaC1iZWdpbm5pbmcgMSkgKG1hdGNoLWVuZCAxKSkpKQotCShzZXRx IG5tbHN0IChjb25zIG5hbSBubWxzdCkKLQkgICAgICA7OyAqIDEwMDAgdG8gcHV0IGl0IGludG8g Ynl0ZXMKLQkgICAgICBjbnRsc3QgKGNvbnMgKCogKHN0cmluZy10by1udW1iZXIgbnVtKSAxMDAw KSBjbnRsc3QpKSkpCisgICAgICAgIChjbnRsc3QgbmlsKSkKKyAgICAoZG9saXN0IChmaWxlIChk aXJlY3RvcnktZmlsZXMgZCB0KSkKKyAgICAgICh3aGVuIChmaWxlLXJlZ3VsYXItcCBmaWxlKQor ICAgICAgICAobGV0ICgoc2l6ZSAobnRoIDcgKGZpbGUtYXR0cmlidXRlcyBmaWxlKSkpKQorICAg ICAgICAgIChzZXRxIG5tbHN0IChjb25zIChmaWxlLW5hbWUtbm9uZGlyZWN0b3J5IGZpbGUpIG5t bHN0KSkKKyAgICAgICAgICAoc2V0cSBjbnRsc3QgKGNvbnMgc2l6ZSBjbnRsc3QpKSkpKQorCiAg ICAgKGlmIChub3Qgbm1sc3QpCi0JKGVycm9yICJObyBmaWxlcyBmb3VuZCEiKSkKKyAgICAgICAg KGVycm9yICJObyBmaWxlcyBmb3VuZCEiKSkKKworICAgIDs7IERpc3BsYXkgdGhlIGNoYXJ0IGlm IGZpbGVzIGFyZSBmb3VuZAogICAgIChjaGFydC1iYXItcXVpY2tpZSAndmVydGljYWwgKGZvcm1h dCAiTGFyZ2VzdCBmaWxlcyBpbiAlcyIgZCkKLQkJICAgICAgIG5tbHN0ICJGaWxlIE5hbWUiCi0J CSAgICAgICBjbnRsc3QgIkZpbGUgU2l6ZSIKLQkJICAgICAgIDEwCi0JCSAgICAgICAobGFtYmRh IChhIGIpICg+IChjZHIgYSkgKGNkciBiKSkpKQotICAgICkpCisgICAgICAgICAgICAgICAgICAg ICAgIG5tbHN0ICJGaWxlIE5hbWUiCisgICAgICAgICAgICAgICAgICAgICAgIGNudGxzdCAiRmls ZSBTaXplIgorICAgICAgICAgICAgICAgICAgICAgICAxMAorICAgICAgICAgICAgICAgICAgICAg ICAobGFtYmRhIChhIGIpICg+IChjZHIgYSkgKGNkciBiKSkpKSkpCiAKIChkZWZ1biBjaGFydC1l bWFjcy1zdG9yYWdlICgpCiAgICJDaGFydCB0aGUgY3VycmVudCBzdG9yYWdlIHJlcXVpcmVtZW50 cyBvZiBFbWFjcy4iCi0tIAoyLjExLjAud2luZG93cy4zCgo= --00000000000075631f0620ff365b-- From debbugs-submit-bounces@debbugs.gnu.org Sun Sep 01 04:14:52 2024 Received: (at 72919) by debbugs.gnu.org; 1 Sep 2024 08:14:52 +0000 Received: from localhost ([127.0.0.1]:33141 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1skfjX-0007Dk-NH for submit@debbugs.gnu.org; Sun, 01 Sep 2024 04:14:52 -0400 Received: from eggs.gnu.org ([209.51.188.92]:53250) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1skfjV-0007DP-PK for 72919@debbugs.gnu.org; Sun, 01 Sep 2024 04:14:50 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1skfiT-0006EN-03; Sun, 01 Sep 2024 04:13:45 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=7su83uDOS+CGT4HY9CyvdjJQP1tiHBdonm7kRqELoH8=; b=mgi2UtmOf61Kq4e/QA48 T+A44SffhGKHURIdBmN3ijeZ1w6T5rsPBM38eSucVbKJ1GHv6dotlYWuV8ny59R3Z1nOfoofRd3wJ Hwyx6urcEXO/YV/4q+L1oxX8HsJFshA+VRMViNiNfrc3qkJR/Z9PSJboXypUkW5GFIGqpAjfIkkPF m2sYTQOf0bdtNoyqu7HhOgLEEsPGRrXOD6NUBhsxEFq/1t1asm1iU71nq/Nv4NJiisGMpbAR48xve C/N7pYv5+xJom5oZOpSt7Eey6hvGoJGL7rJJkBJw0NXw8PzjWq7DBCxeUQYjR6j/13nM2kQUhPb95 hVPJPBAtzgNCkw==; Date: Sun, 01 Sep 2024 11:13:40 +0300 Message-Id: <86seujaj0r.fsf@gnu.org> From: Eli Zaretskii To: Harm Van der Vegt In-Reply-To: (message from Harm Van der Vegt on Sat, 31 Aug 2024 20:52:41 +0200) Subject: Re: bug#72919: 29.1; chart-space-usage in chart.el does not work correctly on windows References: MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 72919 Cc: 72919@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Harm Van der Vegt > 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) From debbugs-submit-bounces@debbugs.gnu.org Sun Sep 01 14:36:15 2024 Received: (at 72919) by debbugs.gnu.org; 1 Sep 2024 18:36:15 +0000 Received: from localhost ([127.0.0.1]:38549 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1skpQt-0001JP-7T for submit@debbugs.gnu.org; Sun, 01 Sep 2024 14:36:15 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45854) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1skpQq-0001J8-Lr for 72919@debbugs.gnu.org; Sun, 01 Sep 2024 14:36:13 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1skpPn-0002Ol-FY; Sun, 01 Sep 2024 14:35:07 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=P5p3eSfeoxJjNNgpm0hsioNij3TjBeuBLQU19JgSF6o=; b=VUSNz9U3wGYe DH7bgQj8bzL0OxmycLZX2Ynghh43Nrp471hdasKnYBcgjkFXdYTMfEmHDbyUt+4hKpz7fx/u/1tC4 2xjH8lqryDRN3O86A/Sr3q62gKemNz6Uk9gWL7fYqY0R1dZPaxMLsU1p83a38Xg6oW5WzlnlivTpD wdt6mpK8xI9Ji70/Jrs5Fbjx+PFB8QNQYUZnDv4jPLU+7uo36lqvfj0lZaxwbui7EBjaUybGybFAN 9LRu7Y+MsgyuiPnPklshV1dzoV0xNLtINBzGvWOYGaD3c+jam5l3X1Y4m57Ryh4tIsTLdX9Trp3xZ 7/DhgTZxqnidJ7xkgQMI5A==; Date: Sun, 01 Sep 2024 21:35:03 +0300 Message-Id: <86bk179q94.fsf@gnu.org> From: Eli Zaretskii To: Harm Van der Vegt In-Reply-To: (message from Harm Van der Vegt on Sun, 1 Sep 2024 20:11:39 +0200) Subject: Re: bug#72919: 29.1; chart-space-usage in chart.el does not work correctly on windows References: <86seujaj0r.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 72919 Cc: 72919@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) [Please use Reply All to reply, so that the bug tracker is CC'ed.] > From: Harm Van der Vegt > 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 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 From debbugs-submit-bounces@debbugs.gnu.org Sun Sep 01 17:47:15 2024 Received: (at 72919) by debbugs.gnu.org; 1 Sep 2024 21:47:15 +0000 Received: from localhost ([127.0.0.1]:40864 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1sksPi-0008EF-6G for submit@debbugs.gnu.org; Sun, 01 Sep 2024 17:47:15 -0400 Received: from mail-ej1-f50.google.com ([209.85.218.50]:57429) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1skp9o-0000nN-Vo for 72919@debbugs.gnu.org; Sun, 01 Sep 2024 14:18:38 -0400 Received: by mail-ej1-f50.google.com with SMTP id a640c23a62f3a-a86984e035aso427688766b.2 for <72919@debbugs.gnu.org>; Sun, 01 Sep 2024 11:17:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1725214591; x=1725819391; darn=debbugs.gnu.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=EtxhlSUpiUlZqmXXFz4RAnfB6VxiSYuEpp6WT/FkUlU=; b=EUIOx6wWxT/xd6H2dtWCZR6qlgFJZEkxH7tzJ2W3ZtKYCYNXg0y4qtcS6vRjNNQ9iw ZqMcbtcVhJ5aUko2/dBJwU7MYZAbdMPEtpldDdxM/uHZB2R/a4sV/rj0qwqnFFgRpNtK pyeoKgDbfguIV+/WNWdrnjGh3exgyB2xUA11H/z8raiN04QUkTduQ4wXt1FaOMUrVvGb kkEIN+Rc3bHIGaRRrcyd5ZyQt7urPXHWyWehlbJdP3TIluXQCe/2TTyQrexDqEJsA3lx vmlrfgS+Si23zML2DxBjN0WzhLSxfSrdHDV8LJKgmImjCD4QitnWBCaSPLM/GKMsJTKg Umlw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1725214591; x=1725819391; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=EtxhlSUpiUlZqmXXFz4RAnfB6VxiSYuEpp6WT/FkUlU=; b=Zqj4NL+R3A/gqVy2Mn1h6wGGFqOo9bpUNzYCF16vbwhrgdB0gnyvKPwtgMD8hleTYv xLNp5JCfMz2D8YQJt/heibewxBzQ+jdFLCdR4irPROG7ajYrQnJ3XeJGtmXmBp9CtyE3 Bd+ZagvjAaMBwddN3yWrJM8xHOUGJmWpBntdyKSzpKQ1ISdl0BD3RzG8fMJAp77z+S1t Q1UhqzCxjrHCTrdCrC2A6KraK9auovtmQX9QFte5NRryFyx1rkCcpMMD/NjOwIoUgHXp C/7u6edvAzxXzEcJFbSdhwkEnx55nlHkGsAuub6s2C3hmgemt77LqUcX9QIeYXIlNx3K 0UuA== X-Gm-Message-State: AOJu0YxgDTIKRtTs9H8w6soujgCEZHyiS5i6H2zEFY7uL5TkdXY8scCM 2ZBxFmND4SP+04LGOCLhvcCiz22+cZ1AKIx54CsmgIeaFWzUt7ZoNT5nqybMwhWflqTMtcmqSAr mgFTj0KCDYGGF6fFmW8vmjQqRKwvcsg== X-Google-Smtp-Source: AGHT+IFL+wNCo/gQ52lSRO0ZORkT6+urtE7cTS+2EM4/Dilus82WfLX0174Ix1Nl78XPBhKkmMIxT4gSVMdenZHMzB0= X-Received: by 2002:a17:906:6a25:b0:a86:b32f:eee6 with SMTP id a640c23a62f3a-a89a3820bd8mr647036466b.54.1725214590490; Sun, 01 Sep 2024 11:16:30 -0700 (PDT) MIME-Version: 1.0 References: <86seujaj0r.fsf@gnu.org> In-Reply-To: From: Harm Van der Vegt Date: Sun, 1 Sep 2024 20:16:15 +0200 Message-ID: Subject: Fwd: bug#72919: 29.1; chart-space-usage in chart.el does not work correctly on windows To: 72919@debbugs.gnu.org Content-Type: multipart/mixed; boundary="000000000000d3faf3062112d283" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 72919 X-Mailman-Approved-At: Sun, 01 Sep 2024 17:47:03 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --000000000000d3faf3062112d283 Content-Type: multipart/alternative; boundary="000000000000d3faf2062112d281" --000000000000d3faf2062112d281 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable ---------- Forwarded message --------- Van: Harm Van der Vegt 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 >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 th= e 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 : > > From: Harm Van der Vegt > > Date: Sat, 31 Aug 2024 20:52:41 +0200 > > > > Load the builtin chart package. When chart-space-usage is run, targetin= g > > 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 =E2=80=98cd g:/Shakespeare/;du -sk *=E2=80=99... > > 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 mak= e > > 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) > --000000000000d3faf2062112d281 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


---------- Forwarded message ---------
Van: Harm Van der Vegt <harmvegt@gmail.com>=
Date: zo 1 sep 2024 om 20:11
Subject: Re: bug#72919: 29.1; ch= art-space-usage in chart.el does not work correctly on windows
To: Eli Z= aretskii <eliz@gnu.org>
=

>Thanks.=C2=A0 However, I think your changes ar= e not entirely correct: they
>fail to account for space usage of file= s 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 pr= eference for using system binaries above elisp for cases like these?
>So I came up with the following changes instead.=C2=A0 Could you pleas= e try
>them, both with and without du.exe on PATH?=C2=A0 If these cha= nges give
>good results, I will install them.

Thanks.

I= 've tried your changes with and without du. This uncovered something=C2= =A0in the
original implementation, namely that the original imple= mentation 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=C2=A0
emacs= repository root. Without du it shows .git as the largest.

I'm n= ot sure which output is the wanted output.

I've attempted= to find a shell independent way to have du show dotfiles, but it=C2=A0
appears to be rather tricky.

I've made a new patch that m= akes the elisp implementation recursive, uses the
rounding functi= on provided by you and shows dotfiles.

Op zo 1 sep 2024 om 10:13 schre= ef Eli Zaretskii <eliz= @gnu.org>:
harmvegt@gmail.com>
> Date: Sat, 31 Aug 2024 20:52:41 +0200
>
> Load the builtin chart package. When chart-space-usage is run, targeti= ng
> any directory, chart fails to find any files and therefore can't c= reate
> 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 =E2=80=98cd g:/Shakespeare/;du -sk *=E2=80=99...
> 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 migh= t
> 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 ma= ke
> it OS agnostic and attached the patch to this email.

Thanks.=C2=A0 However, I think your changes are not entirely correct: they<= br> 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.=C2=A0 In addition= , I think
if someone has 'du' on Windows, it should be used.

So I came up with the following changes instead.=C2=A0 Could you please try=
them, both with and without du.exe on PATH?=C2=A0 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
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0(lambda (a b) (> (cdr a) (cdr b))))
=C2=A0 =C2=A0 =C2=A0))

+;; This assumes 4KB blocks
+(defun chart--file-size (size)
+=C2=A0 (* (/ (+ size 4095) 4096) 4096))
+
+(defun chart--directory-size (dir)
+=C2=A0 "Compute total size of files in directory DIR and its subdirec= tories.
+DIR is assumed to be a directory, verified by the caller."
+=C2=A0 (let ((size 0))
+=C2=A0 =C2=A0 (dolist (file (directory-files-recursively dir "."= t))
+=C2=A0 =C2=A0 =C2=A0 (let ((fsize (nth 7 (file-attributes file))))
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 (if (> fsize 0)
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (setq size
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (+ size (ch= art--file-size fsize))))))
+=C2=A0 =C2=A0 size))
+
=C2=A0(defun chart-space-usage (d)
=C2=A0 =C2=A0"Display a top usage chart for directory D."
=C2=A0 =C2=A0(interactive "DDirectory: ")
=C2=A0 =C2=A0(message "Collecting statistics...")
=C2=A0 =C2=A0(let ((nmlst nil)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 (cntlst nil)
-=C2=A0 =C2=A0 =C2=A0 =C2=A0(b (get-buffer-create " *du-tmp*")))<= br> -=C2=A0 =C2=A0 (set-buffer b)
-=C2=A0 =C2=A0 (erase-buffer)
-=C2=A0 =C2=A0 (insert "cd " d ";du -sk * \n")
-=C2=A0 =C2=A0 (message "Running `cd %s;du -sk *'..." d)
-=C2=A0 =C2=A0 (call-process-region (point-min) (point-max) shell-file-name= t
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 (current-buffer) nil)
-=C2=A0 =C2=A0 (goto-char (point-min))
-=C2=A0 =C2=A0 (message "Scanning output ...")
-=C2=A0 =C2=A0 (while (re-search-forward "^\\([0-9]+\\)[ \t]+\\([^ \n]= +\\)$" nil t)
-=C2=A0 =C2=A0 =C2=A0 (let* ((nam (buffer-substring (match-beginning 2) (ma= tch-end 2)))
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (num (buffer-substring (match-be= ginning 1) (match-end 1))))
-=C2=A0 =C2=A0 =C2=A0 =C2=A0(setq nmlst (cons nam nmlst)
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0;; * 1000 to put it into b= ytes
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0cntlst (cons (* (string-to= -number num) 1000) cntlst))))
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 b)
+=C2=A0 =C2=A0 (if (executable-find "du")
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 (progn
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(setq b (get-buffer-create " *du-tm= p*"))
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (set-buffer b)
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (erase-buffer)
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (if (and (memq system-type '(window= s-nt ms-dos))
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(fbou= ndp 'w32-shell-dos-semantics)
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(w32-= shell-dos-semantics))
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (progn
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; With Windows sh= ells, 'cd' does not change the drive,
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; and ';'= is not reliable for running multiple
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; commands, so us= e alternatives.=C2=A0 We quote the
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; directory becau= se otherwise pushd will barf on a
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; directory with = forward slashes.
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (insert "push= d \"" d "\" && du -sk * \n")
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (message "Run= ning `pushd \"%s\" && du -sk *'..." d))
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (insert "cd " d "= ;du -sk * \n")
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (message "Running `cd %s;du= -sk *'..." d))
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (call-process-region (point-min) (point= -max) shell-file-name t
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (current-buffer) nil)
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (goto-char (point-min))
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (message "Scanning output ..."= ;)
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (while (re-search-forward "^\\([0-= 9]+\\)[ \t]+\\([^ \n]+\\)$" nil t)
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (let* ((nam (buffer-substring (m= atch-beginning 2) (match-end 2)))
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (num (buffe= r-substring (match-beginning 1) (match-end 1))))
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(setq nmlst (cons nam nmls= t)
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0;; * = 1000 to put it into bytes
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0cntls= t (cons (* (string-to-number num) 1000) cntlst)))))
+=C2=A0 =C2=A0 =C2=A0 (dolist (file (directory-files d t directory-files-no= -dot-files-regexp))
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 (setq nmlst (cons (file-name-nondirectory file= ) nmlst))
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 (if (file-regular-p file)
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (setq cntlst (cons (chart--file-= size
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (nth 7 (file-attributes file)))
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0cntlst))
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (setq cntlst (cons (chart--directory-si= ze file) cntlst)))))
=C2=A0 =C2=A0 =C2=A0(if (not nmlst)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 (error "No files found!"))
=C2=A0 =C2=A0 =C2=A0(chart-bar-quickie 'vertical (format "Largest = files in %s" d)
--000000000000d3faf2062112d281-- --000000000000d3faf3062112d283 Content-Type: application/x-patch; name="0001-Make-chart-space-usage-OS-and-shell-independent.patch" Content-Disposition: attachment; filename="0001-Make-chart-space-usage-OS-and-shell-independent.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m0jvwvd20 RnJvbSA2ZjUzZDY1ZjlhZTVlMWM2MWEyY2EyNjUwYjE0OWM4OTVjZTk3OTRjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIYXJtIHZhbiBkZXIgVmVndCA8aGFybXZlZ3RAZ21haWwuY29t PgpEYXRlOiBTdW4sIDEgU2VwIDIwMjQgMjA6MDM6MzQgKzAyMDAKU3ViamVjdDogW1BBVENIXSBN YWtlIGNoYXJ0LXNwYWNlLXVzYWdlIE9TIGFuZCBzaGVsbCBpbmRlcGVuZGVudAoKLS0tCiBsaXNw L2VtYWNzLWxpc3AvY2hhcnQuZWwgfCA0MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0t LS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDI5IGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL2xpc3AvZW1hY3MtbGlzcC9jaGFydC5lbCBiL2xpc3AvZW1hY3Mt bGlzcC9jaGFydC5lbAppbmRleCBjMTk1Y2NiNzE2NS4uYjAzMDJiNTUyNzggMTAwNjQ0Ci0tLSBh L2xpc3AvZW1hY3MtbGlzcC9jaGFydC5lbAorKysgYi9saXNwL2VtYWNzLWxpc3AvY2hhcnQuZWwK QEAgLTY0MSwyNyArNjQxLDQ0IEBAIFNPUlQtUFJFRCBpZiBkZXNpcmVkLiIKIAkJICAgICAgIChs YW1iZGEgKGEgYikgKD4gKGNkciBhKSAoY2RyIGIpKSkpCiAgICAgKSkKIAorOzsgVGhpcyBhc3N1 bWVzIDRLQiBibG9ja3MKKyhkZWZ1biBjaGFydC0tZmlsZS1zaXplIChzaXplKQorICAoKiAoLyAo KyBzaXplIDQwOTUpIDQwOTYpIDQwOTYpKQorCisoZGVmdW4gY2hhcnQtLWRpcmVjdG9yeS1zaXpl IChkaXIpCisgICJDb21wdXRlIHRvdGFsIHNpemUgb2YgZmlsZXMgaW4gZGlyZWN0b3J5IERJUiBh bmQgaXRzIHN1YmRpcmVjdG9yaWVzLgorRElSIGlzIGFzc3VtZWQgdG8gYmUgYSBkaXJlY3Rvcnks IHZlcmlmaWVkIGJ5IHRoZSBjYWxsZXIuIgorICAobGV0ICgodG90YWwtc2l6ZSAwKSkKKyAgICAo ZG9saXN0IChmaWxlIChkaXJlY3RvcnktZmlsZXMgZGlyIHQgZGlyZWN0b3J5LWZpbGVzLW5vLWRv dC1maWxlcy1yZWdleHApKQorICAgICAgKGNvbmQKKyAgICAgICAoKGZpbGUtcmVndWxhci1wIGZp bGUpCisgICAgICAgIChzZXRxIHRvdGFsLXNpemUgKCsgdG90YWwtc2l6ZSAoY2hhcnQtLWZpbGUt c2l6ZSAobnRoIDcgKGZpbGUtYXR0cmlidXRlcyBmaWxlKSkpKSkpCisgICAgICAgKChmaWxlLWRp cmVjdG9yeS1wIGZpbGUpCisgICAgICAgIChzZXRxIHRvdGFsLXNpemUgKCsgdG90YWwtc2l6ZSAo Y2hhcnQtLWRpcmVjdG9yeS1zaXplIGZpbGUpKSkpKSkKKyAgICB0b3RhbC1zaXplKSkKKwogKGRl ZnVuIGNoYXJ0LXNwYWNlLXVzYWdlIChkKQogICAiRGlzcGxheSBhIHRvcCB1c2FnZSBjaGFydCBm b3IgZGlyZWN0b3J5IEQuIgogICAoaW50ZXJhY3RpdmUgIkREaXJlY3Rvcnk6ICIpCiAgIChtZXNz YWdlICJDb2xsZWN0aW5nIHN0YXRpc3RpY3MuLi4iKQogICAobGV0ICgobm1sc3QgbmlsKQotICAg ICAgICAoY250bHN0IG5pbCkpCi0gICAgKGRvbGlzdCAoZmlsZSAoZGlyZWN0b3J5LWZpbGVzIGQg dCkpCi0gICAgICAod2hlbiAoZmlsZS1yZWd1bGFyLXAgZmlsZSkKLSAgICAgICAgKGxldCAoKHNp emUgKG50aCA3IChmaWxlLWF0dHJpYnV0ZXMgZmlsZSkpKSkKKwkoY250bHN0IG5pbCkpCisKKyAg ICAoZG9saXN0IChmaWxlIChkaXJlY3RvcnktZmlsZXMgZCB0IGRpcmVjdG9yeS1maWxlcy1uby1k b3QtZmlsZXMtcmVnZXhwKSkKKyAgICAgICAgKGxldCAoKHNpemUgKGlmIChmaWxlLXJlZ3VsYXIt cCBmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgKG50aCA3IChmaWxlLWF0dHJpYnV0ZXMg ZmlsZSkpCisgICAgICAgICAgICAgICAgICAgICAgKGNoYXJ0LS1kaXJlY3Rvcnktc2l6ZSBmaWxl KSkpKQogICAgICAgICAgIChzZXRxIG5tbHN0IChjb25zIChmaWxlLW5hbWUtbm9uZGlyZWN0b3J5 IGZpbGUpIG5tbHN0KSkKLSAgICAgICAgICAoc2V0cSBjbnRsc3QgKGNvbnMgc2l6ZSBjbnRsc3Qp KSkpKQorICAgICAgICAgIChzZXRxIGNudGxzdCAoY29ucyAoY2hhcnQtLWZpbGUtc2l6ZSBzaXpl KSBjbnRsc3QpKSkpCiAKICAgICAoaWYgKG5vdCBubWxzdCkKLSAgICAgICAgKGVycm9yICJObyBm aWxlcyBmb3VuZCEiKSkKLQotICAgIDs7IERpc3BsYXkgdGhlIGNoYXJ0IGlmIGZpbGVzIGFyZSBm b3VuZAorCShlcnJvciAiTm8gZmlsZXMgZm91bmQhIikpCiAgICAgKGNoYXJ0LWJhci1xdWlja2ll ICd2ZXJ0aWNhbCAoZm9ybWF0ICJMYXJnZXN0IGZpbGVzIGluICVzIiBkKQotICAgICAgICAgICAg ICAgICAgICAgICBubWxzdCAiRmlsZSBOYW1lIgotICAgICAgICAgICAgICAgICAgICAgICBjbnRs c3QgIkZpbGUgU2l6ZSIKLSAgICAgICAgICAgICAgICAgICAgICAgMTAKLSAgICAgICAgICAgICAg ICAgICAgICAgKGxhbWJkYSAoYSBiKSAoPiAoY2RyIGEpIChjZHIgYikpKSkpKQorCQkgICAgICAg bm1sc3QgIkZpbGUgTmFtZSIKKwkJICAgICAgIGNudGxzdCAiRmlsZSBTaXplIgorCQkgICAgICAg MTAKKwkJICAgICAgIChsYW1iZGEgKGEgYikgKD4gKGNkciBhKSAoY2RyIGIpKSkpCisgICAgKSkK IAogKGRlZnVuIGNoYXJ0LWVtYWNzLXN0b3JhZ2UgKCkKICAgIkNoYXJ0IHRoZSBjdXJyZW50IHN0 b3JhZ2UgcmVxdWlyZW1lbnRzIG9mIEVtYWNzLiIKLS0gCjIuMTEuMC53aW5kb3dzLjMKCg== --000000000000d3faf3062112d283-- From debbugs-submit-bounces@debbugs.gnu.org Sun Sep 01 17:47:16 2024 Received: (at 72919) by debbugs.gnu.org; 1 Sep 2024 21:47:16 +0000 Received: from localhost ([127.0.0.1]:40866 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1sksPj-0008ER-80 for submit@debbugs.gnu.org; Sun, 01 Sep 2024 17:47:15 -0400 Received: from mail-ej1-f45.google.com ([209.85.218.45]:58668) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1skpwv-0002EN-9K for 72919@debbugs.gnu.org; Sun, 01 Sep 2024 15:09:22 -0400 Received: by mail-ej1-f45.google.com with SMTP id a640c23a62f3a-a86acbaddb4so408322866b.1 for <72919@debbugs.gnu.org>; Sun, 01 Sep 2024 12:08:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1725217634; x=1725822434; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=pW4JGIbaIH+w6ktdeNdKXvCl6PXXGCL/FH5Naa8OYXk=; b=TXn8PVfgRK4NdA67EPn0KmmEL6phE5WtGJcYHhyiAS4AwFwMfVth7BtM507FiP/7QM PvstV9Nh0LZqvQY1VKYIYoHsBoXkXmxxWTE4B3sXQndc4IqamavTDq0j7waf4UonXQFi CQ2chjRnZXt7Cos/cXmsvswA8wvy5lv6OshtUkF0nhf24XOePXD73EKycROhA9loqHJL m5hd7uPdTdistp/o+aat0KsI58HADBB7XC2WOe/PM4hWIdG/MSsBM/BAmL15QMSd9dx/ u+W9tmmjOMyNIc4e7dfrIj2a7LAfZhW7Rjs1pm1RXyrH3wPR4VHab7fF4c2k9ZKiBkSJ SKuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1725217634; x=1725822434; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=pW4JGIbaIH+w6ktdeNdKXvCl6PXXGCL/FH5Naa8OYXk=; b=RLDipKqq5bUmMTtBMu3ufrZPpQB+N4JzoLd+2O1Q4sXtlJVLjB1ZSTJm2zmo02PdoC wsFqok3jWhsqjR2/fL9PatMi3Ca63GvRmW6fdxF7nlRjsq/XroZDXEIoUvRPktZ6Gh4Z ynl27AsiQrwLcXSulR+RbSlhiRj+7cm1Bi4RgApzoEylBugGn7x2R86IRv63goDY3EYu ubR2OTEtopd0F1CRnmjk8XmXN+0TCP24rObDcM6pnwf5mFqVBIxmHObnV9CzGDKcFqRZ 4msszQwEJopohAdXHTuWfm5M7H0Isa7zwb49FCsvab5fxMzH1MmirXG3vQW/OLKcXHvN t26w== X-Gm-Message-State: AOJu0YwVV1vC81eA8dJRlHHVy54NK+VJagqR9unJ6I+ilZWM6N5rrTrx JT3eRNqvPEBrVEXZk6ojVZugCIIfOIHX55OruGkpXbFRNcz0UW34z+W/iczoAXUjBGq+d0lV7ph xqJVrcsAUE7RtMA6zJawcFzD0DKs= X-Google-Smtp-Source: AGHT+IFy9JKSqbQ7sGt7pc0olF8GhxMK419Uj1/n89XNM9Z68dU1xerD4sNBWVgFnYIGye3yPgwDJr11stxI5hY/jto= X-Received: by 2002:a17:907:97c3:b0:a7a:b1a8:6a2e with SMTP id a640c23a62f3a-a897f860feemr959917966b.28.1725217633948; Sun, 01 Sep 2024 12:07:13 -0700 (PDT) MIME-Version: 1.0 References: <86seujaj0r.fsf@gnu.org> <86bk179q94.fsf@gnu.org> In-Reply-To: <86bk179q94.fsf@gnu.org> From: Harm Van der Vegt Date: Sun, 1 Sep 2024 21:06:58 +0200 Message-ID: Subject: Re: bug#72919: 29.1; chart-space-usage in chart.el does not work correctly on windows To: Eli Zaretskii Content-Type: multipart/alternative; boundary="0000000000003b5ae206211388b8" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 72919 X-Mailman-Approved-At: Sun, 01 Sep 2024 17:47:03 -0400 Cc: 72919@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --0000000000003b5ae206211388b8 Content-Type: text/plain; charset="UTF-8" Clear, thanks for the response! Op zo 1 sep 2024 om 20:35 schreef Eli Zaretskii : > [Please use Reply All to reply, so that the bug tracker is CC'ed.] > > > From: Harm Van der Vegt > > 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 > 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 > > --0000000000003b5ae206211388b8 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Clear, thanks for the response!

Op zo 1 sep 2024 om 20:35 s= chreef Eli Zaretskii <eliz@gnu.org&g= t;:
[Please use = Reply All to reply, so that the bug tracker is CC'ed.]

> From: Harm Van der Vegt <harmvegt@gmail.com>
> Date: Sun, 1 Sep 2024 20:11:39 +0200
>
> >Thanks.=C2=A0 However, I think your changes are not entirely corre= ct: 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 sh= ould 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 correct= ly
for block size), which a Lisp implementation can only approximate.=C2=A0 I<= br> 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.=C2=A0 Could you p= lease try
> >them, both with and without du.exe on PATH?=C2=A0 If these changes= give
> >good results, I will install them.
>
> Thanks.
>
> I've tried your changes with and without du. This uncovered someth= ing in the
> original implementation, namely that the original implementation did n= ot count
> hidden files and directories. du * skips dotfiles for me.
>
> With du present chart-space-usage shows the lisp directory as the larg= est 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.=C2=A0 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 dot= files, 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 recursiv= e, 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<= br> >From: Harm van der Vegt <harmvegt@gmail.com>
Date: Sun, 1 Sep 2024 20:03:34 +0200
Subject: [PATCH] Make chart-space-usage OS and shell independent

---
=C2=A0lisp/emacs-lisp/chart.el | 41 +++++++++++++++++++++++++++++----------= --
=C2=A01 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."
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0(lambda (a b) (> (cdr a) (cdr b))))
=C2=A0 =C2=A0 =C2=A0))

+;; This assumes 4KB blocks
+(defun chart--file-size (size)
+=C2=A0 (* (/ (+ size 4095) 4096) 4096))
+
+(defun chart--directory-size (dir)
+=C2=A0 "Compute total size of files in directory DIR and its subdirec= tories.
+DIR is assumed to be a directory, verified by the caller."
+=C2=A0 (let ((total-size 0))
+=C2=A0 =C2=A0 (dolist (file (directory-files dir t directory-files-no-dot-= files-regexp))
+=C2=A0 =C2=A0 =C2=A0 (cond
+=C2=A0 =C2=A0 =C2=A0 =C2=A0((file-regular-p file)
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 (setq total-size (+ total-size (chart--file-si= ze (nth 7 (file-attributes file))))))
+=C2=A0 =C2=A0 =C2=A0 =C2=A0((file-directory-p file)
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 (setq total-size (+ total-size (chart--directo= ry-size file))))))
+=C2=A0 =C2=A0 total-size))
+
=C2=A0(defun chart-space-usage (d)
=C2=A0 =C2=A0"Display a top usage chart for directory D."
=C2=A0 =C2=A0(interactive "DDirectory: ")
=C2=A0 =C2=A0(message "Collecting statistics...")
=C2=A0 =C2=A0(let ((nmlst nil)
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 (cntlst nil))
-=C2=A0 =C2=A0 (dolist (file (directory-files d t))
-=C2=A0 =C2=A0 =C2=A0 (when (file-regular-p file)
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 (let ((size (nth 7 (file-attributes file)))) +=C2=A0 =C2=A0 =C2=A0 =C2=A0(cntlst nil))
+
+=C2=A0 =C2=A0 (dolist (file (directory-files d t directory-files-no-dot-fi= les-regexp))
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 (let ((size (if (file-regular-p file)
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 (nth 7 (file-attributes file))
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 (chart--directory-size file))))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(setq nmlst (cons (file-name-nondi= rectory file) nmlst))
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (setq cntlst (cons size cntlst)))))
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (setq cntlst (cons (chart--file-size si= ze) cntlst))))

=C2=A0 =C2=A0 =C2=A0(if (not nmlst)
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 (error "No files found!"))
-
-=C2=A0 =C2=A0 ;; Display the chart if files are found
+=C2=A0 =C2=A0 =C2=A0 =C2=A0(error "No files found!"))
=C2=A0 =C2=A0 =C2=A0(chart-bar-quickie 'vertical (format "Largest = files in %s" d)
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0nmlst "File Name"
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0cntlst "File Size"
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A010
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0(lambda (a b) (> (cdr a) (cdr b))))))
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 nmlst "File Name"
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 cntlst "File Size"
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 10
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 (lambda (a b) (> (cdr a) (cdr b))))
+=C2=A0 =C2=A0 ))

=C2=A0(defun chart-emacs-storage ()
=C2=A0 =C2=A0"Chart the current storage requirements of Emacs." --
2.11.0.windows.3

--0000000000003b5ae206211388b8-- From debbugs-submit-bounces@debbugs.gnu.org Sat Sep 07 05:24:33 2024 Received: (at 72919-done) by debbugs.gnu.org; 7 Sep 2024 09:24:33 +0000 Received: from localhost ([127.0.0.1]:54819 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1smrgH-0007Ed-8K for submit@debbugs.gnu.org; Sat, 07 Sep 2024 05:24:33 -0400 Received: from eggs.gnu.org ([209.51.188.92]:48138) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1smrgG-0007ER-09 for 72919-done@debbugs.gnu.org; Sat, 07 Sep 2024 05:24:32 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1smrgA-00031s-0U; Sat, 07 Sep 2024 05:24:26 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=i0A+GnV1m3VhKk3ZG0wMly3B35o9lADjXjwNKQTOsic=; b=b95h/Q603hmo K3McCVRxX7rt8w67e5zEDjD9jb1RXl2sasA4shIEzNpNmBjBaShHiFFfe5RChz3hCJkw44REAs+hy rJ+8DD+HDhd0lAzwXbnYGxnoHpEm/gsv0kdL/nfGlUKjp9BOmS0nwquM+s4axwrji6xBUEjOc0WFk UWqiTTiUIRIqP+ChpCQTtCb0+BNzg7c8m2GZvfGCSJr+qvYPX39KF6nFvYOBTsQDYiX0WQV1QXOnQ iwl3zlr4cWj7slLNqeEnhgHtgbdYBa/AfKpUaCjcPZZ5CVRLbj6efI13toSQoCKaux///NfizyvLZ ow4FRrhkf8/C9Acwdzct6A==; Date: Sat, 07 Sep 2024 12:24:21 +0300 Message-Id: <86v7z7yfy2.fsf@gnu.org> From: Eli Zaretskii To: harmvegt@gmail.com In-Reply-To: <86bk179q94.fsf@gnu.org> (message from Eli Zaretskii on Sun, 01 Sep 2024 21:35:03 +0300) Subject: Re: bug#72919: 29.1; chart-space-usage in chart.el does not work correctly on windows References: <86seujaj0r.fsf@gnu.org> <86bk179q94.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 72919-done Cc: 72919-done@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Cc: 72919@debbugs.gnu.org > Date: Sun, 01 Sep 2024 21:35:03 +0300 > From: Eli Zaretskii > > > 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) From unknown Thu Aug 14 17:27:58 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Sat, 05 Oct 2024 11:24:08 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator