Mercurial > hg > xemacs-beta
view lisp/efs/efs-dos-distinct.el @ 203:850242ba4a81 r20-3b28
Import from CVS: tag r20-3b28
author | cvs |
---|---|
date | Mon, 13 Aug 2007 10:02:21 +0200 |
parents | 8b8b7f3559a2 |
children |
line wrap: on
line source
;; -*-Emacs-Lisp-*- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; File: efs-dos-distinct.el ;; Release: $efs release: 1.15 $ ;; Version: #Revision: 1.1 $ ;; RCS: ;; Description: Distinct's DOS FTP server support for efs ;; Author: Sandy Rutherford <sandy@tsmi19.sissa.it> ;; Created: Fri Jan 15 22:20:32 1993 by sandy on ibm550 ;; Modified: Sun Nov 27 18:30:04 1994 by sandy on gandalf ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; This file is part of efs. See efs.el for copyright ;;; (it's copylefted) and warrranty (there isn't one) information. ;;; Thanks to Rodd Zurcher <rbz@hook.corp.mot.com> for beta testing. (provide 'efs-dos-distinct) (require 'efs) (defconst efs-dos-distinct-version (concat (substring "$efs release: 1.15 $" 14 -2) "/" (substring "#Revision: 1.1 $" 11 -2))) ;;;; ----------------------------------------------------------------- ;;;; Distinct's DOS FTP server support for efs ;;;; ----------------------------------------------------------------- ;;; This is not included in efs-dos.el with the support for the ;;; other dos ftp servers, because the Distinct server uses unix syntax ;;; for path names. ;; This is defined in efs.el, but we put it here too. (defconst efs-dos-distinct-date-and-time-regexp (concat " \\(Jan\\|Feb\\|Mar\\|Apr\\|May\\|Jun\\|Jul\\|Aug\\|Sep\\|Oct" "\\|Nov\\|Dec\\) [ 0-3][0-9],[12][90][0-9][0-9] " "[ 12][0-9]:[0-5][0-9] ")) ;;; entry point (efs-defun efs-parse-listing dos-distinct (host user dir path &optional switches) ;; Parse the current buffer which is assumed to be a listing from ;; Distinct's DOS FTP server. Both empty dirs, and ls errors return ;; empty buffers. ;; HOST = remote host name ;; USER = remote user name ;; DIR = remote directory as a full remote path ;; PATH = directory in full efs-path syntax (goto-char (point-min)) (efs-save-match-data (if (re-search-forward efs-dos-distinct-date-and-time-regexp nil t) (let ((tbl (efs-make-hashtable)) dir-p) (beginning-of-line) (while (progn (setq dir-p (eq (following-char) ?d)) ; we're bolp (re-search-forward efs-dos-distinct-date-and-time-regexp nil t)) (efs-put-hash-entry (buffer-substring (point) (progn (end-of-line) (point))) (list dir-p) tbl) (forward-line 1)) (efs-put-hash-entry "." '(t) tbl) (efs-put-hash-entry ".." '(t) tbl) tbl)))) (efs-defun efs-allow-child-lookup dos-distinct (host user dir file) ;; Returns t if FILE in directory DIR could possibly be a subdir ;; according to its file-name syntax, and therefore a child listing should ;; be attempted. ;; Subdirs in DOS can't have an extension. (not (string-match "\\." file))) ;;; Tree Dired (defconst efs-dired-dos-distinct-re-exe "^[^\n]+\\.exe$") (or (assq 'dos-distinct efs-dired-re-exe-alist) (setq efs-dired-re-exe-alist (cons (cons 'dos-distinct efs-dired-dos-distinct-re-exe) efs-dired-re-exe-alist))) (defconst efs-dired-dos-distinct-re-dir "^. [ \t]*d") (or (assq 'dos-distinct efs-dired-re-dir-alist) (setq efs-dired-re-dir-alist (cons (cons 'dos-distinct efs-dired-dos-distinct-re-dir) efs-dired-re-dir-alist))) (efs-defun efs-dired-insert-headerline dos-distinct (dir) ;; The Distinct DOS server has no total line, so we insert a ;; blank line for aesthetics. (insert "\n") (forward-char -1) (efs-real-dired-insert-headerline dir)) (efs-defun efs-dired-manual-move-to-filename dos-distinct (&optional raise-error bol eol) ;; In dired, move to the first char of filename on this line. ;; Returns (point) or nil if raise-error is nil, and there is no ;; no filename on this line. ;; This version is for Distinct's DOS FTP server. (or eol (setq eol (save-excursion (skip-chars-forward "^\r\n") (point)))) (let (case-fold-search) (if bol (goto-char bol) (skip-chars-backward "^\n\r")) (if (re-search-forward efs-dos-distinct-date-and-time-regexp eol t) (point) (and raise-error (error "No file on this line"))))) (efs-defun efs-dired-manual-move-to-end-of-filename dos-distinct (&optional no-error bol eol) ;; Assumes point is at the beginning of filename. ;; So, it should be called only after (dired-move-to-filename t) ;; On failure signals an error, or returns nil. ;; This is the version for Distinct's DOS FTP server. (let ((opoint (point))) (and selective-display (null no-error) (eq (char-after (1- (or bol (save-excursion (skip-chars-backward "^\r\n") (point))))) ?\r) ;; it's hidden or omitted (cond ((dired-subdir-hidden-p (dired-current-directory)) (error (substitute-command-keys "File line is hidden. Type \\[dired-hide-subdir] to unhide."))) ((error (substitute-command-keys "File line is omitted. Type \\[dired-omit-toggle] to un-omit." ))))) (skip-chars-forward "-_+=a-z0-9.$") (if (or (= opoint (point)) (not (memq (following-char) '(\n \r)))) (if no-error nil (error "No file on this line")) (point)))) ;;; end of efs-dos-distinct.el