Package: emacs;
Reported by: dino chiesa <dpchiesa <at> hotmail.com>
Date: Sun, 6 Apr 2025 23:23:01 UTC
Severity: wishlist
Found in version 30.1
Done: Eli Zaretskii <eliz <at> gnu.org>
Bug is archived. No further changes may be made.
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 77589 in the body.
You can then email your comments to 77589 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
View this report as an mbox folder, status mbox, maintainer mbox
bug-gnu-emacs <at> gnu.org
:bug#77589
; Package emacs
.
(Sun, 06 Apr 2025 23:23:02 GMT) Full text and rfc822 format available.dino chiesa <dpchiesa <at> hotmail.com>
:bug-gnu-emacs <at> gnu.org
.
(Sun, 06 Apr 2025 23:23:02 GMT) Full text and rfc822 format available.Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
From: dino chiesa <dpchiesa <at> hotmail.com> To: "bug-gnu-emacs <at> gnu.org" <bug-gnu-emacs <at> gnu.org> Subject: 30.1; On Windows, dired does not display Junctions specially Date: Sun, 6 Apr 2025 23:15:59 +0000
When using dired on emacs in Windows, Symlinks are displayed helpfully, with an indication of the target of the symlink. Junction entries are not displayed specially. There is no indication of the target of a Junction. Junctions in Windows are similar to Symbolic Links (symlinks) but slightly different. You can read a comparison here: https://superuser.com/a/1291446/3614 (Why there are both Junctions and symlinks, I do not know) Junctions always use a directory as the target, and it is possible to create a Junction without elevated (Administrator) privileges. So it is sometimes more convenient to use a Junction, instead of a symlink. For example here is the dired output of a test directory. It contains a regular file, a symlink to that regular file, a broken symlink, a regular directory, and a Junction pointing to a different directory. The valid and broken symlinks are displayed helpfully, and dired helpfully uses a different face (dired-broken-symlink) for the broken symlink. dired displays the regular file and regular directory correctly too. But there is nothing that indicates the junction is not a regular directory: c:/Users/dpchi/test: drwx 1 dpchi 0 2025-04-06 15:47 . drwx 1 Administrators 16384 2025-04-06 15:46 .. lrwx 1 Administrators 0 2025-04-06 15:44 broken-symlink.txt -> c:/Users/dpchi/test/non-existent-file.txt -rw- 1 dpchi 148 2023-12-06 15:06 regular-file.txt drwx 1 dpchi 0 2025-04-06 15:47 this-is-a-directory drwx 1 Administrators 32768 2024-12-27 11:30 this-is-a-directory-junction lrwx 1 Administrators 0 2025-04-06 15:44 valid-symlink.txt -> c:/Users/dpchi/test/regular-file.txt In Powershell, I can list the same directory and see the junction and its target. PS C:\Users\dpchi\test> get-childitem Directory: C:\Users\dpchi\test Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 4/6/2025 3:47 PM this-is-a-directory l---- 4/6/2025 3:43 PM this-is-a-directory-junction -> c:\Users\dpchi\elisp-2024 la--- 4/6/2025 3:44 PM 0 broken-symlink.txt -> c:\Users\dpchi\test\non-existent-file.txt -a--- 12/6/2023 3:06 PM 148 regular-file.txt la--- 4/6/2025 3:44 PM 0 valid-symlink.txt -> c:\Users\dpchi\test\regular-file.txt ## Additional Details To create a junction or symlink on Windows you can use these powershell commands: # the following can be done with regular privileges New-Item -Path new-directory-junction -ItemType Junction -Value "c:\path\to\target\directory" # symlinks always point to files, and creating one requires elevated privileges. New-Item -Path valid-symlink.txt -ItemType SymbolicLink -Value "c:\path\to\regular-file.txt" ## Diagnosis I think the code that shows symlinks differently is line 810 in ls-lisp.el (if (stringp file-type) ; is a symbolic link (concat " -> " file-type)) The file-type var is set from file-attribute-type, which is defined in files.el. That gets its information from dired.c (which I am not looking at), which populates a string for (file-attribute-type file-attr) in the case of symbolic link, but does not do the same for Junction. So I think maybe a change in dired.c for Windows might be necessary. ## Expected/Desired behavior: Using dired on Windows, Junction entries show the target of the Junction, similar to how symbolic links are shown. In GNU Emacs 30.1 (build 2, x86_64-w64-mingw32) of 2025-02-23 built on AVALON Windowing system distributor 'Microsoft Corp.', version 10.0.26100 System Description: Microsoft Windows 10 Home (v10.0.2009.26100.3476) Configured using: 'configure --with-modules --without-dbus --with-native-compilation=aot --without-compress-install --with-tree-sitter CFLAGS=-O2 prefix=/g/rel/install/emacs-30.1' Configured features: ACL GIF GMP GNUTLS HARFBUZZ JPEG 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: ENU locale-coding-system: cp1252 Major mode: Dired by ctime Minor modes in effect: global-git-commit-mode: t magit-auto-revert-mode: t default-text-scale-mode: t server-mode: t recentf-mode: t yas-global-mode: t yas-minor-mode: t icomplete-vertical-mode: t icomplete-mode: t override-global-mode: t global-hl-line-mode: t hl-line-mode: t tooltip-mode: t global-eldoc-mode: t show-paren-mode: t electric-indent-mode: t mouse-wheel-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t blink-cursor-mode: t minibuffer-regexp-mode: t buffer-read-only: t column-number-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: ~/elisp/json-reformat hides c:/users/dpchi/.emacs.d/elpa/json-reformat-20220905.2342/json-reformat ~/elisp/protobuf-mode hides c:/users/dpchi/.emacs.d/elpa/protobuf-mode-20240823.1417/protobuf-mode ~/elisp/wgrep hides c:/users/dpchi/.emacs.d/elpa/wgrep-20230203.1214/wgrep c:/users/dpchi/.emacs.d/elpa/transient-20250401.1655/transient hides c:/emacs/share/emacs/30.1/lisp/transient c:/users/dpchi/.emacs.d/elpa/verilog-mode-2025.1.1.100165202/verilog-mode hides c:/emacs/share/emacs/30.1/lisp/progmodes/verilog-mode c:/users/dpchi/.emacs.d/elpa/idlwave-6.5.1/idlwave hides c:/emacs/share/emacs/30.1/lisp/progmodes/idlwave c:/users/dpchi/.emacs.d/elpa/idlwave-6.5.1/idlw-toolbar hides c:/emacs/share/emacs/30.1/lisp/progmodes/idlw-toolbar c:/users/dpchi/.emacs.d/elpa/idlwave-6.5.1/idlw-shell hides c:/emacs/share/emacs/30.1/lisp/progmodes/idlw-shell c:/users/dpchi/.emacs.d/elpa/idlwave-6.5.1/idlw-help hides c:/emacs/share/emacs/30.1/lisp/progmodes/idlw-help c:/users/dpchi/.emacs.d/elpa/idlwave-6.5.1/idlw-complete-structtag hides c:/emacs/share/emacs/30.1/lisp/progmodes/idlw-complete-structtag c:/users/dpchi/.emacs.d/elpa/eglot-1.18/eglot hides c:/emacs/share/emacs/30.1/lisp/progmodes/eglot c:/users/dpchi/.emacs.d/elpa/org-20210929/ox hides c:/emacs/share/emacs/30.1/lisp/org/ox c:/users/dpchi/.emacs.d/elpa/org-20210929/ox-texinfo hides c:/emacs/share/emacs/30.1/lisp/org/ox-texinfo c:/users/dpchi/.emacs.d/elpa/org-20210929/ox-publish hides c:/emacs/share/emacs/30.1/lisp/org/ox-publish c:/users/dpchi/.emacs.d/elpa/org-20210929/ox-org hides c:/emacs/share/emacs/30.1/lisp/org/ox-org c:/users/dpchi/.emacs.d/elpa/org-20210929/ox-odt hides c:/emacs/share/emacs/30.1/lisp/org/ox-odt c:/users/dpchi/.emacs.d/elpa/org-20210929/ox-md hides c:/emacs/share/emacs/30.1/lisp/org/ox-md c:/users/dpchi/.emacs.d/elpa/org-20210929/ox-man hides c:/emacs/share/emacs/30.1/lisp/org/ox-man c:/users/dpchi/.emacs.d/elpa/org-20210929/ox-latex hides c:/emacs/share/emacs/30.1/lisp/org/ox-latex c:/users/dpchi/.emacs.d/elpa/org-20210929/ox-koma-letter hides c:/emacs/share/emacs/30.1/lisp/org/ox-koma-letter c:/users/dpchi/.emacs.d/elpa/org-20210929/ox-icalendar hides c:/emacs/share/emacs/30.1/lisp/org/ox-icalendar c:/users/dpchi/.emacs.d/elpa/org-20210929/ox-html hides c:/emacs/share/emacs/30.1/lisp/org/ox-html c:/users/dpchi/.emacs.d/elpa/org-20210929/ox-beamer hides c:/emacs/share/emacs/30.1/lisp/org/ox-beamer c:/users/dpchi/.emacs.d/elpa/org-20210929/ox-ascii hides c:/emacs/share/emacs/30.1/lisp/org/ox-ascii c:/users/dpchi/.emacs.d/elpa/org-20210929/org hides c:/emacs/share/emacs/30.1/lisp/org/org c:/users/dpchi/.emacs.d/elpa/org-20210929/org-version hides c:/emacs/share/emacs/30.1/lisp/org/org-version c:/users/dpchi/.emacs.d/elpa/org-20210929/org-timer hides c:/emacs/share/emacs/30.1/lisp/org/org-timer c:/users/dpchi/.emacs.d/elpa/org-20210929/org-tempo hides c:/emacs/share/emacs/30.1/lisp/org/org-tempo c:/users/dpchi/.emacs.d/elpa/org-20210929/org-table hides c:/emacs/share/emacs/30.1/lisp/org/org-table c:/users/dpchi/.emacs.d/elpa/org-20210929/org-src hides c:/emacs/share/emacs/30.1/lisp/org/org-src c:/users/dpchi/.emacs.d/elpa/org-20210929/org-refile hides c:/emacs/share/emacs/30.1/lisp/org/org-refile c:/users/dpchi/.emacs.d/elpa/org-20210929/org-protocol hides c:/emacs/share/emacs/30.1/lisp/org/org-protocol c:/users/dpchi/.emacs.d/elpa/org-20210929/org-plot hides c:/emacs/share/emacs/30.1/lisp/org/org-plot c:/users/dpchi/.emacs.d/elpa/org-20210929/org-pcomplete hides c:/emacs/share/emacs/30.1/lisp/org/org-pcomplete c:/users/dpchi/.emacs.d/elpa/org-20210929/org-num hides c:/emacs/share/emacs/30.1/lisp/org/org-num c:/users/dpchi/.emacs.d/elpa/org-20210929/org-mouse hides c:/emacs/share/emacs/30.1/lisp/org/org-mouse c:/users/dpchi/.emacs.d/elpa/org-20210929/org-mobile hides c:/emacs/share/emacs/30.1/lisp/org/org-mobile c:/users/dpchi/.emacs.d/elpa/org-20210929/org-macs hides c:/emacs/share/emacs/30.1/lisp/org/org-macs c:/users/dpchi/.emacs.d/elpa/org-20210929/org-macro hides c:/emacs/share/emacs/30.1/lisp/org/org-macro c:/users/dpchi/.emacs.d/elpa/org-20210929/org-loaddefs hides c:/emacs/share/emacs/30.1/lisp/org/org-loaddefs c:/users/dpchi/.emacs.d/elpa/org-20210929/org-list hides c:/emacs/share/emacs/30.1/lisp/org/org-list c:/users/dpchi/.emacs.d/elpa/org-20210929/org-lint hides c:/emacs/share/emacs/30.1/lisp/org/org-lint c:/users/dpchi/.emacs.d/elpa/org-20210929/org-keys hides c:/emacs/share/emacs/30.1/lisp/org/org-keys c:/users/dpchi/.emacs.d/elpa/org-20210929/org-inlinetask hides c:/emacs/share/emacs/30.1/lisp/org/org-inlinetask c:/users/dpchi/.emacs.d/elpa/org-20210929/org-indent hides c:/emacs/share/emacs/30.1/lisp/org/org-indent c:/users/dpchi/.emacs.d/elpa/org-20210929/org-id hides c:/emacs/share/emacs/30.1/lisp/org/org-id c:/users/dpchi/.emacs.d/elpa/org-20210929/org-habit hides c:/emacs/share/emacs/30.1/lisp/org/org-habit c:/users/dpchi/.emacs.d/elpa/org-20210929/org-goto hides c:/emacs/share/emacs/30.1/lisp/org/org-goto c:/users/dpchi/.emacs.d/elpa/org-20210929/org-footnote hides c:/emacs/share/emacs/30.1/lisp/org/org-footnote c:/users/dpchi/.emacs.d/elpa/org-20210929/org-feed hides c:/emacs/share/emacs/30.1/lisp/org/org-feed c:/users/dpchi/.emacs.d/elpa/org-20210929/org-faces hides c:/emacs/share/emacs/30.1/lisp/org/org-faces c:/users/dpchi/.emacs.d/elpa/org-20210929/org-entities hides c:/emacs/share/emacs/30.1/lisp/org/org-entities c:/users/dpchi/.emacs.d/elpa/org-20210929/org-element hides c:/emacs/share/emacs/30.1/lisp/org/org-element c:/users/dpchi/.emacs.d/elpa/org-20210929/org-duration hides c:/emacs/share/emacs/30.1/lisp/org/org-duration c:/users/dpchi/.emacs.d/elpa/org-20210929/org-datetree hides c:/emacs/share/emacs/30.1/lisp/org/org-datetree c:/users/dpchi/.emacs.d/elpa/org-20210929/org-ctags hides c:/emacs/share/emacs/30.1/lisp/org/org-ctags c:/users/dpchi/.emacs.d/elpa/org-20210929/org-crypt hides c:/emacs/share/emacs/30.1/lisp/org/org-crypt c:/users/dpchi/.emacs.d/elpa/org-20210929/org-compat hides c:/emacs/share/emacs/30.1/lisp/org/org-compat c:/users/dpchi/.emacs.d/elpa/org-20210929/org-colview hides c:/emacs/share/emacs/30.1/lisp/org/org-colview c:/users/dpchi/.emacs.d/elpa/org-20210929/org-clock hides c:/emacs/share/emacs/30.1/lisp/org/org-clock c:/users/dpchi/.emacs.d/elpa/org-20210929/org-capture hides c:/emacs/share/emacs/30.1/lisp/org/org-capture c:/users/dpchi/.emacs.d/elpa/org-20210929/org-attach hides c:/emacs/share/emacs/30.1/lisp/org/org-attach c:/users/dpchi/.emacs.d/elpa/org-20210929/org-attach-git hides c:/emacs/share/emacs/30.1/lisp/org/org-attach-git c:/users/dpchi/.emacs.d/elpa/org-20210929/org-archive hides c:/emacs/share/emacs/30.1/lisp/org/org-archive c:/users/dpchi/.emacs.d/elpa/org-20210929/org-agenda hides c:/emacs/share/emacs/30.1/lisp/org/org-agenda c:/users/dpchi/.emacs.d/elpa/org-20210929/ol hides c:/emacs/share/emacs/30.1/lisp/org/ol c:/users/dpchi/.emacs.d/elpa/org-20210929/ol-w3m hides c:/emacs/share/emacs/30.1/lisp/org/ol-w3m c:/users/dpchi/.emacs.d/elpa/org-20210929/ol-rmail hides c:/emacs/share/emacs/30.1/lisp/org/ol-rmail c:/users/dpchi/.emacs.d/elpa/org-20210929/ol-mhe hides c:/emacs/share/emacs/30.1/lisp/org/ol-mhe c:/users/dpchi/.emacs.d/elpa/org-20210929/ol-irc hides c:/emacs/share/emacs/30.1/lisp/org/ol-irc c:/users/dpchi/.emacs.d/elpa/org-20210929/ol-info hides c:/emacs/share/emacs/30.1/lisp/org/ol-info c:/users/dpchi/.emacs.d/elpa/org-20210929/ol-gnus hides c:/emacs/share/emacs/30.1/lisp/org/ol-gnus c:/users/dpchi/.emacs.d/elpa/org-20210929/ol-eww hides c:/emacs/share/emacs/30.1/lisp/org/ol-eww c:/users/dpchi/.emacs.d/elpa/org-20210929/ol-eshell hides c:/emacs/share/emacs/30.1/lisp/org/ol-eshell c:/users/dpchi/.emacs.d/elpa/org-20210929/ol-doi hides c:/emacs/share/emacs/30.1/lisp/org/ol-doi c:/users/dpchi/.emacs.d/elpa/org-20210929/ol-docview hides c:/emacs/share/emacs/30.1/lisp/org/ol-docview c:/users/dpchi/.emacs.d/elpa/org-20210929/ol-bibtex hides c:/emacs/share/emacs/30.1/lisp/org/ol-bibtex c:/users/dpchi/.emacs.d/elpa/org-20210929/ol-bbdb hides c:/emacs/share/emacs/30.1/lisp/org/ol-bbdb c:/users/dpchi/.emacs.d/elpa/org-20210929/oc hides c:/emacs/share/emacs/30.1/lisp/org/oc c:/users/dpchi/.emacs.d/elpa/org-20210929/oc-natbib hides c:/emacs/share/emacs/30.1/lisp/org/oc-natbib c:/users/dpchi/.emacs.d/elpa/org-20210929/oc-csl hides c:/emacs/share/emacs/30.1/lisp/org/oc-csl c:/users/dpchi/.emacs.d/elpa/org-20210929/oc-biblatex hides c:/emacs/share/emacs/30.1/lisp/org/oc-biblatex c:/users/dpchi/.emacs.d/elpa/org-20210929/oc-basic hides c:/emacs/share/emacs/30.1/lisp/org/oc-basic c:/users/dpchi/.emacs.d/elpa/org-20210929/ob hides c:/emacs/share/emacs/30.1/lisp/org/ob c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-tangle hides c:/emacs/share/emacs/30.1/lisp/org/ob-tangle c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-table hides c:/emacs/share/emacs/30.1/lisp/org/ob-table c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-sqlite hides c:/emacs/share/emacs/30.1/lisp/org/ob-sqlite c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-sql hides c:/emacs/share/emacs/30.1/lisp/org/ob-sql c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-shell hides c:/emacs/share/emacs/30.1/lisp/org/ob-shell c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-sed hides c:/emacs/share/emacs/30.1/lisp/org/ob-sed c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-screen hides c:/emacs/share/emacs/30.1/lisp/org/ob-screen c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-scheme hides c:/emacs/share/emacs/30.1/lisp/org/ob-scheme c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-sass hides c:/emacs/share/emacs/30.1/lisp/org/ob-sass c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-ruby hides c:/emacs/share/emacs/30.1/lisp/org/ob-ruby c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-ref hides c:/emacs/share/emacs/30.1/lisp/org/ob-ref c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-R hides c:/emacs/share/emacs/30.1/lisp/org/ob-R c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-python hides c:/emacs/share/emacs/30.1/lisp/org/ob-python c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-processing hides c:/emacs/share/emacs/30.1/lisp/org/ob-processing c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-plantuml hides c:/emacs/share/emacs/30.1/lisp/org/ob-plantuml c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-perl hides c:/emacs/share/emacs/30.1/lisp/org/ob-perl c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-org hides c:/emacs/share/emacs/30.1/lisp/org/ob-org c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-octave hides c:/emacs/share/emacs/30.1/lisp/org/ob-octave c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-ocaml hides c:/emacs/share/emacs/30.1/lisp/org/ob-ocaml c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-maxima hides c:/emacs/share/emacs/30.1/lisp/org/ob-maxima c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-matlab hides c:/emacs/share/emacs/30.1/lisp/org/ob-matlab c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-makefile hides c:/emacs/share/emacs/30.1/lisp/org/ob-makefile c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-lua hides c:/emacs/share/emacs/30.1/lisp/org/ob-lua c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-lob hides c:/emacs/share/emacs/30.1/lisp/org/ob-lob c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-lisp hides c:/emacs/share/emacs/30.1/lisp/org/ob-lisp c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-lilypond hides c:/emacs/share/emacs/30.1/lisp/org/ob-lilypond c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-latex hides c:/emacs/share/emacs/30.1/lisp/org/ob-latex c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-julia hides c:/emacs/share/emacs/30.1/lisp/org/ob-julia c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-js hides c:/emacs/share/emacs/30.1/lisp/org/ob-js c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-java hides c:/emacs/share/emacs/30.1/lisp/org/ob-java c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-haskell hides c:/emacs/share/emacs/30.1/lisp/org/ob-haskell c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-groovy hides c:/emacs/share/emacs/30.1/lisp/org/ob-groovy c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-gnuplot hides c:/emacs/share/emacs/30.1/lisp/org/ob-gnuplot c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-fortran hides c:/emacs/share/emacs/30.1/lisp/org/ob-fortran c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-forth hides c:/emacs/share/emacs/30.1/lisp/org/ob-forth c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-exp hides c:/emacs/share/emacs/30.1/lisp/org/ob-exp c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-eval hides c:/emacs/share/emacs/30.1/lisp/org/ob-eval c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-eshell hides c:/emacs/share/emacs/30.1/lisp/org/ob-eshell c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-emacs-lisp hides c:/emacs/share/emacs/30.1/lisp/org/ob-emacs-lisp c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-dot hides c:/emacs/share/emacs/30.1/lisp/org/ob-dot c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-ditaa hides c:/emacs/share/emacs/30.1/lisp/org/ob-ditaa c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-css hides c:/emacs/share/emacs/30.1/lisp/org/ob-css c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-core hides c:/emacs/share/emacs/30.1/lisp/org/ob-core c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-comint hides c:/emacs/share/emacs/30.1/lisp/org/ob-comint c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-clojure hides c:/emacs/share/emacs/30.1/lisp/org/ob-clojure c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-calc hides c:/emacs/share/emacs/30.1/lisp/org/ob-calc c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-C hides c:/emacs/share/emacs/30.1/lisp/org/ob-C c:/users/dpchi/.emacs.d/elpa/org-20210929/ob-awk hides c:/emacs/share/emacs/30.1/lisp/org/ob-awk c:/users/dpchi/.emacs.d/elpa/tramp-2.7.2.2/trampver hides c:/emacs/share/emacs/30.1/lisp/net/trampver c:/users/dpchi/.emacs.d/elpa/tramp-2.7.2.2/tramp hides c:/emacs/share/emacs/30.1/lisp/net/tramp c:/users/dpchi/.emacs.d/elpa/tramp-2.7.2.2/tramp-uu hides c:/emacs/share/emacs/30.1/lisp/net/tramp-uu c:/users/dpchi/.emacs.d/elpa/tramp-2.7.2.2/tramp-sudoedit hides c:/emacs/share/emacs/30.1/lisp/net/tramp-sudoedit c:/users/dpchi/.emacs.d/elpa/tramp-2.7.2.2/tramp-sshfs hides c:/emacs/share/emacs/30.1/lisp/net/tramp-sshfs c:/users/dpchi/.emacs.d/elpa/tramp-2.7.2.2/tramp-smb hides c:/emacs/share/emacs/30.1/lisp/net/tramp-smb c:/users/dpchi/.emacs.d/elpa/tramp-2.7.2.2/tramp-sh hides c:/emacs/share/emacs/30.1/lisp/net/tramp-sh c:/users/dpchi/.emacs.d/elpa/tramp-2.7.2.2/tramp-rclone hides c:/emacs/share/emacs/30.1/lisp/net/tramp-rclone c:/users/dpchi/.emacs.d/elpa/tramp-2.7.2.2/tramp-message hides c:/emacs/share/emacs/30.1/lisp/net/tramp-message c:/users/dpchi/.emacs.d/elpa/tramp-2.7.2.2/tramp-loaddefs hides c:/emacs/share/emacs/30.1/lisp/net/tramp-loaddefs c:/users/dpchi/.emacs.d/elpa/tramp-2.7.2.2/tramp-integration hides c:/emacs/share/emacs/30.1/lisp/net/tramp-integration c:/users/dpchi/.emacs.d/elpa/tramp-2.7.2.2/tramp-gvfs hides c:/emacs/share/emacs/30.1/lisp/net/tramp-gvfs c:/users/dpchi/.emacs.d/elpa/tramp-2.7.2.2/tramp-fuse hides c:/emacs/share/emacs/30.1/lisp/net/tramp-fuse c:/users/dpchi/.emacs.d/elpa/tramp-2.7.2.2/tramp-ftp hides c:/emacs/share/emacs/30.1/lisp/net/tramp-ftp c:/users/dpchi/.emacs.d/elpa/tramp-2.7.2.2/tramp-crypt hides c:/emacs/share/emacs/30.1/lisp/net/tramp-crypt c:/users/dpchi/.emacs.d/elpa/tramp-2.7.2.2/tramp-container hides c:/emacs/share/emacs/30.1/lisp/net/tramp-container c:/users/dpchi/.emacs.d/elpa/tramp-2.7.2.2/tramp-compat hides c:/emacs/share/emacs/30.1/lisp/net/tramp-compat c:/users/dpchi/.emacs.d/elpa/tramp-2.7.2.2/tramp-cmds hides c:/emacs/share/emacs/30.1/lisp/net/tramp-cmds c:/users/dpchi/.emacs.d/elpa/tramp-2.7.2.2/tramp-cache hides c:/emacs/share/emacs/30.1/lisp/net/tramp-cache c:/users/dpchi/.emacs.d/elpa/tramp-2.7.2.2/tramp-archive hides c:/emacs/share/emacs/30.1/lisp/net/tramp-archive c:/users/dpchi/.emacs.d/elpa/tramp-2.7.2.2/tramp-androidsu hides c:/emacs/share/emacs/30.1/lisp/net/tramp-androidsu c:/users/dpchi/.emacs.d/elpa/tramp-2.7.2.2/tramp-adb hides c:/emacs/share/emacs/30.1/lisp/net/tramp-adb c:/users/dpchi/.emacs.d/elpa/track-changes-1.4/track-changes hides c:/emacs/share/emacs/30.1/lisp/emacs-lisp/track-changes c:/users/dpchi/.emacs.d/elpa/faceup-20170925.1946/faceup hides c:/emacs/share/emacs/30.1/lisp/emacs-lisp/faceup c:/emacs/share/emacs/30.1/lisp/emacs-lisp/compat hides c:/users/dpchi/.emacs.d/elpa/compat-30.1.0.0/compat c:/emacs/share/emacs/30.1/lisp/emacs-lisp/eldoc hides c:/users/dpchi/.emacs.d/elpa/eldoc-1.15.0/eldoc c:/emacs/share/emacs/30.1/lisp/erc/erc hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc c:/emacs/share/emacs/30.1/lisp/erc/erc-xdcc hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc-xdcc c:/emacs/share/emacs/30.1/lisp/erc/erc-truncate hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc-truncate c:/emacs/share/emacs/30.1/lisp/erc/erc-track hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc-track c:/emacs/share/emacs/30.1/lisp/erc/erc-status-sidebar hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc-status-sidebar c:/emacs/share/emacs/30.1/lisp/erc/erc-stamp hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc-stamp c:/emacs/share/emacs/30.1/lisp/erc/erc-spelling hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc-spelling c:/emacs/share/emacs/30.1/lisp/erc/erc-speedbar hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc-speedbar c:/emacs/share/emacs/30.1/lisp/erc/erc-sound hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc-sound c:/emacs/share/emacs/30.1/lisp/erc/erc-services hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc-services c:/emacs/share/emacs/30.1/lisp/erc/erc-sasl hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc-sasl c:/emacs/share/emacs/30.1/lisp/erc/erc-ring hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc-ring c:/emacs/share/emacs/30.1/lisp/erc/erc-replace hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc-replace c:/emacs/share/emacs/30.1/lisp/erc/erc-pcomplete hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc-pcomplete c:/emacs/share/emacs/30.1/lisp/erc/erc-page hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc-page c:/emacs/share/emacs/30.1/lisp/erc/erc-notify hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc-notify c:/emacs/share/emacs/30.1/lisp/erc/erc-nicks hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc-nicks c:/emacs/share/emacs/30.1/lisp/erc/erc-networks hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc-networks c:/emacs/share/emacs/30.1/lisp/erc/erc-netsplit hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc-netsplit c:/emacs/share/emacs/30.1/lisp/erc/erc-menu hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc-menu c:/emacs/share/emacs/30.1/lisp/erc/erc-match hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc-match c:/emacs/share/emacs/30.1/lisp/erc/erc-log hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc-log c:/emacs/share/emacs/30.1/lisp/erc/erc-loaddefs hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc-loaddefs c:/emacs/share/emacs/30.1/lisp/erc/erc-list hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc-list c:/emacs/share/emacs/30.1/lisp/erc/erc-lang hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc-lang c:/emacs/share/emacs/30.1/lisp/erc/erc-join hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc-join c:/emacs/share/emacs/30.1/lisp/erc/erc-imenu hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc-imenu c:/emacs/share/emacs/30.1/lisp/erc/erc-identd hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc-identd c:/emacs/share/emacs/30.1/lisp/erc/erc-ibuffer hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc-ibuffer c:/emacs/share/emacs/30.1/lisp/erc/erc-goodies hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc-goodies c:/emacs/share/emacs/30.1/lisp/erc/erc-fill hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc-fill c:/emacs/share/emacs/30.1/lisp/erc/erc-ezbounce hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc-ezbounce c:/emacs/share/emacs/30.1/lisp/erc/erc-desktop-notifications hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc-desktop-notifications c:/emacs/share/emacs/30.1/lisp/erc/erc-dcc hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc-dcc c:/emacs/share/emacs/30.1/lisp/erc/erc-compat hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc-compat c:/emacs/share/emacs/30.1/lisp/erc/erc-common hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc-common c:/emacs/share/emacs/30.1/lisp/erc/erc-capab hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc-capab c:/emacs/share/emacs/30.1/lisp/erc/erc-button hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc-button c:/emacs/share/emacs/30.1/lisp/erc/erc-backend hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc-backend c:/emacs/share/emacs/30.1/lisp/erc/erc-autoaway hides c:/users/dpchi/.emacs.d/elpa/erc-5.6/erc-autoaway c:/emacs/share/emacs/30.1/lisp/progmodes/flymake hides c:/users/dpchi/.emacs.d/elpa/flymake-1.3.7/flymake c:/emacs/share/emacs/30.1/lisp/jsonrpc hides c:/users/dpchi/.emacs.d/elpa/jsonrpc-1.0.25/jsonrpc c:/emacs/share/emacs/30.1/lisp/progmodes/project hides c:/users/dpchi/.emacs.d/elpa/project-0.11.1/project c:/emacs/share/emacs/30.1/lisp/emacs-lisp/seq hides c:/users/dpchi/.emacs.d/elpa/seq-2.24/seq c:/emacs/share/emacs/30.1/lisp/net/soap-inspect hides c:/users/dpchi/.emacs.d/elpa/soap-client-3.2.3/soap-inspect c:/emacs/share/emacs/30.1/lisp/net/soap-client hides c:/users/dpchi/.emacs.d/elpa/soap-client-3.2.3/soap-client c:/emacs/share/emacs/30.1/lisp/use-package/use-package hides c:/users/dpchi/.emacs.d/elpa/use-package-2.4.6/use-package c:/emacs/share/emacs/30.1/lisp/use-package/use-package-lint hides c:/users/dpchi/.emacs.d/elpa/use-package-2.4.6/use-package-lint c:/emacs/share/emacs/30.1/lisp/use-package/use-package-jump hides c:/users/dpchi/.emacs.d/elpa/use-package-2.4.6/use-package-jump c:/emacs/share/emacs/30.1/lisp/use-package/use-package-ensure hides c:/users/dpchi/.emacs.d/elpa/use-package-2.4.6/use-package-ensure c:/emacs/share/emacs/30.1/lisp/use-package/use-package-ensure-system-package hides c:/users/dpchi/.emacs.d/elpa/use-package-2.4.6/use-package-ensure-system-package c:/emacs/share/emacs/30.1/lisp/use-package/use-package-diminish hides c:/users/dpchi/.emacs.d/elpa/use-package-2.4.6/use-package-diminish c:/emacs/share/emacs/30.1/lisp/use-package/use-package-delight hides c:/users/dpchi/.emacs.d/elpa/use-package-2.4.6/use-package-delight c:/emacs/share/emacs/30.1/lisp/use-package/use-package-core hides c:/users/dpchi/.emacs.d/elpa/use-package-2.4.6/use-package-core c:/emacs/share/emacs/30.1/lisp/use-package/use-package-bind-key hides c:/users/dpchi/.emacs.d/elpa/use-package-2.4.6/use-package-bind-key c:/emacs/share/emacs/30.1/lisp/progmodes/xref hides c:/users/dpchi/.emacs.d/elpa/xref-1.7.0/xref Features: (shadow sort mail-extr facemenu cus-start descr-text mule-diag wdired emacsbug mule-util apropos loadhist cl-print edebug debug backtrace json-reformat json-mode json-snatcher js c-ts-common treesit jsonnet-mode smie tramp-cache tramp-sh shortdoc comp-common help-fns radix-tree apheleia apheleia-rcs apheleia-dp apheleia-formatters apheleia-utils apheleia-log apheleia-formatter-context time-stamp misearch multi-isearch go-mode find-file ffap etags fileloop generator xref compile x509-mode x509-asn1-mode aidermacs aidermacs-output ediff ediff-merg ediff-mult ediff-wind ediff-diff ediff-help ediff-init ediff-util aidermacs-models aidermacs-backends aidermacs-backend-comint find-dired tramp trampver tramp-integration files-x tramp-message tramp-compat xdg parse-time iso8601 tramp-loaddefs vc-git vc-dispatcher project company magit-submodule magit-blame magit-stash magit-reflog magit-bisect magit-push magit-pull magit-fetch magit-clone magit-remote magit-commit magit-sequence magit-notes magit-worktree magit-tag magit-merge magit-branch magit-reset magit-files magit-refs magit-status magit magit-repos magit-apply magit-wip magit-log which-func imenu magit-diff smerge-mode diff diff-mode track-changes git-commit log-edit message sendmail yank-media puny rfc822 mml mml-sec epa derived epg rfc6068 epg-config gnus-util 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 magit-core magit-autorevert time-date magit-margin magit-transient magit-process with-editor shell pcomplete comint ansi-osc ring magit-mode transient benchmark magit-git magit-base magit-section format-spec cursor-sensor crm llama default-text-scale gptel-gemini dpc-gemini gptel gptel-openai text-property-search electric-operator dash thingatpt cc-mode cc-fonts cc-guess cc-menus cc-cmds indent-bars compat face-remap noutline outline color display-line-numbers autorevert filenotify server recentf tree-widget cc-styles cc-align cc-engine cc-vars cc-defs dtrt-indent advice dino-dired-fixups dired-aux cl dired dired-loaddefs flycheck ansi-color find-func cus-edit pp cus-load wid-edit skeleton httpget yasnippet icomplete edmacro kmacro use-package-bind-key bind-key hl-line finder-inf dpc-sys-windows-nt dino-utility s cl-extra help-mode use-package-ensure use-package-core aidermacs-autoloads apheleia-autoloads easy-mmode async-autoloads caddyfile-mode-autoloads command-log-mode-autoloads company-box-autoloads company-autoloads dart-mode-autoloads default-text-scale-autoloads eglot-autoloads eglot-booster-autoloads electric-operator-autoloads embark-autoloads expand-region-autoloads f-autoloads faceup-autoloads flycheck-autoloads frame-local-autoloads gnu-elpa-keyring-update-autoloads go-autocomplete-autoloads auto-complete-autoloads go-mode-autoloads google-gemini-autoloads gptel-autoloads ht-autoloads idlwave-autoloads indent-bars-autoloads json-mode-autoloads json-snatcher-autoloads jsonnet-mode-autoloads logito-autoloads loop-autoloads lv-autoloads magit-autoloads pcase magit-section-autoloads llama-autoloads markdown-mode-autoloads msgu-autoloads multiple-cursors-autoloads org-autoloads path-helper-autoloads popup-autoloads powershell-autoloads protobuf-mode-autoloads rego-mode-autoloads reformatter-autoloads request-autoloads rg-autoloads s-autoloads shell-maker-autoloads spinner-autoloads sr-speedbar-autoloads tblui-autoloads tablist-autoloads magit-popup-autoloads track-changes-autoloads tramp-autoloads rx transient-autoloads typescript-mode-autoloads verilog-mode-autoloads wgrep-autoloads with-editor-autoloads x509-mode-autoloads yaml-mode-autoloads yasnippet-autoloads yaxception-autoloads info dash-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 icons 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 touch-screen 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 move-toolbar make-network-process native-compile emacs) Memory information: ((conses 16 784227 131416) (symbols 48 48648 2) (strings 32 247647 6863) (string-bytes 1 6896143) (vectors 16 68550) (vector-slots 8 1619427 233216) (floats 8 368 8214) (intervals 56 20293 793) (buffers 992 30))
bug-gnu-emacs <at> gnu.org
:bug#77589
; Package emacs
.
(Mon, 07 Apr 2025 00:11:01 GMT) Full text and rfc822 format available.Message #8 received at 77589 <at> debbugs.gnu.org (full text, mbox):
From: dino chiesa <dpchiesa <at> hotmail.com> To: "77589 <at> debbugs.gnu.org" <77589 <at> debbugs.gnu.org> Subject: More information Date: Mon, 7 Apr 2025 00:10:33 +0000
From the Win32 File I/O documentation https://learn.microsoft.com/en-us/windows/win32/fileio/file-attribute-constants The bit for a Reparse Point, which includes SymbolicLinks as well as Junctions, is: FILE_ATTRIBUTE_REPARSE_POINT 1024 (0x00000400) After brief inspection, it seems like dired.c file_attributes is relying on s_ISLNK to determine if the file is a symlink. I am not sure what S_ISLNK does for Windows Junctions or if it even makes sense for a POSIX API to do something special for Windows Junctions. In my tests the Attributes surfaced at the powershell layer use that REPARSE_POINT bit, whether it is a symlink (file) or a Junction (directory). PS C:\test> Get-Item -Path regular-file.txt | Select-Object FullName, @{Name='AttributesHex'; Expression={ '0x{0:X}' -f [int]$_.Attributes }} | fl FullName : C:\test\regular-file.txt AttributesHex : 0x20 PS C:\test> Get-Item -Path "valid-symlink.txt" | Select-Object FullName, @{Name='AttributesHex'; Expression={ '0x{0:X}' -f [int]$_.Attributes }} | fl FullName : C:\test\valid-symlink.txt AttributesHex : 0x420 PS C:\test> Get-Item -Path "this-is-a-directory" | Select-Object FullName, @{Name='AttributesHex'; Expression={ '0x{0:X}' -f [int]$_.Attributes }} | fl FullName : C:\test\this-is-a-directory AttributesHex : 0x10 PS C:\test> Get-Item -Path "this-is-a-directory-junction" | Select-Object FullName, @{Name='AttributesHex'; Expression={ '0x{0:X}' -f [int]$_.Attributes }} | fl FullName : C:\test\this-is-a-directory-junction AttributesHex : 0x410
bug-gnu-emacs <at> gnu.org
:bug#77589
; Package emacs
.
(Mon, 07 Apr 2025 00:17:01 GMT) Full text and rfc822 format available.Message #11 received at 77589 <at> debbugs.gnu.org (full text, mbox):
From: dino chiesa <dpchiesa <at> hotmail.com> To: "77589 <at> debbugs.gnu.org" <77589 <at> debbugs.gnu.org> Subject: Re: More information Date: Mon, 7 Apr 2025 00:16:18 +0000
This page discusses an approach to interrogating a file on Windows to determine if it is a Symlink or Junction: https://sourceware.org/pipermail/cygwin/2023-November/254786.html HANDLE h = ... FILE_ATTRIBUTE_TAG_INFO at; if (GetFileInformationByHandleEx (h, FileAttributeTagInfo, &at, sizeof at)) { if (at.FileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) { /* Check at.ReparseTag: IO_REPARSE_TAG_LX_SYMLINK: WSL symlink IO_REPARSE_TAG_SYMLINK: Windows symlink IO_REPARSE_TAG_MOUNT_POINT: Volume mount point or directory junction IO_REPARSE_TAG_APPEXECLINK: App execution alias Anything else: *shrug* } }
bug-gnu-emacs <at> gnu.org
:bug#77589
; Package emacs
.
(Mon, 07 Apr 2025 00:23:02 GMT) Full text and rfc822 format available.Message #14 received at 77589 <at> debbugs.gnu.org (full text, mbox):
From: dino chiesa <dpchiesa <at> hotmail.com> To: "77589 <at> debbugs.gnu.org" <77589 <at> debbugs.gnu.org> Subject: Re: More information Date: Mon, 7 Apr 2025 00:21:59 +0000
Last one Postgresql recently dealt with this issue as well. https://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=ee219102d2e76d3e7277ac1a7ddda7757737b31b
bug-gnu-emacs <at> gnu.org
:bug#77589
; Package emacs
.
(Mon, 07 Apr 2025 11:41:01 GMT) Full text and rfc822 format available.Message #17 received at 77589 <at> debbugs.gnu.org (full text, mbox):
From: Eli Zaretskii <eliz <at> gnu.org> To: dino chiesa <dpchiesa <at> hotmail.com> Cc: 77589 <at> debbugs.gnu.org Subject: Re: bug#77589: 30.1; On Windows, dired does not display Junctions specially Date: Mon, 07 Apr 2025 14:39:36 +0300
severity 77589 wishlist thanks > From: dino chiesa <dpchiesa <at> hotmail.com> > Date: Sun, 6 Apr 2025 23:15:59 +0000 > msip_labels: > > When using dired on emacs in Windows, Symlinks are displayed helpfully, > with an indication of the target of the symlink. Junction entries are > not displayed specially. There is no indication of the target of a > Junction. > > Junctions in Windows are similar to Symbolic Links > (symlinks) but slightly different. You can read a comparison here: > https://superuser.com/a/1291446/3614 > (Why there are both Junctions and symlinks, I do not know) > > Junctions always use a directory as the target, and it is possible > to create a Junction without elevated (Administrator) privileges. So it > is sometimes more convenient to use a Junction, instead of a symlink. AFAIK, Junction points are legacy/deprecated kind of symbolic links, which are restricted wrt symlinks available on modern versions of MS-Windows: junction points can only link to local directories (and have security issues). Their only advantage is that they are available on older Windows versions. Emacs does support symlinks on MS-Windows, but I don't see a point in adding complexity to the MS-Windows specific code to support this deprecated kind of symlinks. It would add complexity, because junctions are subtly different from symlinks, but the Posix model of file attributes used by Emacs doesn't allow to distinguish between them easily, so we'd need some kludges in all kinds of places. For example, what to do when copying a junction -- create another junction or a symlink? And how to display that in Dired buffers, given that the "->" notation is already taken by symlinks, and nothing similar exists on Posix systems (which Emacs on Windows emulates)? And how to indicate the fact that a file is a junction point in the output of file-attributes? Treating junctions as symlinks will cause trouble, because a junction has restrictions that need to be observed. So, on balance, I don't think we should add this to Emacs. > That gets its information from dired.c (which I am not looking at), which > populates a string for (file-attribute-type file-attr) in the case of symbolic link, > but does not do the same for Junction. So I think maybe a change in dired.c > for Windows might be necessary. The current support for symlink is not in dired.c, it is in w32.c, where we have our custom implementation of the 'stat' and 'lstat' functions, which have symlink support built-in. > This page discusses an approach to interrogating a file on Windows to determine if it is a Symlink or Junction: > > https://sourceware.org/pipermail/cygwin/2023-November/254786.html > > HANDLE h = ... > FILE_ATTRIBUTE_TAG_INFO at; > if (GetFileInformationByHandleEx (h, FileAttributeTagInfo, > &at, sizeof at)) > { > if (at.FileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) > { > /* Check at.ReparseTag: > IO_REPARSE_TAG_LX_SYMLINK: WSL symlink > IO_REPARSE_TAG_SYMLINK: Windows symlink > IO_REPARSE_TAG_MOUNT_POINT: Volume mount point > or directory junction > IO_REPARSE_TAG_APPEXECLINK: App execution alias > Anything else: *shrug* > } > } Thanks, this is well-known, and you will see that we have a similar code in w32.c in the Emacs source tree. Bottom line: I don't think we should add this to Emacs. Other opinions (with rationale) are welcome.
Eli Zaretskii <eliz <at> gnu.org>
to control <at> debbugs.gnu.org
.
(Mon, 07 Apr 2025 11:41:02 GMT) Full text and rfc822 format available.Eli Zaretskii <eliz <at> gnu.org>
:dino chiesa <dpchiesa <at> hotmail.com>
:Message #24 received at 77589-done <at> debbugs.gnu.org (full text, mbox):
From: Eli Zaretskii <eliz <at> gnu.org> To: dpchiesa <at> hotmail.com Cc: 77589-done <at> debbugs.gnu.org Subject: Re: bug#77589: 30.1; On Windows, dired does not display Junctions specially Date: Sat, 26 Apr 2025 14:04:43 +0300
> Cc: 77589 <at> debbugs.gnu.org > Date: Mon, 07 Apr 2025 14:39:36 +0300 > From: Eli Zaretskii <eliz <at> gnu.org> > > severity 77589 wishlist > thanks > > > From: dino chiesa <dpchiesa <at> hotmail.com> > > Date: Sun, 6 Apr 2025 23:15:59 +0000 > > msip_labels: > > > > When using dired on emacs in Windows, Symlinks are displayed helpfully, > > with an indication of the target of the symlink. Junction entries are > > not displayed specially. There is no indication of the target of a > > Junction. > > > > Junctions in Windows are similar to Symbolic Links > > (symlinks) but slightly different. You can read a comparison here: > > https://superuser.com/a/1291446/3614 > > (Why there are both Junctions and symlinks, I do not know) > > > > Junctions always use a directory as the target, and it is possible > > to create a Junction without elevated (Administrator) privileges. So it > > is sometimes more convenient to use a Junction, instead of a symlink. > > AFAIK, Junction points are legacy/deprecated kind of symbolic links, > which are restricted wrt symlinks available on modern versions of > MS-Windows: junction points can only link to local directories (and > have security issues). Their only advantage is that they are > available on older Windows versions. > > Emacs does support symlinks on MS-Windows, but I don't see a point in > adding complexity to the MS-Windows specific code to support this > deprecated kind of symlinks. It would add complexity, because > junctions are subtly different from symlinks, but the Posix model of > file attributes used by Emacs doesn't allow to distinguish between > them easily, so we'd need some kludges in all kinds of places. For > example, what to do when copying a junction -- create another junction > or a symlink? And how to display that in Dired buffers, given that > the "->" notation is already taken by symlinks, and nothing similar > exists on Posix systems (which Emacs on Windows emulates)? And how to > indicate the fact that a file is a junction point in the output of > file-attributes? Treating junctions as symlinks will cause trouble, > because a junction has restrictions that need to be observed. > > So, on balance, I don't think we should add this to Emacs. > > > That gets its information from dired.c (which I am not looking at), which > > populates a string for (file-attribute-type file-attr) in the case of symbolic link, > > but does not do the same for Junction. So I think maybe a change in dired.c > > for Windows might be necessary. > > The current support for symlink is not in dired.c, it is in w32.c, > where we have our custom implementation of the 'stat' and 'lstat' > functions, which have symlink support built-in. > > > This page discusses an approach to interrogating a file on Windows to determine if it is a Symlink or Junction: > > > > https://sourceware.org/pipermail/cygwin/2023-November/254786.html > > > > HANDLE h = ... > > FILE_ATTRIBUTE_TAG_INFO at; > > if (GetFileInformationByHandleEx (h, FileAttributeTagInfo, > > &at, sizeof at)) > > { > > if (at.FileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) > > { > > /* Check at.ReparseTag: > > IO_REPARSE_TAG_LX_SYMLINK: WSL symlink > > IO_REPARSE_TAG_SYMLINK: Windows symlink > > IO_REPARSE_TAG_MOUNT_POINT: Volume mount point > > or directory junction > > IO_REPARSE_TAG_APPEXECLINK: App execution alias > > Anything else: *shrug* > > } > > } > > Thanks, this is well-known, and you will see that we have a similar > code in w32.c in the Emacs source tree. > > Bottom line: I don't think we should add this to Emacs. Other > opinions (with rationale) are welcome. No further comments, so I'm now closing this bug.
bug-gnu-emacs <at> gnu.org
:bug#77589
; Package emacs
.
(Sun, 27 Apr 2025 16:01:01 GMT) Full text and rfc822 format available.Message #27 received at 77589 <at> debbugs.gnu.org (full text, mbox):
From: dino chiesa <dpchiesa <at> hotmail.com> To: "77589 <at> debbugs.gnu.org" <77589 <at> debbugs.gnu.org> Subject: Re: bug#77589: closed (Re: bug#77589: 30.1; On Windows, dired does not display Junctions specially) Date: Sun, 27 Apr 2025 15:59:58 +0000
[Message part 1 (text/plain, inline)]
Just catching up . Where have you seen that Junctions are being deprecated? I've seen nothing like that. Without a concrete announcement to that effect, I don't think that's a good reasoning for not working on this bug. -DC ________________________________ From: GNU bug Tracking System <help-debbugs <at> gnu.org> Sent: Saturday, April 26, 2025 4:05:02 AM To: dino chiesa <dpchiesa <at> hotmail.com> Subject: bug#77589: closed (Re: bug#77589: 30.1; On Windows, dired does not display Junctions specially) Your bug report #77589: 30.1; On Windows, dired does not display Junctions specially which was filed against the emacs package, has been closed. The explanation is attached below, along with your original report. If you require more details, please reply to 77589 <at> debbugs.gnu.org. -- 77589: https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdebbugs.gnu.org%2Fcgi%2Fbugreport.cgi%3Fbug%3D77589&data=05%7C02%7C%7C192a67c84f9046c417c108dd84b2322e%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C638812623067343464%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=GSVASRwtnOlwQuvjHKPXDlleOoIK0zhpqxEfrZx%2Bp4c%3D&reserved=0<https://debbugs.gnu.org/cgi/bugreport.cgi?bug=77589> GNU Bug Tracking System Contact help-debbugs <at> gnu.org with problems
[Message part 2 (text/html, inline)]
bug-gnu-emacs <at> gnu.org
:bug#77589
; Package emacs
.
(Sun, 27 Apr 2025 19:23:03 GMT) Full text and rfc822 format available.Message #30 received at 77589 <at> debbugs.gnu.org (full text, mbox):
From: Eli Zaretskii <eliz <at> gnu.org> To: dino chiesa <dpchiesa <at> hotmail.com> Cc: 77589 <at> debbugs.gnu.org Subject: Re: bug#77589: closed (Re: bug#77589: 30.1; On Windows, dired does not display Junctions specially) Date: Sun, 27 Apr 2025 22:22:01 +0300
> From: dino chiesa <dpchiesa <at> hotmail.com> > Date: Sun, 27 Apr 2025 15:59:58 +0000 > > Just catching up . Where have you seen that Junctions are being deprecated? I've seen nothing like that. Just read about it on the Internet. The fact that junction points support just some of the symlink features alone speaks for itself.
Debbugs Internal Request <help-debbugs <at> gnu.org>
to internal_control <at> debbugs.gnu.org
.
(Mon, 26 May 2025 11:24:17 GMT) Full text and rfc822 format available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.