From: Lars Hansen <larsh@soem.dk>
Subject: ls-lisp.el and w32-symlinks.el
Date: Thu, 17 Nov 2005 20:30:33 +0100 [thread overview]
Message-ID: <437CDA59.8080008@soem.dk> (raw)
[-- Attachment #1: Type: text/plain, Size: 1100 bytes --]
I have looked on symlink handling in ls-lisp.el, and that made me wonder
what the stub `ls-lisp-parse-symlink' was all about. Since the comment
mentions the module w32-symlinks.el from
http://centaur.maths.qmw.ac.uk/Emacs/ (not part of Emacs), I looked into
that as well.
w32-symlinks.el uses filename magic to handle symlinks on w32, but there
is a number of bugs and shortcomings. I have fixed those, and as a
consequence w32-symlinks.el becomes a stand-alone module and
`ls-lisp-parse-symlink' is no longer needed. Therefore I suggest the
attached patch to ls-lisp.el. The patch also makes `ls-lisp-dirs-first'
recognize symlinks to directories.
If there are no objections, I will commit in a few days.
I have e-mailed my patched version of w32-symlinks.el to Francis J.
Wright some time ago asking him to put it on his web page, but that has
not happened (yet). If any of you want it, I can e-mail it to you. With
my patches w32-symlinks.el seems pretty mature ;-) so maybe it should
become part of Emacs (not that I really care personally). But I don't
know about possible legal implications.
[-- Attachment #2: ls-lisp.1.57.patch --]
[-- Type: text/x-patch, Size: 3859 bytes --]
*** ls-lisp.1.57.el 2005-08-08 14:15:26.000000000 +0200
--- ls-lisp.1.57.patched.el 2005-11-10 15:49:59.000000000 +0100
***************
*** 45,52 ****
;; * A few obscure ls switches are still ignored: see the docstring of
;; `insert-directory'.
- ;; * Generally only numeric uid/gid.
-
;; TO DO =============================================================
;; Complete handling of F switch (if/when possible).
--- 45,50 ----
***************
*** 61,68 ****
;; Revised by Andrew Innes and Geoff Volker (and maybe others).
;; Modified by Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>, mainly
! ;; to support many more ls options, "platform emulation", hooks for
! ;; external symbolic link support and more robust sorting.
;;; Code:
--- 59,66 ----
;; Revised by Andrew Innes and Geoff Volker (and maybe others).
;; Modified by Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>, mainly
! ;; to support many more ls options, "platform emulation" and more
! ;; robust sorting.
;;; Code:
***************
*** 175,188 ****
(or (featurep 'ls-lisp) ; FJW: unless this file is being reloaded!
(setq original-insert-directory (symbol-function 'insert-directory)))
- ;; This stub is to allow ls-lisp to parse symbolic links via another
- ;; library such as w32-symlinks.el from
- ;; http://centaur.maths.qmw.ac.uk/Emacs/:
- (defun ls-lisp-parse-symlink (file-name)
- "This stub may be redefined to parse FILE-NAME as a symlink.
- It should return nil or the link target as a string."
- nil)
-
\f
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
--- 173,178 ----
***************
*** 429,435 ****
;; symbolic link, or nil.
(let (el dirs files)
(while file-alist
! (if (eq (cadr (setq el (car file-alist))) t) ; directory
(setq dirs (cons el dirs))
(setq files (cons el files)))
(setq file-alist (cdr file-alist)))
--- 419,427 ----
;; symbolic link, or nil.
(let (el dirs files)
(while file-alist
! (if (or (eq (cadr (setq el (car file-alist))) t) ; directory
! (and (stringp (cadr el))
! (file-directory-p (cadr el)))) ; symlink to a directory
(setq dirs (cons el dirs))
(setq files (cons el files)))
(setq file-alist (cdr file-alist)))
***************
*** 455,466 ****
\[But FIFOs and sockets are not recognized.]
FILEDATA has the form (filename . `file-attributes'). Its `cadr' is t
for directory, string (name linked to) for symbolic link, or nil."
! (let ((dir (cadr filedata)) (file-name (car filedata)))
! (cond ((or dir
! ;; Parsing .lnk files here is perhaps overkill!
! (setq dir (ls-lisp-parse-symlink file-name)))
(cons
! (concat file-name (if (eq dir t) "/" "@"))
(cdr filedata)))
((string-match "x" (nth 9 filedata))
(cons
--- 447,457 ----
\[But FIFOs and sockets are not recognized.]
FILEDATA has the form (filename . `file-attributes'). Its `cadr' is t
for directory, string (name linked to) for symbolic link, or nil."
! (let ((file-name (car filedata))
! (type (cadr filedata)))
! (cond (type
(cons
! (concat file-name (if (eq type t) "/" "@"))
(cdr filedata)))
((string-match "x" (nth 9 filedata))
(cons
***************
*** 506,515 ****
;; t for directory, string (name linked to)
;; for symbolic link, or nil.
(drwxrwxrwx (nth 8 file-attr))) ; attribute string ("drwxrwxrwx")
- (and (null file-type)
- ;; Maybe no kernel support for symlinks, so...
- (setq file-type (ls-lisp-parse-symlink file-name))
- (aset drwxrwxrwx 0 ?l)) ; symbolic link - update attribute string
(concat (if (memq ?i switches) ; inode number
(format " %6d" (nth 10 file-attr)))
;; nil is treated like "" in concat
--- 497,502 ----
[-- Attachment #3: Type: text/plain, Size: 142 bytes --]
_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-devel
next reply other threads:[~2005-11-17 19:30 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-11-17 19:30 Lars Hansen [this message]
2005-11-17 22:37 ` ls-lisp.el and w32-symlinks.el Lennart Borgman
2005-11-17 22:43 ` Lars Hansen
2005-11-22 19:36 ` Lars Hansen
2005-11-22 19:47 ` Lars Hansen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=437CDA59.8080008@soem.dk \
--to=larsh@soem.dk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).