emacs-bug-tracker
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#77589: closed (30.1; On Windows, dired does not display Junctions sp


From: GNU bug Tracking System
Subject: bug#77589: closed (30.1; On Windows, dired does not display Junctions specially)
Date: Sat, 26 Apr 2025 11:05:02 +0000

Your message dated Sat, 26 Apr 2025 14:04:43 +0300
with message-id <86msc3uqt0.fsf@gnu.org>
and subject line Re: bug#77589: 30.1; On Windows, dired does not display 
Junctions specially
has caused the debbugs.gnu.org bug report #77589,
regarding 30.1; On Windows, dired does not display Junctions specially
to be marked as done.

(If you believe you have received this mail in error, please contact
help-debbugs@gnu.org.)


-- 
77589: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=77589
GNU Bug Tracking System
Contact help-debbugs@gnu.org with problems
--- Begin Message --- 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))


--- End Message ---
--- Begin Message --- 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@debbugs.gnu.org
> Date: Mon, 07 Apr 2025 14:39:36 +0300
> From: Eli Zaretskii <eliz@gnu.org>
> 
> severity 77589 wishlist
> thanks
> 
> > From: dino chiesa <dpchiesa@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.


--- End Message ---

reply via email to

[Prev in Thread] Current Thread [Next in Thread]