From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Lars Hansen Newsgroups: gmane.emacs.devel Subject: ls-lisp.el and w32-symlinks.el Date: Thu, 17 Nov 2005 20:30:33 +0100 Message-ID: <437CDA59.8080008@soem.dk> NNTP-Posting-Host: main.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------090505070005050003020904" X-Trace: sea.gmane.org 1132256001 15485 80.91.229.2 (17 Nov 2005 19:33:21 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Thu, 17 Nov 2005 19:33:21 +0000 (UTC) Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Thu Nov 17 20:33:19 2005 Return-path: Original-Received: from lists.gnu.org ([199.232.76.165]) by ciao.gmane.org with esmtp (Exim 4.43) id 1EcpTC-0006dE-5a for ged-emacs-devel@m.gmane.org; Thu, 17 Nov 2005 20:30:54 +0100 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1EcpTB-0004qE-Iw for ged-emacs-devel@m.gmane.org; Thu, 17 Nov 2005 14:30:53 -0500 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1EcpSy-0004q6-Mp for emacs-devel@gnu.org; Thu, 17 Nov 2005 14:30:40 -0500 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1EcpSw-0004pt-00 for emacs-devel@gnu.org; Thu, 17 Nov 2005 14:30:40 -0500 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1EcpSv-0004po-QP for emacs-devel@gnu.org; Thu, 17 Nov 2005 14:30:37 -0500 Original-Received: from [212.99.225.245] (helo=odin.broadcom.dk) by monty-python.gnu.org with esmtp (TLS-1.0:DHE_RSA_3DES_EDE_CBC_SHA:24) (Exim 4.34) id 1EcpSv-0000wx-Lp for emacs-devel@gnu.org; Thu, 17 Nov 2005 14:30:38 -0500 Original-Received: from pppoe3-ves.broadcom.dk ([212.99.255.42] helo=[10.17.1.154]) by odin.broadcom.dk with esmtp (Exim 4.24; FreeBSD) id 1EcpNK-000M0E-Eu for emacs-devel@gnu.org; Thu, 17 Nov 2005 20:24:50 +0100 User-Agent: Debian Thunderbird 1.0.2 (X11/20051002) X-Accept-Language: en-us, en Original-To: emacs-devel@gnu.org X-Enigmail-Version: 0.91.0.0 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:46169 Archived-At: This is a multi-part message in MIME format. --------------090505070005050003020904 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit 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. --------------090505070005050003020904 Content-Type: text/x-patch; name="ls-lisp.1.57.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="ls-lisp.1.57.patch" *** 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 , 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 , 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) - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; --- 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 ---- --------------090505070005050003020904 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Emacs-devel mailing list Emacs-devel@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-devel --------------090505070005050003020904--