annotate lisp/efs/efs-fnh.el @ 64:a01e7a40045c r19-16-pre7

Import from CVS: tag r19-16-pre7
author cvs
date Mon, 13 Aug 2007 08:59:30 +0200
parents 56c54cf7c5b6
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
22
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
1 ;; -*-Emacs-Lisp-*-
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
2 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
3 ;;
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
4 ;; File: efs-fnh.el
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
5 ;; Release: $efs release: 1.15 $
42
8b8b7f3559a2 Import from CVS: tag r19-15b104
cvs
parents: 22
diff changeset
6 ;; Version: #Revision: 1.3 $
22
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
7 ;; RCS:
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
8 ;; Description: Look for the emacs version, and install into
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
9 ;; the file-name-handler-alist
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
10 ;; Author: Sandy Rutherford <sandy@ibm550.sissa.it>
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
11 ;;
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
12 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
13
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
14 ;;; Although used by efs, these utilities could be of general use to other
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
15 ;;; packages too. Keeping them separate from the main efs program
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
16 ;;; makes it easier for other programs to require them.
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
17
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
18 (provide 'efs-fnh)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
19
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
20 (defconst efs-fnh-version
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
21 (concat (substring "$efs release: 1.15 $" 14 -2)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
22 "/"
42
8b8b7f3559a2 Import from CVS: tag r19-15b104
cvs
parents: 22
diff changeset
23 (substring "#Revision: 1.3 $" 11 -2)))
22
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
24
48
56c54cf7c5b6 Import from CVS: tag r19-16b90
cvs
parents: 42
diff changeset
25 ;;;###autoload
56c54cf7c5b6 Import from CVS: tag r19-16b90
cvs
parents: 42
diff changeset
26 (defvar allow-remote-paths t
56c54cf7c5b6 Import from CVS: tag r19-16b90
cvs
parents: 42
diff changeset
27 "*Set this to nil if you don't want remote paths to access
56c54cf7c5b6 Import from CVS: tag r19-16b90
cvs
parents: 42
diff changeset
28 remote files.")
56c54cf7c5b6 Import from CVS: tag r19-16b90
cvs
parents: 42
diff changeset
29
22
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
30 ;;;; ----------------------------------------------------------------
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
31 ;;;; Loading emacs version files
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
32 ;;;; ----------------------------------------------------------------
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
33
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
34 (defun efs-handle-emacs-version ()
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
35 ;; Load appropriate files for the current emacs version
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
36 (let ((ehev-match-data (match-data)))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
37 (unwind-protect
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
38 (let ((lucidp (string-match "Lucid" emacs-version))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
39 ver subver)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
40 (or (string-match "^\\([0-9]+\\)\\.\\([0-9]+\\)" emacs-version)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
41 (error "efs does not work with emacs version %s" emacs-version))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
42 (setq ver (string-to-int (substring emacs-version
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
43 (match-beginning 1)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
44 (match-end 1)))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
45 subver (string-to-int (substring emacs-version
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
46 (match-beginning 2)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
47 (match-end 2))))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
48 (cond
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
49
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
50 ;; Lucid XEmacs (emacs-version looks like \"19.xx XEmacs Lucid\")
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
51 (lucidp
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
52 (cond
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
53 ((and (= ver 19) (>= subver 11) (< subver 15))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
54 (require 'efs-l19\.11))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
55 ((and (= ver 19) (>= subver 15))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
56 (require 'efs-x19\.15))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
57 ((= ver 20)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
58 (require 'efs-x19\.15))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
59 (t
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
60 (error
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
61 "efs does not work with emacs version %s" emacs-version))))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
62
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
63 ;; Original GNU Emacs from FSF
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
64 (t
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
65 (cond
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
66 ((and (= ver 19) (<= subver 22))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
67 (require 'efs-19))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
68 ((and (= ver 19) (>= subver 23))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
69 (require 'efs-19\.23))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
70
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
71 ;; GNU Emacs 18-
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
72 ((<= ver 18)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
73 (require 'efs-18)) ; this file will (require 'emacs-19)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
74
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
75 (t
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
76 (error
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
77 "efs does not work with emacs version %s" emacs-version))))))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
78
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
79 (store-match-data ehev-match-data))))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
80
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
81 ;;;; --------------------------------------------------------------
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
82 ;;;; Stuff for file name handlers.
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
83 ;;;; --------------------------------------------------------------
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
84
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
85 ;;; Need to do this now, to make sure that the file-name-handler-alist is
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
86 ;;; defined for Emacs 18.
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
87
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
88 (efs-handle-emacs-version)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
89
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
90 ;; Also defined in efs-cu.el
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
91 (defvar efs-path-root-regexp "^/[^/:]+:"
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
92 "Regexp to match the `/user@host:' root of an efs full path.")
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
93
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
94 (defun efs-file-name-handler-alist-sans-fn (fn)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
95 ;; Returns a version of file-name-handler-alist without efs.
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
96 (delq nil (mapcar
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
97 (function
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
98 (lambda (x)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
99 (and (not (eq (cdr x) fn)) x)))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
100 file-name-handler-alist)))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
101
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
102 (defun efs-root-handler-function (operation &rest args)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
103 "Function to handle completion in the root directory."
42
8b8b7f3559a2 Import from CVS: tag r19-15b104
cvs
parents: 22
diff changeset
104 (let ((handler (and (if (boundp 'allow-remote-paths)
8b8b7f3559a2 Import from CVS: tag r19-15b104
cvs
parents: 22
diff changeset
105 allow-remote-paths
8b8b7f3559a2 Import from CVS: tag r19-15b104
cvs
parents: 22
diff changeset
106 t)
8b8b7f3559a2 Import from CVS: tag r19-15b104
cvs
parents: 22
diff changeset
107 (get operation 'efs-root))))
22
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
108 (if handler
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
109 (apply handler args)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
110 (let ((inhibit-file-name-handlers
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
111 (cons 'efs-root-handler-function
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
112 (and (eq inhibit-file-name-operation operation)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
113 inhibit-file-name-handlers)))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
114 (inhibit-file-name-operation operation))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
115 (apply operation args)))))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
116
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
117 (put 'file-name-completion 'efs-root 'efs-root-file-name-completion)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
118 (put 'file-name-all-completions 'efs-root 'efs-root-file-name-all-completions)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
119 (autoload 'efs-root-file-name-all-completions "efs-netrc")
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
120 (autoload 'efs-root-file-name-completion "efs-netrc")
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
121
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
122 (autoload 'efs-file-handler-function "efs"
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
123 "Function to use efs to handle remote files.")
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
124
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
125 ;; Install into the file-name-handler-alist.
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
126 ;; If we are already there, remove the old entry, and re-install.
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
127 ;; Remove the ange-ftp entry too.
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
128
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
129 (setq file-name-handler-alist
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
130 (let (dired-entry alist)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
131 (setq alist
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
132 (nconc
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
133 (list
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
134 (cons efs-path-root-regexp 'efs-file-handler-function)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
135 '("^/$" . efs-root-handler-function))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
136 (delq nil
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
137 (mapcar
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
138 (function
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
139 (lambda (x)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
140 (if (eq (cdr x) 'dired-handler-fn)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
141 (progn
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
142 (setq dired-entry x)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
143 nil)
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
144 (and (not
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
145 (memq (cdr x)
42
8b8b7f3559a2 Import from CVS: tag r19-15b104
cvs
parents: 22
diff changeset
146 '(remote-path-file-handler-function
8b8b7f3559a2 Import from CVS: tag r19-15b104
cvs
parents: 22
diff changeset
147 efs-file-handler-function
22
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
148 efs-root-handler-function
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
149 ange-ftp-hook-function
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
150 ange-ftp-completion-hook-function)))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
151 x))))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
152 file-name-handler-alist))))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
153 ;; Make sure that dired is in first.
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
154 (if dired-entry (cons dired-entry alist) alist)))
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
155
8fc7fe29b841 Import from CVS: tag r19-15b94
cvs
parents:
diff changeset
156 ;;; end of efs-fnh.el