annotate lisp/net/tramp-imap.el @ 110534:826d60163924

Merge changes from emacs-23 branch.
author Chong Yidong <cyd@stupidchicken.com>
date Thu, 23 Sep 2010 22:10:54 -0400
parents ec526909f60b
children 073caec7510f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1 ;;; tramp-imap.el --- Tramp interface to IMAP through imap.el
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 105779
diff changeset
3 ;; Copyright (C) 2009, 2010 Free Software Foundation, Inc.
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5 ;; Author: Teodor Zlatanov <tzz@lifelogs.com>
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
6 ;; Keywords: mail, comm
110015
280c8ae2476d Add "Package:" file headers to denote built-in packages.
Chong Yidong <cyd@stupidchicken.com>
parents: 108816
diff changeset
7 ;; Package: tramp
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
8
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
10
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
11 ;; GNU Emacs is free software: you can redistribute it and/or modify
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
13 ;; the Free Software Foundation, either version 3 of the License, or
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
14 ;; (at your option) any later version.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
15
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
19 ;; GNU General Public License for more details.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
20
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
22 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
23
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
24 ;;; Commentary:
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
25
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
26 ;; Package to provide Tramp over IMAP
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
27
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
28 ;;; Setup:
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
29
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
30 ;; just load and open files, e.g.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
31 ;; /imaps:user@yourhosthere.com:/INBOX.test/1
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
32 ;; or
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
33 ;; /imap:user@yourhosthere.com:/INBOX.test/1
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
34
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
35 ;; where `imap' goes over IMAP, while `imaps' goes over IMAP+SSL
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
36
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
37 ;; This module will use imap-hash.el to access the IMAP mailbox.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
38
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
39 ;; This module will use auth-source.el to authenticate against the
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
40 ;; IMAP server, PLUS it will use auth-source.el to get your passphrase
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
41 ;; for the symmetrically encrypted messages. For the former, use the
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
42 ;; usual IMAP ports. For the latter, use the port "tramp-imap".
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
43
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
44 ;; example .authinfo / .netrc file:
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
45
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
46 ;; machine yourhosthere.com port tramp-imap login USER password SYMMETRIC-PASSPHRASE
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
47
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
48 ;; note above is the symmetric encryption passphrase for GPG
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
49 ;; below is the regular password for IMAP itself and other things on that host
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
50
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
51 ;; machine yourhosthere.com login USER password NORMAL-PASSWORD
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
52
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
53
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
54 ;;; Code:
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
55
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
56 (require 'assoc)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
57 (require 'tramp)
106954
b21e977d14e7 * net/tramp-imap.el (top): Autoload needed packages.
Michael Albinus <michael.albinus@gmx.de>
parents: 106815
diff changeset
58
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
59 (autoload 'auth-source-user-or-password "auth-source")
106954
b21e977d14e7 * net/tramp-imap.el (top): Autoload needed packages.
Michael Albinus <michael.albinus@gmx.de>
parents: 106815
diff changeset
60 (autoload 'epg-context-operation "epg")
b21e977d14e7 * net/tramp-imap.el (top): Autoload needed packages.
Michael Albinus <michael.albinus@gmx.de>
parents: 106815
diff changeset
61 (autoload 'epg-context-set-armor "epg")
b21e977d14e7 * net/tramp-imap.el (top): Autoload needed packages.
Michael Albinus <michael.albinus@gmx.de>
parents: 106815
diff changeset
62 (autoload 'epg-context-set-passphrase-callback "epg")
b21e977d14e7 * net/tramp-imap.el (top): Autoload needed packages.
Michael Albinus <michael.albinus@gmx.de>
parents: 106815
diff changeset
63 (autoload 'epg-context-set-progress-callback "epg")
b21e977d14e7 * net/tramp-imap.el (top): Autoload needed packages.
Michael Albinus <michael.albinus@gmx.de>
parents: 106815
diff changeset
64 (autoload 'epg-decrypt-string "epg")
b21e977d14e7 * net/tramp-imap.el (top): Autoload needed packages.
Michael Albinus <michael.albinus@gmx.de>
parents: 106815
diff changeset
65 (autoload 'epg-encrypt-string "epg")
108377
7827d5a5c826 * net/tramp-compat.el (byte-compile-not-obsolete-vars): Define if
Michael Albinus <albinus@detlef>
parents: 108244
diff changeset
66 (autoload 'epg-make-context "epg")
106954
b21e977d14e7 * net/tramp-imap.el (top): Autoload needed packages.
Michael Albinus <michael.albinus@gmx.de>
parents: 106815
diff changeset
67 (autoload 'imap-hash-get "imap-hash")
b21e977d14e7 * net/tramp-imap.el (top): Autoload needed packages.
Michael Albinus <michael.albinus@gmx.de>
parents: 106815
diff changeset
68 (autoload 'imap-hash-make "imap-hash")
b21e977d14e7 * net/tramp-imap.el (top): Autoload needed packages.
Michael Albinus <michael.albinus@gmx.de>
parents: 106815
diff changeset
69 (autoload 'imap-hash-map "imap-hash")
b21e977d14e7 * net/tramp-imap.el (top): Autoload needed packages.
Michael Albinus <michael.albinus@gmx.de>
parents: 106815
diff changeset
70 (autoload 'imap-hash-put "imap-hash")
b21e977d14e7 * net/tramp-imap.el (top): Autoload needed packages.
Michael Albinus <michael.albinus@gmx.de>
parents: 106815
diff changeset
71 (autoload 'imap-hash-rem "imap-hash")
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
72
105779
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
73 ;; We use the additional header "X-Size" for encoding the size of a file.
106954
b21e977d14e7 * net/tramp-imap.el (top): Autoload needed packages.
Michael Albinus <michael.albinus@gmx.de>
parents: 106815
diff changeset
74 (eval-after-load "imap-hash"
b21e977d14e7 * net/tramp-imap.el (top): Autoload needed packages.
Michael Albinus <michael.albinus@gmx.de>
parents: 106815
diff changeset
75 '(add-to-list 'imap-hash-headers 'X-Size 'append))
105779
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
76
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
77 ;; Define Tramp IMAP method ...
110264
ec526909f60b Migrate to Tramp 2.2. Rearrange load dependencies.
Michael Albinus <michael.albinus@gmx.de>
parents: 110015
diff changeset
78 ;;;###tramp-autoload
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
79 (defconst tramp-imap-method "imap"
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
80 "*Method to connect via IMAP protocol.")
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
81
110264
ec526909f60b Migrate to Tramp 2.2. Rearrange load dependencies.
Michael Albinus <michael.albinus@gmx.de>
parents: 110015
diff changeset
82 ;;;###tramp-autoload
ec526909f60b Migrate to Tramp 2.2. Rearrange load dependencies.
Michael Albinus <michael.albinus@gmx.de>
parents: 110015
diff changeset
83 (when (and (locate-library "epa") (locate-library "imap-hash"))
ec526909f60b Migrate to Tramp 2.2. Rearrange load dependencies.
Michael Albinus <michael.albinus@gmx.de>
parents: 110015
diff changeset
84 (add-to-list 'tramp-methods
ec526909f60b Migrate to Tramp 2.2. Rearrange load dependencies.
Michael Albinus <michael.albinus@gmx.de>
parents: 110015
diff changeset
85 (list tramp-imap-method '(tramp-default-port 143))))
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
86
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
87 ;; Add a default for `tramp-default-user-alist'. Default is the local user.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
88 (add-to-list 'tramp-default-user-alist
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
89 `(,tramp-imap-method nil ,(user-login-name)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
90
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
91 ;; Define Tramp IMAPS method ...
110264
ec526909f60b Migrate to Tramp 2.2. Rearrange load dependencies.
Michael Albinus <michael.albinus@gmx.de>
parents: 110015
diff changeset
92 ;;;###tramp-autoload
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
93 (defconst tramp-imaps-method "imaps"
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
94 "*Method to connect via secure IMAP protocol.")
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
95
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
96 ;; ... and add it to the method list.
110264
ec526909f60b Migrate to Tramp 2.2. Rearrange load dependencies.
Michael Albinus <michael.albinus@gmx.de>
parents: 110015
diff changeset
97 ;;;###tramp-autoload
ec526909f60b Migrate to Tramp 2.2. Rearrange load dependencies.
Michael Albinus <michael.albinus@gmx.de>
parents: 110015
diff changeset
98 (when (and (locate-library "epa") (locate-library "imap-hash"))
ec526909f60b Migrate to Tramp 2.2. Rearrange load dependencies.
Michael Albinus <michael.albinus@gmx.de>
parents: 110015
diff changeset
99 (add-to-list 'tramp-methods
ec526909f60b Migrate to Tramp 2.2. Rearrange load dependencies.
Michael Albinus <michael.albinus@gmx.de>
parents: 110015
diff changeset
100 (list tramp-imaps-method '(tramp-default-port 993))))
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
101
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
102 ;; Add a default for `tramp-default-user-alist'. Default is the local user.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
103 (add-to-list 'tramp-default-user-alist
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
104 `(,tramp-imaps-method nil ,(user-login-name)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
105
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
106 ;; Add completion function for IMAP method.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
107 ;; (tramp-set-completion-function
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
108 ;; tramp-imap-method tramp-completion-function-alist-ssh) ; TODO: test this
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
109 ;; tramp-imaps-method tramp-completion-function-alist-ssh) ; TODO: test this
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
110
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
111 ;; New handlers should be added here.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
112 (defconst tramp-imap-file-name-handler-alist
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
113 '(
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
114 ;; `access-file' performed by default handler
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
115 (add-name-to-file . ignore)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
116 ;; `byte-compiler-base-file-name' performed by default handler
105766
bbf5bbea0d69 * net/tramp-imap.el (tramp-imap-file-name-handler-alist): Ignore
Michael Albinus <michael.albinus@gmx.de>
parents: 105377
diff changeset
117 ;; `copy-directory' performed by default handler
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
118 (copy-file . tramp-imap-handle-copy-file)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
119 (delete-directory . ignore) ;; tramp-imap-handle-delete-directory)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
120 (delete-file . tramp-imap-handle-delete-file)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
121 ;; `diff-latest-backup-file' performed by default handler
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
122 (directory-file-name . tramp-handle-directory-file-name)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
123 (directory-files . tramp-handle-directory-files)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
124 (directory-files-and-attributes
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
125 . tramp-imap-handle-directory-files-and-attributes)
105766
bbf5bbea0d69 * net/tramp-imap.el (tramp-imap-file-name-handler-alist): Ignore
Michael Albinus <michael.albinus@gmx.de>
parents: 105377
diff changeset
126 (dired-call-process . ignore)
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
127 ;; `dired-compress-file' performed by default handler
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
128 ;; `dired-uncache' performed by default handler
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
129 (expand-file-name . tramp-imap-handle-expand-file-name)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
130 ;; `file-accessible-directory-p' performed by default handler
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
131 (file-attributes . tramp-imap-handle-file-attributes)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
132 (file-directory-p . tramp-imap-handle-file-directory-p)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
133 (file-executable-p . tramp-imap-handle-file-executable-p)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
134 (file-exists-p . tramp-imap-handle-file-exists-p)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
135 (file-local-copy . tramp-imap-handle-file-local-copy)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
136 (file-modes . tramp-handle-file-modes)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
137 (file-name-all-completions . tramp-imap-handle-file-name-all-completions)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
138 (file-name-as-directory . tramp-handle-file-name-as-directory)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
139 (file-name-completion . tramp-handle-file-name-completion)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
140 (file-name-directory . tramp-handle-file-name-directory)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
141 (file-name-nondirectory . tramp-handle-file-name-nondirectory)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
142 ;; `file-name-sans-versions' performed by default handler
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
143 (file-newer-than-file-p . tramp-imap-handle-file-newer-than-file-p)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
144 (file-ownership-preserved-p . ignore)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
145 (file-readable-p . tramp-imap-handle-file-readable-p)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
146 (file-regular-p . tramp-handle-file-regular-p)
108077
93125d6fab29 Implement SELINUX backends.
Michael Albinus <michael.albinus@gmx.de>
parents: 107378
diff changeset
147 (file-remote-p . tramp-handle-file-remote-p)
93125d6fab29 Implement SELINUX backends.
Michael Albinus <michael.albinus@gmx.de>
parents: 107378
diff changeset
148 ;; `file-selinux-context' performed by default handler.
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
149 (file-symlink-p . tramp-handle-file-symlink-p)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
150 ;; `file-truename' performed by default handler
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
151 (file-writable-p . tramp-imap-handle-file-writable-p)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
152 (find-backup-file-name . tramp-handle-find-backup-file-name)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
153 ;; `find-file-noselect' performed by default handler
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
154 ;; `get-file-buffer' performed by default handler
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
155 (insert-directory . tramp-imap-handle-insert-directory)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
156 (insert-file-contents . tramp-imap-handle-insert-file-contents)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
157 (load . tramp-handle-load)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
158 (make-directory . ignore) ;; tramp-imap-handle-make-directory)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
159 (make-directory-internal . ignore) ;; tramp-imap-handle-make-directory-internal)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
160 (make-symbolic-link . ignore)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
161 (rename-file . tramp-imap-handle-rename-file)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
162 (set-file-modes . ignore)
108077
93125d6fab29 Implement SELINUX backends.
Michael Albinus <michael.albinus@gmx.de>
parents: 107378
diff changeset
163 ;; `set-file-selinux-context' performed by default handler.
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
164 (set-file-times . ignore) ;; tramp-imap-handle-set-file-times)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
165 (set-visited-file-modtime . ignore)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
166 (shell-command . ignore)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
167 (substitute-in-file-name . tramp-handle-substitute-in-file-name)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
168 (unhandled-file-name-directory . tramp-handle-unhandled-file-name-directory)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
169 (vc-registered . ignore)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
170 (verify-visited-file-modtime . ignore)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
171 (write-region . tramp-imap-handle-write-region)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
172 (executable-find . ignore)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
173 (start-file-process . ignore)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
174 (process-file . ignore)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
175 )
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
176 "Alist of handler functions for Tramp IMAP method.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
177 Operations not mentioned here will be handled by the default Emacs primitives.")
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
178
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
179 (defgroup tramp-imap nil
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
180 "Tramp over IMAP configuration."
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
181 :version "23.2"
107378
904ccd8f2acb Reorganize Custom groups.
Chong Yidong <cyd@stupidchicken.com>
parents: 107092
diff changeset
182 :group 'tramp)
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
183
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
184 (defcustom tramp-imap-subject-marker "tramp-imap-subject-marker"
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
185 "The subject marker that Tramp-IMAP will use."
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
186 :type 'string
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
187 :version "23.2"
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
188 :group 'tramp-imap)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
189
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
190 ;; TODO: these will be defcustoms later.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
191 (defvar tramp-imap-passphrase-cache nil) ;; can be t or 'never
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
192 (defvar tramp-imap-passphrase nil)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
193
110264
ec526909f60b Migrate to Tramp 2.2. Rearrange load dependencies.
Michael Albinus <michael.albinus@gmx.de>
parents: 110015
diff changeset
194 ;;;###tramp-autoload
ec526909f60b Migrate to Tramp 2.2. Rearrange load dependencies.
Michael Albinus <michael.albinus@gmx.de>
parents: 110015
diff changeset
195 (defsubst tramp-imap-file-name-p (filename)
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
196 "Check if it's a filename for IMAP protocol."
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
197 (let ((v (tramp-dissect-file-name filename)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
198 (or
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
199 (string= (tramp-file-name-method v) tramp-imap-method)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
200 (string= (tramp-file-name-method v) tramp-imaps-method))))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
201
110264
ec526909f60b Migrate to Tramp 2.2. Rearrange load dependencies.
Michael Albinus <michael.albinus@gmx.de>
parents: 110015
diff changeset
202 ;;;###tramp-autoload
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
203 (defun tramp-imap-file-name-handler (operation &rest args)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
204 "Invoke the IMAP related OPERATION.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
205 First arg specifies the OPERATION, second arg is a list of arguments to
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
206 pass to the OPERATION."
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
207 (let ((fn (assoc operation tramp-imap-file-name-handler-alist)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
208 (if fn
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
209 (save-match-data (apply (cdr fn) args))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
210 (tramp-run-real-handler operation args))))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
211
110264
ec526909f60b Migrate to Tramp 2.2. Rearrange load dependencies.
Michael Albinus <michael.albinus@gmx.de>
parents: 110015
diff changeset
212 ;;;###tramp-autoload
ec526909f60b Migrate to Tramp 2.2. Rearrange load dependencies.
Michael Albinus <michael.albinus@gmx.de>
parents: 110015
diff changeset
213 (when (and (locate-library "epa") (locate-library "imap-hash"))
ec526909f60b Migrate to Tramp 2.2. Rearrange load dependencies.
Michael Albinus <michael.albinus@gmx.de>
parents: 110015
diff changeset
214 (add-to-list 'tramp-foreign-file-name-handler-alist
ec526909f60b Migrate to Tramp 2.2. Rearrange load dependencies.
Michael Albinus <michael.albinus@gmx.de>
parents: 110015
diff changeset
215 (cons 'tramp-imap-file-name-p 'tramp-imap-file-name-handler)))
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
216
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
217 (defun tramp-imap-handle-copy-file
108077
93125d6fab29 Implement SELINUX backends.
Michael Albinus <michael.albinus@gmx.de>
parents: 107378
diff changeset
218 (filename newname &optional ok-if-already-exists keep-date
93125d6fab29 Implement SELINUX backends.
Michael Albinus <michael.albinus@gmx.de>
parents: 107378
diff changeset
219 preserve-uid-gid preserve-selinux-context)
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
220 "Like `copy-file' for Tramp files."
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
221 (tramp-imap-do-copy-or-rename-file
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
222 'copy filename newname ok-if-already-exists keep-date preserve-uid-gid))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
223
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
224 (defun tramp-imap-handle-rename-file
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
225 (filename newname &optional ok-if-already-exists)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
226 "Like `rename-file' for Tramp files."
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
227 (tramp-imap-do-copy-or-rename-file
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
228 'rename filename newname ok-if-already-exists t t))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
229
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
230 (defun tramp-imap-do-copy-or-rename-file
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
231 (op filename newname &optional ok-if-already-exists keep-date preserve-uid-gid)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
232 "Copy or rename a remote file.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
233 OP must be `copy' or `rename' and indicates the operation to perform.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
234 FILENAME specifies the file to copy or rename, NEWNAME is the name of
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
235 the new file (for copy) or the new name of the file (for rename).
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
236 OK-IF-ALREADY-EXISTS means don't barf if NEWNAME exists already.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
237 KEEP-DATE means to make sure that NEWNAME has the same timestamp
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
238 as FILENAME. PRESERVE-UID-GID, when non-nil, instructs to keep
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
239 the uid and gid if both files are on the same host.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
240
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
241 This function is invoked by `tramp-imap-handle-copy-file' and
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
242 `tramp-imap-handle-rename-file'. It is an error if OP is neither
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
243 of `copy' and `rename'."
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
244 (unless (memq op '(copy rename))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
245 (error "Unknown operation `%s', must be `copy' or `rename'" op))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
246 (setq filename (expand-file-name filename))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
247 (setq newname (expand-file-name newname))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
248 (when (file-directory-p newname)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
249 (setq newname (expand-file-name (file-name-nondirectory filename) newname)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
251 (let ((t1 (and (tramp-tramp-file-p filename)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
252 (tramp-imap-file-name-p filename)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
253 (t2 (and (tramp-tramp-file-p newname)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
254 (tramp-imap-file-name-p newname))))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
255
108739
ae0f7dfcf9c9 * net/tramp.el (tramp-do-copy-or-rename-file)
Michael Albinus <michael.albinus@gmx.de>
parents: 108377
diff changeset
256 (with-parsed-tramp-file-name (if t1 filename newname) nil
ae0f7dfcf9c9 * net/tramp.el (tramp-do-copy-or-rename-file)
Michael Albinus <michael.albinus@gmx.de>
parents: 108377
diff changeset
257 (when (and (not ok-if-already-exists) (file-exists-p newname))
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
258 (tramp-error
108739
ae0f7dfcf9c9 * net/tramp.el (tramp-do-copy-or-rename-file)
Michael Albinus <michael.albinus@gmx.de>
parents: 108377
diff changeset
259 v 'file-already-exists "File %s already exists" newname))
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
260
108739
ae0f7dfcf9c9 * net/tramp.el (tramp-do-copy-or-rename-file)
Michael Albinus <michael.albinus@gmx.de>
parents: 108377
diff changeset
261 (with-progress-reporter
ae0f7dfcf9c9 * net/tramp.el (tramp-do-copy-or-rename-file)
Michael Albinus <michael.albinus@gmx.de>
parents: 108377
diff changeset
262 v 0 (format "%s %s to %s"
ae0f7dfcf9c9 * net/tramp.el (tramp-do-copy-or-rename-file)
Michael Albinus <michael.albinus@gmx.de>
parents: 108377
diff changeset
263 (if (eq op 'copy) "Copying" "Renaming")
ae0f7dfcf9c9 * net/tramp.el (tramp-do-copy-or-rename-file)
Michael Albinus <michael.albinus@gmx.de>
parents: 108377
diff changeset
264 filename newname)
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
265
108739
ae0f7dfcf9c9 * net/tramp.el (tramp-do-copy-or-rename-file)
Michael Albinus <michael.albinus@gmx.de>
parents: 108377
diff changeset
266 ;; We just make a local copy of FILENAME, and write it then to
ae0f7dfcf9c9 * net/tramp.el (tramp-do-copy-or-rename-file)
Michael Albinus <michael.albinus@gmx.de>
parents: 108377
diff changeset
267 ;; NEWNAME. This must be optimized, when both files are
ae0f7dfcf9c9 * net/tramp.el (tramp-do-copy-or-rename-file)
Michael Albinus <michael.albinus@gmx.de>
parents: 108377
diff changeset
268 ;; located on the same IMAP server.
ae0f7dfcf9c9 * net/tramp.el (tramp-do-copy-or-rename-file)
Michael Albinus <michael.albinus@gmx.de>
parents: 108377
diff changeset
269 (with-temp-buffer
ae0f7dfcf9c9 * net/tramp.el (tramp-do-copy-or-rename-file)
Michael Albinus <michael.albinus@gmx.de>
parents: 108377
diff changeset
270 (if (and t1 t2)
ae0f7dfcf9c9 * net/tramp.el (tramp-do-copy-or-rename-file)
Michael Albinus <michael.albinus@gmx.de>
parents: 108377
diff changeset
271 ;; We don't encrypt.
ae0f7dfcf9c9 * net/tramp.el (tramp-do-copy-or-rename-file)
Michael Albinus <michael.albinus@gmx.de>
parents: 108377
diff changeset
272 (with-parsed-tramp-file-name newname v1
ae0f7dfcf9c9 * net/tramp.el (tramp-do-copy-or-rename-file)
Michael Albinus <michael.albinus@gmx.de>
parents: 108377
diff changeset
273 (insert (tramp-imap-get-file filename nil))
ae0f7dfcf9c9 * net/tramp.el (tramp-do-copy-or-rename-file)
Michael Albinus <michael.albinus@gmx.de>
parents: 108377
diff changeset
274 (tramp-imap-put-file
ae0f7dfcf9c9 * net/tramp.el (tramp-do-copy-or-rename-file)
Michael Albinus <michael.albinus@gmx.de>
parents: 108377
diff changeset
275 v1 (current-buffer)
ae0f7dfcf9c9 * net/tramp.el (tramp-do-copy-or-rename-file)
Michael Albinus <michael.albinus@gmx.de>
parents: 108377
diff changeset
276 (tramp-imap-file-name-name v1)
ae0f7dfcf9c9 * net/tramp.el (tramp-do-copy-or-rename-file)
Michael Albinus <michael.albinus@gmx.de>
parents: 108377
diff changeset
277 nil nil (nth 7 (file-attributes filename))))
ae0f7dfcf9c9 * net/tramp.el (tramp-do-copy-or-rename-file)
Michael Albinus <michael.albinus@gmx.de>
parents: 108377
diff changeset
278 ;; One of them is not located on a IMAP mailbox.
ae0f7dfcf9c9 * net/tramp.el (tramp-do-copy-or-rename-file)
Michael Albinus <michael.albinus@gmx.de>
parents: 108377
diff changeset
279 (insert-file-contents filename)
ae0f7dfcf9c9 * net/tramp.el (tramp-do-copy-or-rename-file)
Michael Albinus <michael.albinus@gmx.de>
parents: 108377
diff changeset
280 (write-region (point-min) (point-max) newname)))))
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
281
108816
94d1d8a6dcfd * net/tramp-compat.el (tramp-compat-delete-file): Use
Michael Albinus <michael.albinus@gmx.de>
parents: 108806
diff changeset
282 (when (eq op 'rename) (delete-file filename))))
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
283
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
284 ;; TODO: revise this much
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
285 (defun tramp-imap-handle-expand-file-name (name &optional dir)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
286 "Like `expand-file-name' for Tramp files."
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
287 ;; If DIR is not given, use DEFAULT-DIRECTORY or "/".
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
288 (setq dir (or dir default-directory "/"))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
289 ;; Unless NAME is absolute, concat DIR and NAME.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
290 (unless (file-name-absolute-p name)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
291 (setq name (concat (file-name-as-directory dir) name)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
292 ;; If NAME is not a Tramp file, run the real handler.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
293 (if (or (tramp-completion-mode-p) (not (tramp-tramp-file-p name)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
294 (tramp-drop-volume-letter
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
295 (tramp-run-real-handler 'expand-file-name (list name nil)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
296 ;; Dissect NAME.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
297 (with-parsed-tramp-file-name name nil
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
298 (unless (tramp-run-real-handler 'file-name-absolute-p (list localname))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
299 (setq localname (concat "/" localname)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
300 ;; There might be a double slash, for example when "~/"
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
301 ;; expands to "/". Remove this.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
302 (while (string-match "//" localname)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
303 (setq localname (replace-match "/" t t localname)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
304 ;; Do normal `expand-file-name' (this does "/./" and "/../").
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
305 ;; We bind `directory-sep-char' here for XEmacs on Windows,
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
306 ;; which would otherwise use backslash. `default-directory' is
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
307 ;; bound, because on Windows there would be problems with UNC
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
308 ;; shares or Cygwin mounts.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
309 (let ((default-directory (tramp-compat-temporary-file-directory)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
310 (tramp-make-tramp-file-name
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
311 method user host
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
312 (tramp-drop-volume-letter
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
313 (tramp-run-real-handler
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
314 'expand-file-name (list localname))))))))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
315
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
316 ;; This function should return "foo/" for directories and "bar" for
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
317 ;; files.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
318 (defun tramp-imap-handle-file-name-all-completions (filename directory)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
319 "Like `file-name-all-completions' for Tramp files."
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
320 (all-completions
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
321 filename
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
322 (with-parsed-tramp-file-name (expand-file-name directory) nil
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
323 (save-match-data
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
324 (let ((entries
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
325 (tramp-imap-get-file-entries v localname)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
326 (mapcar
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
327 (lambda (x)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
328 (list
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
329 (if (string-match "d" (nth 9 x))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
330 (file-name-as-directory (nth 0 x))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
331 (nth 0 x))))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
332 entries))))))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
333
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
334 (defun tramp-imap-get-file-entries (vec localname &optional exact)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
335 "Read entries returned by IMAP server. EXACT limits to exact matches.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
336 Result is a list of (LOCALNAME LINK COUNT UID GID ATIME MTIME CTIME
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
337 SIZE MODE WEIRD INODE DEVICE)."
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
338 (tramp-message vec 5 "working on %s" localname)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
339 (let* ((name (tramp-imap-file-name-name vec))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
340 (search-name (or name ""))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
341 (search-name (if exact (concat search-name "$") search-name))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
342 (iht (tramp-imap-make-iht vec search-name)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
343 ;; TODO: catch errors
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
344 ;; (tramp-error vec 'none "bad name %s or mailbox %s" name mbox))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
345 (imap-hash-map (lambda (uid headers body)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
346 (let ((subject (substring
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
347 (aget headers 'Subject "")
105779
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
348 (length tramp-imap-subject-marker)))
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
349 (from (aget headers 'From ""))
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
350 (date (date-to-time (aget headers 'Date "")))
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
351 (size (string-to-number
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
352 (or (aget headers 'X-Size "0") "0"))))
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
353 (setq from
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
354 (if (string-match "<\\([^@]+\\)@" from)
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
355 (match-string 1 from)
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
356 "nobody"))
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
357 (list
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
358 subject
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
359 nil
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
360 -1
105779
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
361 from
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
362 "nogroup"
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
363 date
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
364 date
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
365 date
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
366 size
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
367 "-rw-rw-rw-"
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
368 nil
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
369 uid
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
370 (tramp-get-device vec))))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
371 iht t)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
372
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
373 (defun tramp-imap-handle-write-region (start end filename &optional append visit lockname confirm)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
374 "Like `write-region' for Tramp files."
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
375 (setq filename (expand-file-name filename))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
376 (with-parsed-tramp-file-name filename nil
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
377 ;; XEmacs takes a coding system as the seventh argument, not `confirm'.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
378 (when (and (not (featurep 'xemacs))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
379 confirm (file-exists-p filename))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
380 (unless (y-or-n-p (format "File %s exists; overwrite anyway? "
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
381 filename))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
382 (tramp-error v 'file-error "File not overwritten")))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
383 (tramp-flush-file-property v localname)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
384 (let* ((old-buffer (current-buffer))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
385 (inode (tramp-imap-get-file-inode filename))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
386 (min 1)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
387 (max (point-max))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
388 ;; Make sure we have good start and end values.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
389 (start (or start min))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
390 (end (or end max))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
391 temp-buffer)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
392 (with-temp-buffer
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
393 (setq temp-buffer (if (and (eq start min) (eq end max))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
394 old-buffer
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
395 ;; If this is a region write, insert the substring.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
396 (insert
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
397 (with-current-buffer old-buffer
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
398 (buffer-substring-no-properties start end)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
399 (current-buffer)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
400 (tramp-imap-put-file v
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
401 temp-buffer
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
402 (tramp-imap-file-name-name v)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
403 inode
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
404 t)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
405 (when (eq visit t)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
406 (set-visited-file-modtime))))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
407
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
408 (defun tramp-imap-handle-insert-directory
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
409 (filename switches &optional wildcard full-directory-p)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
410 "Like `insert-directory' for Tramp files."
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
411 (setq filename (expand-file-name filename))
107092
2e763e444bc2 * net/ange-ftp.el (ange-ftp-insert-directory):
Michael Albinus <michael.albinus@gmx.de>
parents: 107085
diff changeset
412 (if full-directory-p
2e763e444bc2 * net/ange-ftp.el (ange-ftp-insert-directory):
Michael Albinus <michael.albinus@gmx.de>
parents: 107085
diff changeset
413 ;; Called from `dired-add-entry'.
2e763e444bc2 * net/ange-ftp.el (ange-ftp-insert-directory):
Michael Albinus <michael.albinus@gmx.de>
parents: 107085
diff changeset
414 (setq filename (file-name-as-directory filename))
2e763e444bc2 * net/ange-ftp.el (ange-ftp-insert-directory):
Michael Albinus <michael.albinus@gmx.de>
parents: 107085
diff changeset
415 (setq filename (directory-file-name filename)))
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
416 (with-parsed-tramp-file-name filename nil
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
417 (save-match-data
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
418 (let ((base (file-name-nondirectory localname))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
419 (entries (copy-sequence
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
420 (tramp-imap-get-file-entries
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
421 v (file-name-directory localname)))))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
422
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
423 (when wildcard
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
424 (when (string-match "\\." base)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
425 (setq base (replace-match "\\\\." nil nil base)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
426 (when (string-match "\\*" base)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
427 (setq base (replace-match ".*" nil nil base)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
428 (when (string-match "\\?" base)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
429 (setq base (replace-match ".?" nil nil base))))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
430
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
431 ;; Filter entries.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
432 (setq entries
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
433 (delq
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
434 nil
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
435 (if (or wildcard (zerop (length base)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
436 ;; Check for matching entries.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
437 (mapcar
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
438 (lambda (x)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
439 (when (string-match
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
440 (format "^%s" base) (nth 0 x))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
441 x))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
442 entries)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
443 ;; We just need the only and only entry FILENAME.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
444 (list (assoc base entries)))))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
445
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
446 ;; Sort entries.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
447 (setq entries
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
448 (sort
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
449 entries
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
450 (lambda (x y)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
451 (if (string-match "t" switches)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
452 ;; Sort by date.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
453 (tramp-time-less-p (nth 6 y) (nth 6 x))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
454 ;; Sort by name.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
455 (string-lessp (nth 0 x) (nth 0 y))))))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
456
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
457 ;; Handle "-F" switch.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
458 (when (string-match "F" switches)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
459 (mapc
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
460 (lambda (x)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
461 (when (not (zerop (length (car x))))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
462 (cond
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
463 ((char-equal ?d (string-to-char (nth 9 x)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
464 (setcar x (concat (car x) "/")))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
465 ((char-equal ?x (string-to-char (nth 9 x)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
466 (setcar x (concat (car x) "*"))))))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
467 entries))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
468
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
469 ;; Print entries.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
470 (mapcar
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
471 (lambda (x)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
472 (when (not (zerop (length (nth 0 x))))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
473 (insert
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
474 (format
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
475 "%10s %3d %-8s %-8s %8s %s "
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
476 (nth 9 x) ; mode
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
477 (nth 11 x) ; inode
105779
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
478 (nth 3 x) ; uid
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
479 (nth 4 x) ; gid
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
480 (nth 8 x) ; size
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
481 (format-time-string
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
482 (if (tramp-time-less-p
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
483 (tramp-time-subtract (current-time) (nth 6 x))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
484 tramp-half-a-year)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
485 "%b %e %R"
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
486 "%b %e %Y")
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
487 (nth 6 x)))) ; date
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
488 ;; For the file name, we set the `dired-filename'
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
489 ;; property. This allows to handle file names with
107085
d7831d04952b * dired.el (dired-revert): If DIRED-DIRECTORY is a cons cell, call
Michael Albinus <michael.albinus@gmx.de>
parents: 106955
diff changeset
490 ;; leading or trailing spaces as well. The inserted name
d7831d04952b * dired.el (dired-revert): If DIRED-DIRECTORY is a cons cell, call
Michael Albinus <michael.albinus@gmx.de>
parents: 106955
diff changeset
491 ;; could be from somewhere else, so we use the relative
d7831d04952b * dired.el (dired-revert): If DIRED-DIRECTORY is a cons cell, call
Michael Albinus <michael.albinus@gmx.de>
parents: 106955
diff changeset
492 ;; file name of `default-directory'.
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
493 (let ((pos (point)))
107085
d7831d04952b * dired.el (dired-revert): If DIRED-DIRECTORY is a cons cell, call
Michael Albinus <michael.albinus@gmx.de>
parents: 106955
diff changeset
494 (insert
d7831d04952b * dired.el (dired-revert): If DIRED-DIRECTORY is a cons cell, call
Michael Albinus <michael.albinus@gmx.de>
parents: 106955
diff changeset
495 (format
d7831d04952b * dired.el (dired-revert): If DIRED-DIRECTORY is a cons cell, call
Michael Albinus <michael.albinus@gmx.de>
parents: 106955
diff changeset
496 "%s\n"
107092
2e763e444bc2 * net/ange-ftp.el (ange-ftp-insert-directory):
Michael Albinus <michael.albinus@gmx.de>
parents: 107085
diff changeset
497 (file-relative-name
2e763e444bc2 * net/ange-ftp.el (ange-ftp-insert-directory):
Michael Albinus <michael.albinus@gmx.de>
parents: 107085
diff changeset
498 (expand-file-name (nth 0 x) (file-name-directory filename)))))
107085
d7831d04952b * dired.el (dired-revert): If DIRED-DIRECTORY is a cons cell, call
Michael Albinus <michael.albinus@gmx.de>
parents: 106955
diff changeset
499 (put-text-property pos (1- (point)) 'dired-filename t))
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
500 (forward-line)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
501 (beginning-of-line)))
107085
d7831d04952b * dired.el (dired-revert): If DIRED-DIRECTORY is a cons cell, call
Michael Albinus <michael.albinus@gmx.de>
parents: 106955
diff changeset
502 entries)))))
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
503
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
504 (defun tramp-imap-handle-insert-file-contents
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
505 (filename &optional visit beg end replace)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
506 "Like `insert-file-contents' for Tramp files."
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
507 (barf-if-buffer-read-only)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
508 (when visit
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
509 (setq buffer-file-name (expand-file-name filename))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
510 (set-visited-file-modtime)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
511 (set-buffer-modified-p nil))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
512 (with-parsed-tramp-file-name filename nil
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
513 (if (not (file-exists-p filename))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
514 (tramp-error
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
515 v 'file-error "File `%s' not found on remote host" filename)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
516 (let ((point (point))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
517 size data)
108739
ae0f7dfcf9c9 * net/tramp.el (tramp-do-copy-or-rename-file)
Michael Albinus <michael.albinus@gmx.de>
parents: 108377
diff changeset
518 (with-progress-reporter v 3 (format "Fetching file %s" filename)
ae0f7dfcf9c9 * net/tramp.el (tramp-do-copy-or-rename-file)
Michael Albinus <michael.albinus@gmx.de>
parents: 108377
diff changeset
519 (insert (tramp-imap-get-file filename t))
ae0f7dfcf9c9 * net/tramp.el (tramp-do-copy-or-rename-file)
Michael Albinus <michael.albinus@gmx.de>
parents: 108377
diff changeset
520 (setq size (- (point) point))
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
521 ;;; TODO: handle ranges.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
522 ;;; (let ((beg (or beg (point-min)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
523 ;;; (end (min (or end (point-max)) (point-max))))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
524 ;;; (setq size (- end beg))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
525 ;;; (buffer-substring beg end))
108739
ae0f7dfcf9c9 * net/tramp.el (tramp-do-copy-or-rename-file)
Michael Albinus <michael.albinus@gmx.de>
parents: 108377
diff changeset
526 (goto-char point)
ae0f7dfcf9c9 * net/tramp.el (tramp-do-copy-or-rename-file)
Michael Albinus <michael.albinus@gmx.de>
parents: 108377
diff changeset
527 (list (expand-file-name filename) size))))))
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
528
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
529 (defun tramp-imap-handle-file-exists-p (filename)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
530 "Like `file-exists-p' for Tramp files."
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
531 (and (file-attributes filename) t))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
532
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
533 (defun tramp-imap-handle-file-directory-p (filename)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
534 "Like `file-directory-p' for Tramp-IMAP files."
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
535 ;; We allow only mailboxes to be a directory.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
536 (with-parsed-tramp-file-name (expand-file-name filename default-directory) nil
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
537 (and (string-match "^/[^/]*$" (directory-file-name localname)) t)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
538
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
539 (defun tramp-imap-handle-file-attributes (filename &optional id-format)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
540 "Like `file-attributes' for Tramp-IMAP FILENAME."
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
541 (with-parsed-tramp-file-name (expand-file-name filename) nil
105779
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
542 (let ((res (cdr-safe (nth 0 (tramp-imap-get-file-entries v localname)))))
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
543 (unless (or (null res) (eq id-format 'string))
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
544 (setcar (nthcdr 2 res) 1)
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
545 (setcar (nthcdr 3 res) 1))
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
546 res)))
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
547
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
548 (defun tramp-imap-get-file-inode (filename &optional id-format)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
549 "Get inode equivalent \(actually the UID) for Tramp-IMAP FILENAME."
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
550 (nth 10 (tramp-compat-file-attributes filename id-format)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
551
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
552 (defun tramp-imap-handle-file-executable-p (filename)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
553 "Like `file-executable-p' for Tramp files. False for IMAP."
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
554 nil)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
555
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
556 (defun tramp-imap-handle-file-readable-p (filename)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
557 "Like `file-readable-p' for Tramp files. True for IMAP."
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
558 (file-exists-p filename))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
559
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
560 (defun tramp-imap-handle-file-writable-p (filename)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
561 "Like `file-writable-p' for Tramp files. True for IMAP."
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
562 ;; `file-exists-p' does not work yet for directories.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
563 ;; (file-exists-p (file-name-directory filename)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
564 (file-directory-p (file-name-directory filename)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
565
108806
511da81b16c5 Change delete-by-moving-to-trash so Lisp calls explicitly request trashing.
Chong Yidong <cyd@stupidchicken.com>
parents: 108739
diff changeset
566 (defun tramp-imap-handle-delete-file (filename &optional trash)
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
567 "Like `delete-file' for Tramp files."
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
568 (cond
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
569 ((not (file-exists-p filename)) nil)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
570 (t (with-parsed-tramp-file-name (expand-file-name filename) nil
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
571 (let ((iht (tramp-imap-make-iht v)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
572 (imap-hash-rem (tramp-imap-get-file-inode filename) iht))))))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
573
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
574 (defun tramp-imap-handle-directory-files-and-attributes
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
575 (directory &optional full match nosort id-format)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
576 "Like `directory-files-and-attributes' for Tramp files."
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
577 (mapcar
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
578 (lambda (x)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
579 (cons x (tramp-compat-file-attributes
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
580 (if full x (expand-file-name x directory)) id-format)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
581 (directory-files directory full match nosort)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
582
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
583 ;; TODO: fix this in tramp-imap-get-file-entries.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
584 (defun tramp-imap-handle-file-newer-than-file-p (file1 file2)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
585 "Like `file-newer-than-file-p' for Tramp files."
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
586 (cond
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
587 ((not (file-exists-p file1)) nil)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
588 ((not (file-exists-p file2)) t)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
589 (t (tramp-time-less-p (nth 5 (file-attributes file2))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
590 (nth 5 (file-attributes file1))))))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
591
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
592 (defun tramp-imap-handle-file-local-copy (filename)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
593 "Like `file-local-copy' for Tramp files."
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
594 (with-parsed-tramp-file-name (expand-file-name filename) nil
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
595 (unless (file-exists-p filename)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
596 (tramp-error
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
597 v 'file-error
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
598 "Cannot make local copy of non-existing file `%s'" filename))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
599 (let ((tmpfile (tramp-compat-make-temp-file filename)))
108739
ae0f7dfcf9c9 * net/tramp.el (tramp-do-copy-or-rename-file)
Michael Albinus <michael.albinus@gmx.de>
parents: 108377
diff changeset
600 (with-progress-reporter
ae0f7dfcf9c9 * net/tramp.el (tramp-do-copy-or-rename-file)
Michael Albinus <michael.albinus@gmx.de>
parents: 108377
diff changeset
601 v 3 (format "Fetching %s to tmp file %s" filename tmpfile)
ae0f7dfcf9c9 * net/tramp.el (tramp-do-copy-or-rename-file)
Michael Albinus <michael.albinus@gmx.de>
parents: 108377
diff changeset
602 (with-temp-buffer
ae0f7dfcf9c9 * net/tramp.el (tramp-do-copy-or-rename-file)
Michael Albinus <michael.albinus@gmx.de>
parents: 108377
diff changeset
603 (insert-file-contents filename)
ae0f7dfcf9c9 * net/tramp.el (tramp-do-copy-or-rename-file)
Michael Albinus <michael.albinus@gmx.de>
parents: 108377
diff changeset
604 (write-region (point-min) (point-max) tmpfile)
ae0f7dfcf9c9 * net/tramp.el (tramp-do-copy-or-rename-file)
Michael Albinus <michael.albinus@gmx.de>
parents: 108377
diff changeset
605 tmpfile)))))
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
606
105779
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
607 (defun tramp-imap-put-file
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
608 (vec filename-or-buffer &optional subject inode encode size)
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
609 "Write contents of FILENAME-OR-BUFFER to Tramp-IMAP file VEC with name SUBJECT.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
610 When INODE is given, delete that old remote file after writing the new one
105779
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
611 \(normally this is the old file with the same name). A non-nil ENCODE
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
612 forces the encoding of the buffer or file. SIZE, when available, indicates
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
613 the file size; this is needed, if the file or buffer is already encoded."
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
614 ;; `tramp-current-host' is used in `tramp-imap-passphrase-callback-function'.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
615 (let ((tramp-current-host (tramp-file-name-real-host vec))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
616 (iht (tramp-imap-make-iht vec)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
617 (imap-hash-put (list
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
618 (list (cons
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
619 'Subject
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
620 (format
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
621 "%s%s"
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
622 tramp-imap-subject-marker
105779
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
623 (or subject "no subject")))
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
624 (cons
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
625 'X-Size
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
626 (number-to-string
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
627 (cond
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
628 ((numberp size) size)
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
629 ((bufferp filename-or-buffer)
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
630 (buffer-size filename-or-buffer))
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
631 ((stringp filename-or-buffer)
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
632 (nth 7 (file-attributes filename-or-buffer)))
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
633 ;; We don't know the size.
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
634 (t -1)))))
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
635 (cond ((bufferp filename-or-buffer)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
636 (with-current-buffer filename-or-buffer
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
637 (if encode
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
638 (tramp-imap-encode-buffer)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
639 (buffer-string))))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
640 ;; TODO: allow file names.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
641 (t "No body available")))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
642 iht
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
643 inode)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
644
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
645 (defun tramp-imap-get-file (filename &optional decode)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
646 ;; (debug (tramp-imap-get-file-inode filename))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
647 (with-parsed-tramp-file-name (expand-file-name filename) nil
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
648 (condition-case ()
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
649 ;; `tramp-current-host' is used in
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
650 ;; `tramp-imap-passphrase-callback-function'.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
651 (let* ((tramp-current-host (tramp-file-name-real-host v))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
652 (iht (tramp-imap-make-iht v))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
653 (inode (tramp-imap-get-file-inode filename))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
654 (data (imap-hash-get inode iht t)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
655 (if decode
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
656 (with-temp-buffer
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
657 (insert (nth 1 data))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
658 ;;(debug inode (buffer-string))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
659 (tramp-imap-decode-buffer))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
660 (nth 1 data)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
661 (error (tramp-error
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
662 v 'file-error "File `%s' could not be read" filename)))))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
663
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
664 (defun tramp-imap-passphrase-callback-function (context key-id handback)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
665 "Called by EPG to get a passphrase for Tramp-IMAP.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
666 CONTEXT is the encryption/decryption EPG context.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
667 HANDBACK is just carried through.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
668 KEY-ID can be 'SYM or 'PIN among others."
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
669 (let* ((server tramp-current-host)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
670 (port "tramp-imap") ; this is NOT the server password!
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
671 (auth-passwd
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
672 (auth-source-user-or-password "password" server port)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
673 (or
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
674 (copy-sequence auth-passwd)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
675 ;; If we cache the passphrase and we have one.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
676 (if (and (eq tramp-imap-passphrase-cache t)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
677 tramp-imap-passphrase)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
678 ;; Do we reuse it?
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
679 (if (y-or-n-p "Reuse the passphrase? ")
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
680 (copy-sequence tramp-imap-passphrase)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
681 ;; Don't reuse: revert caching behavior to nil, erase passphrase,
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
682 ;; call ourselves again.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
683 (setq tramp-imap-passphrase-cache nil)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
684 (setq tramp-imap-passphrase nil)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
685 (tramp-imap-passphrase-callback-function context key-id handback))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
686 (let ((p (if (eq key-id 'SYM)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
687 (read-passwd
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
688 "Tramp-IMAP passphrase for symmetric encryption: "
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
689 (eq (epg-context-operation context) 'encrypt)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
690 tramp-imap-passphrase)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
691 (read-passwd
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
692 (if (eq key-id 'PIN)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
693 "Tramp-IMAP passphrase for PIN: "
106954
b21e977d14e7 * net/tramp-imap.el (top): Autoload needed packages.
Michael Albinus <michael.albinus@gmx.de>
parents: 106815
diff changeset
694 (let ((entry (assoc key-id
b21e977d14e7 * net/tramp-imap.el (top): Autoload needed packages.
Michael Albinus <michael.albinus@gmx.de>
parents: 106815
diff changeset
695 (symbol-value 'epg-user-id-alist))))
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
696 (if entry
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
697 (format "Tramp-IMAP passphrase for %s %s: "
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
698 key-id (cdr entry))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
699 (format "Tramp-IMAP passphrase for %s: " key-id))))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
700 nil
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
701 tramp-imap-passphrase))))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
702
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
703 ;; If we have an answer, the passphrase has changed,
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
704 ;; the user hasn't declined keeping the passphrase,
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
705 ;; and they answer yes to keep it now...
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
706 (when (and
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
707 p
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
708 (not (equal tramp-imap-passphrase p))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
709 (not (eq tramp-imap-passphrase-cache 'never))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
710 (y-or-n-p "Keep the passphrase? "))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
711 (setq tramp-imap-passphrase (copy-sequence p))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
712 (setq tramp-imap-passphrase-cache t))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
713
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
714 ;; If we still don't have a passphrase, the user didn't want
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
715 ;; to keep it.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
716 (when (and
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
717 p
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
718 (not tramp-imap-passphrase))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
719 (setq tramp-imap-passphrase-cache 'never))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
720
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
721 p)))))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
722
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
723 (defun tramp-imap-encode-buffer ()
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
724 (let ((context (epg-make-context 'OpenPGP))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
725 cipher)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
726 (epg-context-set-armor context t)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
727 (epg-context-set-passphrase-callback context
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
728 #'tramp-imap-passphrase-callback-function)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
729 (epg-context-set-progress-callback context
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
730 (cons #'epa-progress-callback-function
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
731 "Encrypting..."))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
732 (message "Encrypting...")
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
733 (setq cipher (epg-encrypt-string
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
734 context
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
735 (encode-coding-string (buffer-string) 'utf-8)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
736 nil))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
737 (message "Encrypting...done")
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
738 cipher))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
739
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
740 (defun tramp-imap-decode-buffer ()
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
741 (let ((context (epg-make-context 'OpenPGP))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
742 plain)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
743 (epg-context-set-passphrase-callback context
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
744 #'tramp-imap-passphrase-callback-function)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
745 (epg-context-set-progress-callback context
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
746 (cons #'epa-progress-callback-function
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
747 "Decrypting..."))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
748 (message "Decrypting...")
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
749 (setq plain (decode-coding-string
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
750 (epg-decrypt-string context (buffer-string))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
751 'utf-8))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
752 (message "Decrypting...done")
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
753 plain))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
754
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
755 (defun tramp-imap-file-name-mailbox (vec)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
756 (nth 0 (tramp-imap-file-name-parse vec)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
757
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
758 (defun tramp-imap-file-name-name (vec)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
759 (nth 1 (tramp-imap-file-name-parse vec)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
760
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
761 (defun tramp-imap-file-name-localname (vec)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
762 (nth 1 (tramp-imap-file-name-parse vec)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
763
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
764 (defun tramp-imap-file-name-parse (vec)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
765 (let ((name (substring-no-properties (tramp-file-name-localname vec))))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
766 (if (string-match "^/\\([^/]+\\)/?\\(.*\\)$" name)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
767 (list (match-string 1 name)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
768 (match-string 2 name))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
769 nil)))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
770
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
771 (defun tramp-imap-make-iht (vec &optional needed-subject)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
772 "Translate the Tramp vector VEC to the imap-hash structure.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
773 With NEEDED-SUBJECT, alters the imap-hash test accordingly."
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
774 (let* ((mbox (tramp-imap-file-name-mailbox vec))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
775 (server (tramp-file-name-real-host vec))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
776 (method (tramp-file-name-method vec))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
777 (user (tramp-file-name-user vec))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
778 (ssl (string-equal method tramp-imaps-method))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
779 (port (or (tramp-file-name-port vec)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
780 (tramp-get-method-parameter method 'tramp-default-port)))
105766
bbf5bbea0d69 * net/tramp-imap.el (tramp-imap-file-name-handler-alist): Ignore
Michael Albinus <michael.albinus@gmx.de>
parents: 105377
diff changeset
781 (result (imap-hash-make server port mbox user nil ssl)))
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
782 ;; Return the IHT with a test override to look for the subject
105766
bbf5bbea0d69 * net/tramp-imap.el (tramp-imap-file-name-handler-alist): Ignore
Michael Albinus <michael.albinus@gmx.de>
parents: 105377
diff changeset
783 ;; marker.
bbf5bbea0d69 * net/tramp-imap.el (tramp-imap-file-name-handler-alist): Ignore
Michael Albinus <michael.albinus@gmx.de>
parents: 105377
diff changeset
784 (plist-put
bbf5bbea0d69 * net/tramp-imap.el (tramp-imap-file-name-handler-alist): Ignore
Michael Albinus <michael.albinus@gmx.de>
parents: 105377
diff changeset
785 result
bbf5bbea0d69 * net/tramp-imap.el (tramp-imap-file-name-handler-alist): Ignore
Michael Albinus <michael.albinus@gmx.de>
parents: 105377
diff changeset
786 :test (format "^%s%s"
bbf5bbea0d69 * net/tramp-imap.el (tramp-imap-file-name-handler-alist): Ignore
Michael Albinus <michael.albinus@gmx.de>
parents: 105377
diff changeset
787 tramp-imap-subject-marker
bbf5bbea0d69 * net/tramp-imap.el (tramp-imap-file-name-handler-alist): Ignore
Michael Albinus <michael.albinus@gmx.de>
parents: 105377
diff changeset
788 (if needed-subject needed-subject "")))))
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
789
110264
ec526909f60b Migrate to Tramp 2.2. Rearrange load dependencies.
Michael Albinus <michael.albinus@gmx.de>
parents: 110015
diff changeset
790 (add-hook 'tramp-unload-hook
ec526909f60b Migrate to Tramp 2.2. Rearrange load dependencies.
Michael Albinus <michael.albinus@gmx.de>
parents: 110015
diff changeset
791 (lambda ()
ec526909f60b Migrate to Tramp 2.2. Rearrange load dependencies.
Michael Albinus <michael.albinus@gmx.de>
parents: 110015
diff changeset
792 (unload-feature 'tramp-imap 'force)))
ec526909f60b Migrate to Tramp 2.2. Rearrange load dependencies.
Michael Albinus <michael.albinus@gmx.de>
parents: 110015
diff changeset
793
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
794 ;;; TODO:
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
795
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
796 ;; * Implement `tramp-imap-handle-delete-directory',
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
797 ;; `tramp-imap-handle-make-directory',
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
798 ;; `tramp-imap-handle-make-directory-internal',
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
799 ;; `tramp-imap-handle-set-file-times'.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
800
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
801 ;; * Encode the subject. If the filename has trailing spaces (like
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
802 ;; "test "), those characters get lost, for example in dired listings.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
803
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
804 ;; * When opening a dired buffer, like "/imap::INBOX.test", there are
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
805 ;; several error messages:
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
806 ;; "Buffer has a running process; kill it? (yes or no) "
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
807 ;; "error in process filter: Internal error, tag 6 status BAD code nil text No mailbox selected."
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
808 ;; Afterwards, everything seems to be fine.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
809
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
810 ;; * imaps works for local IMAP servers. Accessing
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
811 ;; "/imaps:imap.gmail.com:/INBOX.test/" results in error
105766
bbf5bbea0d69 * net/tramp-imap.el (tramp-imap-file-name-handler-alist): Ignore
Michael Albinus <michael.albinus@gmx.de>
parents: 105377
diff changeset
812 ;; "error in process filter: Internal error, tag 5 status BAD code nil text UNSELECT not allowed now."
bbf5bbea0d69 * net/tramp-imap.el (tramp-imap-file-name-handler-alist): Ignore
Michael Albinus <michael.albinus@gmx.de>
parents: 105377
diff changeset
813
105779
4f83cd6cf378 * net/tramp-imap.el (top): Add `X-Size' to `imap-hash-headers'.
Michael Albinus <michael.albinus@gmx.de>
parents: 105766
diff changeset
814 ;; * Improve `tramp-imap-handle-file-attributes' for directories.
105766
bbf5bbea0d69 * net/tramp-imap.el (tramp-imap-file-name-handler-alist): Ignore
Michael Albinus <michael.albinus@gmx.de>
parents: 105377
diff changeset
815
bbf5bbea0d69 * net/tramp-imap.el (tramp-imap-file-name-handler-alist): Ignore
Michael Albinus <michael.albinus@gmx.de>
parents: 105377
diff changeset
816 ;; * Saving a file creates a second one, instead of overwriting.
bbf5bbea0d69 * net/tramp-imap.el (tramp-imap-file-name-handler-alist): Ignore
Michael Albinus <michael.albinus@gmx.de>
parents: 105377
diff changeset
817
bbf5bbea0d69 * net/tramp-imap.el (tramp-imap-file-name-handler-alist): Ignore
Michael Albinus <michael.albinus@gmx.de>
parents: 105377
diff changeset
818 ;; * Backup files: just *one* is kept.
bbf5bbea0d69 * net/tramp-imap.el (tramp-imap-file-name-handler-alist): Ignore
Michael Albinus <michael.albinus@gmx.de>
parents: 105377
diff changeset
819
bbf5bbea0d69 * net/tramp-imap.el (tramp-imap-file-name-handler-alist): Ignore
Michael Albinus <michael.albinus@gmx.de>
parents: 105377
diff changeset
820 ;; * Password requests shall have a descriptive prompt.
bbf5bbea0d69 * net/tramp-imap.el (tramp-imap-file-name-handler-alist): Ignore
Michael Albinus <michael.albinus@gmx.de>
parents: 105377
diff changeset
821
bbf5bbea0d69 * net/tramp-imap.el (tramp-imap-file-name-handler-alist): Ignore
Michael Albinus <michael.albinus@gmx.de>
parents: 105377
diff changeset
822 ;; * Exiting Emacs, there are running IMAP processes. Make them quiet
bbf5bbea0d69 * net/tramp-imap.el (tramp-imap-file-name-handler-alist): Ignore
Michael Albinus <michael.albinus@gmx.de>
parents: 105377
diff changeset
823 ;; by `set-process-query-on-exit-flag'.
105250
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
824
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
825 (provide 'tramp-imap)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
826 ;;; tramp-imap.el ends here
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
827
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
828 ;; Ignore, for testing only.
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
829
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
830 ;;; (setq tramp-imap-subject-marker "T")
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
831 ;;; (tramp-imap-get-file-entries (tramp-dissect-file-name "/imap:yourhosthere.com:/INBOX.test/4") t)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
832 ;;; (tramp-imap-get-file-entries (tramp-dissect-file-name "/imap:yourhosthere.com:/INBOX.test/") t)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
833 ;;; (tramp-imap-get-file-entries (tramp-dissect-file-name "/imap:yourhosthere.com:/test/4") t)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
834 ;;; (tramp-imap-get-file-entries (tramp-dissect-file-name "/imap:yourhosthere.com:/test/") t)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
835 ;;; (tramp-imap-get-file-entries (tramp-dissect-file-name "/imap:yourhosthere.com:/test/welcommen") t)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
836 ;;; (tramp-imap-get-file-entries (tramp-dissect-file-name "/imap:yourhosthere.com:/test/welcommen") t t)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
837 ;;;(tramp-imap-get-file-inode "/imap:yourhosthere.com:/test/welcome")
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
838 ;;; (dired-copy-file "/etc/fstab" "/imap:yourhosthere.com:/test/welcome" t)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
839 ;;; (write-region 1 100 "/imap:yourhosthere.com:/test/welcome")
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
840 ;;; (tramp-imap-get-file "/imap:yourhosthere.com:/test/welcome" t)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
841 ;;(with-temp-buffer (insert "hello") (write-file "/imap:yourhosthere.com:/test/welcome"))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
842 ;;(with-temp-buffer (insert "hello") (write-file "/imap:yourhosthere.com:/test/welcome2"))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
843 ;;(file-writable-p "/imap:yourhosthere.com:/test/welcome2")
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
844 ;;(file-name-directory "/imap:yourhosthere.com:/test/welcome2")
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
845 ;;(with-temp-buffer (insert "hello") (delete-file "/tmp/hellotest") (write-file "/tmp/hellotest") (write-file "/imap:yourhosthere.com:/test/welcome2"))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
846 ;;;(file-exists-p "/imap:yourhosthere.com:/INBOX.test/4")
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
847 ;;;(file-attributes "/imap:yourhosthere.com:/INBOX.test/4")
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
848 ;;;(setq vec (tramp-dissect-file-name "/imap:yourhosthere.com:/INBOX.test/4"))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
849 ;;;(tramp-imap-handle-file-attributes "/imap:yourhosthere.com:/INBOX.test/4")
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
850 ;;; (tramp-imap-handle-insert-file-contents "/imap:user@yourhosthere.com:/INBOX.test/4" nil nil nil nil)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
851 ;;;(insert-file-contents "/imap:yourhosthere.com:/INBOX.test/4")
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
852 ;;;(file-attributes "/imap:yourhosthere.com:/test/welcommen")
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
853 ;;;(insert-file-contents "/imap:yourhosthere.com:/test/welcome")
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
854 ;;;(file-exists-p "/imap:yourhosthere.com:/test/welcome2")
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
855 ;;;(tramp-imap-handle-file-attributes "/imap:yourhosthere.com:/test/welcome")
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
856 ;;;(tramp-imap-get-file-inode "/imap:yourhosthere.com:/test/welcommen")
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
857 ;;;(tramp-imap-get-file-inode "/imap:yourhosthere.com:/test/welcome")
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
858 ;;;(file-writable-p "/imap:yourhosthere.com:/test/welcome2")
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
859 ;;; (delete-file "/imap:yourhosthere.com:/test/welcome")
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
860 ;;; (tramp-imap-get-file "/imap:yourhosthere.com:/test/welcommen" t)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
861 ;;; (tramp-imap-get-file "/imap:yourhosthere.com:/test/welcome" t)
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
862 ;;;(tramp-imap-file-name-mailbox (tramp-dissect-file-name "/imap:yourhosthere.com:/INBOX.test"))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
863 ;;;(tramp-imap-file-name-mailbox (tramp-dissect-file-name "/imap:yourhosthere.com:/INBOX.test/new/old"))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
864 ;;;(tramp-imap-file-name-mailbox (tramp-dissect-file-name "/imap:yourhosthere.com:/INBOX.test/new"))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
865 ;;;(tramp-imap-file-name-parse (tramp-dissect-file-name "/imap:yourhosthere.com:/INBOX.test/new/two"))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
866 ;;;(tramp-imap-file-name-parse (tramp-dissect-file-name "/imap:yourhosthere.com:/INBOX.test/new/one"))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
867 ;;;(tramp-imap-file-name-parse (tramp-dissect-file-name "/imap:yourhosthere.com:/INBOX.test"))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
868 ;;; (tramp-imap-file-name-parse (tramp-dissect-file-name "/imap:yourhosthere.com:/test/4"))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
869 ;;; (tramp-imap-file-name-parse (tramp-dissect-file-name "/imap:yourhosthere.com:/test/"))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
870 ;;; (tramp-imap-file-name-parse (tramp-dissect-file-name "/imap:yourhosthere.com:/test/welcommen"))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
871 ;;; (tramp-imap-file-name-parse (tramp-dissect-file-name "/imap:yourhosthere.com:/test/welcommen"))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
872 ;;; (tramp-imap-make-iht (tramp-dissect-file-name "/imap:yourhosthere.com:/test/welcommen"))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
873 ;;; (tramp-imap-make-iht (tramp-dissect-file-name "/imap:yourhosthere.com:/INBOX.test/4"))
ceeb0491fbb4 * net/tramp-imap.el: New package.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
874 ;;; (tramp-imap-make-iht (tramp-dissect-file-name "/imap:yourhosthere.com:/INBOX.test/4") "extra")
105377
7f4c7f5c0eba Add arch tagline
Miles Bader <miles@gnu.org>
parents: 105250
diff changeset
875
7f4c7f5c0eba Add arch tagline
Miles Bader <miles@gnu.org>
parents: 105250
diff changeset
876 ;; arch-tag: f2723749-58fb-4f29-894e-39708096e850