Mercurial > emacs
annotate lisp/dnd.el @ 112013:f11676feb984
Fix up last change.
* lisp/emacs-lisp/bytecomp.el (byte-compile-output-docform): Fix up use of
print-number-table.
* src/print.c (PRINT_NUMBER_OBJECT, PRINT_NUMBER_STATUS): Remove.
(print_preprocess): Fix handling of uninterned symbols in last change.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Wed, 22 Dec 2010 19:00:12 -0500 |
parents | 2a665aeb6cbc |
children | 417b1e4d63cd |
rev | line source |
---|---|
109259
e76d2bc9dbbe
* dnd.el, font-setting.el, x-dnd.el: Use utf-8 coding (for author name).
Glenn Morris <rgm@gnu.org>
parents:
106815
diff
changeset
|
1 ;;; dnd.el --- drag and drop support. -*- coding: utf-8 -*- |
61479 | 2 |
109259
e76d2bc9dbbe
* dnd.el, font-setting.el, x-dnd.el: Use utf-8 coding (for author name).
Glenn Morris <rgm@gnu.org>
parents:
106815
diff
changeset
|
3 ;; Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 |
e76d2bc9dbbe
* dnd.el, font-setting.el, x-dnd.el: Use utf-8 coding (for author name).
Glenn Morris <rgm@gnu.org>
parents:
106815
diff
changeset
|
4 ;; Free Software Foundation, Inc. |
61479 | 5 |
109259
e76d2bc9dbbe
* dnd.el, font-setting.el, x-dnd.el: Use utf-8 coding (for author name).
Glenn Morris <rgm@gnu.org>
parents:
106815
diff
changeset
|
6 ;; Author: Jan Djärv <jan.h.d@swipnet.se> |
61479 | 7 ;; Maintainer: FSF |
8 ;; Keywords: window, drag, drop | |
110015
280c8ae2476d
Add "Package:" file headers to denote built-in packages.
Chong Yidong <cyd@stupidchicken.com>
parents:
109259
diff
changeset
|
9 ;; Package: emacs |
61479 | 10 |
11 ;; This file is part of GNU Emacs. | |
12 | |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
91327
diff
changeset
|
13 ;; GNU Emacs is free software: you can redistribute it and/or modify |
61479 | 14 ;; it under the terms of the GNU General Public License as published by |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
91327
diff
changeset
|
15 ;; the Free Software Foundation, either version 3 of the License, or |
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
91327
diff
changeset
|
16 ;; (at your option) any later version. |
61479 | 17 |
18 ;; GNU Emacs is distributed in the hope that it will be useful, | |
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
21 ;; GNU General Public License for more details. | |
22 | |
23 ;; You should have received a copy of the GNU General Public License | |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
91327
diff
changeset
|
24 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
61479 | 25 |
26 ;;; Commentary: | |
27 | |
28 ;; This file provides the generic handling of the drop part only. | |
29 ;; Different DND backends (X11, W32, etc.) that handle the platform | |
30 ;; specific DND parts call the functions here to do final delivery of | |
31 ;; a drop. | |
32 | |
33 ;;; Code: | |
34 | |
35 ;;; Customizable variables | |
36 | |
37 | |
62311
a8f10a069bde
(dnd-protocol-alist): Add autoload.
Richard M. Stallman <rms@gnu.org>
parents:
62240
diff
changeset
|
38 ;;;###autoload |
61479 | 39 (defcustom dnd-protocol-alist |
105870
26baacb565b0
* textmodes/tex-mode.el (tex-alt-dvi-print-command)
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100908
diff
changeset
|
40 `((,(purecopy "^file:///") . dnd-open-local-file) ; XDND format. |
26baacb565b0
* textmodes/tex-mode.el (tex-alt-dvi-print-command)
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100908
diff
changeset
|
41 (,(purecopy "^file://") . dnd-open-file) ; URL with host |
26baacb565b0
* textmodes/tex-mode.el (tex-alt-dvi-print-command)
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100908
diff
changeset
|
42 (,(purecopy "^file:") . dnd-open-local-file) ; Old KDE, Motif, Sun |
26baacb565b0
* textmodes/tex-mode.el (tex-alt-dvi-print-command)
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100908
diff
changeset
|
43 (,(purecopy "^\\(https?\\|ftp\\|file\\|nfs\\)://") . dnd-open-file) |
72687
eedaad0e9f80
* dnd.el (dnd-protocol-alist): Add what url-handler-mode can handle.
Jan Djärv <jan.h.d@swipnet.se>
parents:
70760
diff
changeset
|
44 ) |
61479 | 45 |
46 "The functions to call for different protocols when a drop is made. | |
47 This variable is used by `dnd-handle-one-url' and `dnd-handle-file-name'. | |
48 The list contains of (REGEXP . FUNCTION) pairs. | |
49 The functions shall take two arguments, URL, which is the URL dropped and | |
50 ACTION which is the action to be performed for the drop (move, copy, link, | |
51 private or ask). | |
52 If no match is found here, and the value of `browse-url-browser-function' | |
53 is a pair of (REGEXP . FUNCTION), those regexps are tried for a match. | |
54 If no match is found, the URL is inserted as text by calling `dnd-insert-text'. | |
55 The function shall return the action done (move, copy, link or private) | |
56 if some action was made, or nil if the URL is ignored." | |
57 :version "22.1" | |
62240
19d278c4224b
* dnd.el (dnd-protocol-alist): Improve custom type.
Reiner Steib <Reiner.Steib@gmx.de>
parents:
61482
diff
changeset
|
58 :type '(repeat (cons (regexp) (function))) |
61479 | 59 :group 'dnd) |
60 | |
61 | |
72687
eedaad0e9f80
* dnd.el (dnd-protocol-alist): Add what url-handler-mode can handle.
Jan Djärv <jan.h.d@swipnet.se>
parents:
70760
diff
changeset
|
62 (defcustom dnd-open-remote-file-function |
eedaad0e9f80
* dnd.el (dnd-protocol-alist): Add what url-handler-mode can handle.
Jan Djärv <jan.h.d@swipnet.se>
parents:
70760
diff
changeset
|
63 (if (eq system-type 'windows-nt) |
72912
1c4d17d3a136
(dnd-open-remote-file-function): Use dnd-open-local-file on ms-windows.
Jason Rumney <jasonr@gnu.org>
parents:
72689
diff
changeset
|
64 'dnd-open-local-file |
72687
eedaad0e9f80
* dnd.el (dnd-protocol-alist): Add what url-handler-mode can handle.
Jan Djärv <jan.h.d@swipnet.se>
parents:
70760
diff
changeset
|
65 'dnd-open-remote-url) |
eedaad0e9f80
* dnd.el (dnd-protocol-alist): Add what url-handler-mode can handle.
Jan Djärv <jan.h.d@swipnet.se>
parents:
70760
diff
changeset
|
66 "The function to call when opening a file on a remote machine. |
eedaad0e9f80
* dnd.el (dnd-protocol-alist): Add what url-handler-mode can handle.
Jan Djärv <jan.h.d@swipnet.se>
parents:
70760
diff
changeset
|
67 The function will be called with two arguments; URI and ACTION. See |
eedaad0e9f80
* dnd.el (dnd-protocol-alist): Add what url-handler-mode can handle.
Jan Djärv <jan.h.d@swipnet.se>
parents:
70760
diff
changeset
|
68 `dnd-open-file' for details. |
eedaad0e9f80
* dnd.el (dnd-protocol-alist): Add what url-handler-mode can handle.
Jan Djärv <jan.h.d@swipnet.se>
parents:
70760
diff
changeset
|
69 If nil, then dragging remote files into Emacs will result in an error. |
72912
1c4d17d3a136
(dnd-open-remote-file-function): Use dnd-open-local-file on ms-windows.
Jason Rumney <jasonr@gnu.org>
parents:
72689
diff
changeset
|
70 Predefined functions are `dnd-open-local-file' and `dnd-open-remote-url'. |
1c4d17d3a136
(dnd-open-remote-file-function): Use dnd-open-local-file on ms-windows.
Jason Rumney <jasonr@gnu.org>
parents:
72689
diff
changeset
|
71 `dnd-open-local-file' attempts to open a remote file using its UNC name and |
1c4d17d3a136
(dnd-open-remote-file-function): Use dnd-open-local-file on ms-windows.
Jason Rumney <jasonr@gnu.org>
parents:
72689
diff
changeset
|
72 is the default on MS-Windows. `dnd-open-remote-url' uses `url-handler-mode' |
1c4d17d3a136
(dnd-open-remote-file-function): Use dnd-open-local-file on ms-windows.
Jason Rumney <jasonr@gnu.org>
parents:
72689
diff
changeset
|
73 and is the default except for MS-Windows." |
72687
eedaad0e9f80
* dnd.el (dnd-protocol-alist): Add what url-handler-mode can handle.
Jan Djärv <jan.h.d@swipnet.se>
parents:
70760
diff
changeset
|
74 :version "22.1" |
eedaad0e9f80
* dnd.el (dnd-protocol-alist): Add what url-handler-mode can handle.
Jan Djärv <jan.h.d@swipnet.se>
parents:
70760
diff
changeset
|
75 :type 'function |
eedaad0e9f80
* dnd.el (dnd-protocol-alist): Add what url-handler-mode can handle.
Jan Djärv <jan.h.d@swipnet.se>
parents:
70760
diff
changeset
|
76 :group 'dnd) |
eedaad0e9f80
* dnd.el (dnd-protocol-alist): Add what url-handler-mode can handle.
Jan Djärv <jan.h.d@swipnet.se>
parents:
70760
diff
changeset
|
77 |
61479 | 78 |
79 (defcustom dnd-open-file-other-window nil | |
80 "If non-nil, always use find-file-other-window to open dropped files." | |
81 :version "22.1" | |
82 :type 'boolean | |
83 :group 'dnd) | |
84 | |
85 | |
86 ;; Functions | |
87 | |
70760
eca94c558ceb
(dnd-handle-one-url): Change 3rd arg ARG to URL. Don't unescape URL.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
68651
diff
changeset
|
88 (defun dnd-handle-one-url (window action url) |
61479 | 89 "Handle one dropped url by calling the appropriate handler. |
90 The handler is first located by looking at `dnd-protocol-alist'. | |
91 If no match is found here, and the value of `browse-url-browser-function' | |
92 is a pair of (REGEXP . FUNCTION), those regexps are tried for a match. | |
93 If no match is found, just call `dnd-insert-text'. | |
73330
400487787181
* dnd.el (dnd-handle-one-url): Fix typo in doc-string.
Jan Djärv <jan.h.d@swipnet.se>
parents:
72912
diff
changeset
|
94 WINDOW is where the drop happened, ACTION is the action for the drop, |
70760
eca94c558ceb
(dnd-handle-one-url): Change 3rd arg ARG to URL. Don't unescape URL.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
68651
diff
changeset
|
95 URL is what has been dropped. |
61479 | 96 Returns ACTION." |
97 (require 'browse-url) | |
70760
eca94c558ceb
(dnd-handle-one-url): Change 3rd arg ARG to URL. Don't unescape URL.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
68651
diff
changeset
|
98 (let (ret) |
61479 | 99 (or |
100 (catch 'done | |
101 (dolist (bf dnd-protocol-alist) | |
70760
eca94c558ceb
(dnd-handle-one-url): Change 3rd arg ARG to URL. Don't unescape URL.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
68651
diff
changeset
|
102 (when (string-match (car bf) url) |
eca94c558ceb
(dnd-handle-one-url): Change 3rd arg ARG to URL. Don't unescape URL.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
68651
diff
changeset
|
103 (setq ret (funcall (cdr bf) url action)) |
61479 | 104 (throw 'done t))) |
105 nil) | |
106 (when (not (functionp browse-url-browser-function)) | |
107 (catch 'done | |
108 (dolist (bf browse-url-browser-function) | |
70760
eca94c558ceb
(dnd-handle-one-url): Change 3rd arg ARG to URL. Don't unescape URL.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
68651
diff
changeset
|
109 (when (string-match (car bf) url) |
61479 | 110 (setq ret 'private) |
70760
eca94c558ceb
(dnd-handle-one-url): Change 3rd arg ARG to URL. Don't unescape URL.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
68651
diff
changeset
|
111 (funcall (cdr bf) url action) |
61479 | 112 (throw 'done t))) |
113 nil)) | |
114 (progn | |
70760
eca94c558ceb
(dnd-handle-one-url): Change 3rd arg ARG to URL. Don't unescape URL.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
68651
diff
changeset
|
115 (dnd-insert-text window action url) |
61479 | 116 (setq ret 'private))) |
117 ret)) | |
118 | |
119 | |
120 (defun dnd-get-local-file-uri (uri) | |
121 "Return an uri converted to file:/// syntax if uri is a local file. | |
122 Return nil if URI is not a local file." | |
123 | |
124 ;; The hostname may be our hostname, in that case, convert to a local | |
125 ;; file. Otherwise return nil. TODO: How about an IP-address as hostname? | |
126 (let ((hostname (when (string-match "^file://\\([^/]*\\)" uri) | |
127 (downcase (match-string 1 uri)))) | |
128 (system-name-no-dot | |
129 (downcase (if (string-match "^[^\\.]+" system-name) | |
130 (match-string 0 system-name) | |
131 system-name)))) | |
132 (when (and hostname | |
133 (or (string-equal "localhost" hostname) | |
134 (string-equal (downcase system-name) hostname) | |
135 (string-equal system-name-no-dot hostname))) | |
136 (concat "file://" (substring uri (+ 7 (length hostname))))))) | |
137 | |
112003
2a665aeb6cbc
* dnd.el (dnd-get-local-file-name): Unhex of file name shall
Jan D. <jan.h.d@swipnet.se>
parents:
110855
diff
changeset
|
138 (defsubst dnd-unescape-uri (uri) |
2a665aeb6cbc
* dnd.el (dnd-get-local-file-name): Unhex of file name shall
Jan D. <jan.h.d@swipnet.se>
parents:
110855
diff
changeset
|
139 (replace-regexp-in-string |
2a665aeb6cbc
* dnd.el (dnd-get-local-file-name): Unhex of file name shall
Jan D. <jan.h.d@swipnet.se>
parents:
110855
diff
changeset
|
140 "%[A-Fa-f0-9][A-Fa-f0-9]" |
2a665aeb6cbc
* dnd.el (dnd-get-local-file-name): Unhex of file name shall
Jan D. <jan.h.d@swipnet.se>
parents:
110855
diff
changeset
|
141 (lambda (arg) |
2a665aeb6cbc
* dnd.el (dnd-get-local-file-name): Unhex of file name shall
Jan D. <jan.h.d@swipnet.se>
parents:
110855
diff
changeset
|
142 (let ((str (make-string 1 0))) |
2a665aeb6cbc
* dnd.el (dnd-get-local-file-name): Unhex of file name shall
Jan D. <jan.h.d@swipnet.se>
parents:
110855
diff
changeset
|
143 (aset str 0 (string-to-number (substring arg 1) 16)) |
2a665aeb6cbc
* dnd.el (dnd-get-local-file-name): Unhex of file name shall
Jan D. <jan.h.d@swipnet.se>
parents:
110855
diff
changeset
|
144 str)) |
2a665aeb6cbc
* dnd.el (dnd-get-local-file-name): Unhex of file name shall
Jan D. <jan.h.d@swipnet.se>
parents:
110855
diff
changeset
|
145 uri t t)) |
2a665aeb6cbc
* dnd.el (dnd-get-local-file-name): Unhex of file name shall
Jan D. <jan.h.d@swipnet.se>
parents:
110855
diff
changeset
|
146 |
2a665aeb6cbc
* dnd.el (dnd-get-local-file-name): Unhex of file name shall
Jan D. <jan.h.d@swipnet.se>
parents:
110855
diff
changeset
|
147 ;; http://lists.gnu.org/archive/html/emacs-devel/2006-05/msg01060.html |
61479 | 148 (defun dnd-get-local-file-name (uri &optional must-exist) |
149 "Return file name converted from file:/// or file: syntax. | |
150 URI is the uri for the file. If MUST-EXIST is given and non-nil, | |
151 only return non-nil if the file exists. | |
152 Return nil if URI is not a local file." | |
153 (let ((f (cond ((string-match "^file:///" uri) ; XDND format. | |
154 (substring uri (1- (match-end 0)))) | |
155 ((string-match "^file:" uri) ; Old KDE, Motif, Sun | |
156 (substring uri (match-end 0)))))) | |
112003
2a665aeb6cbc
* dnd.el (dnd-get-local-file-name): Unhex of file name shall
Jan D. <jan.h.d@swipnet.se>
parents:
110855
diff
changeset
|
157 (and f (setq f (decode-coding-string (dnd-unescape-uri f) |
2a665aeb6cbc
* dnd.el (dnd-get-local-file-name): Unhex of file name shall
Jan D. <jan.h.d@swipnet.se>
parents:
110855
diff
changeset
|
158 (or file-name-coding-system |
2a665aeb6cbc
* dnd.el (dnd-get-local-file-name): Unhex of file name shall
Jan D. <jan.h.d@swipnet.se>
parents:
110855
diff
changeset
|
159 default-file-name-coding-system)))) |
2a665aeb6cbc
* dnd.el (dnd-get-local-file-name): Unhex of file name shall
Jan D. <jan.h.d@swipnet.se>
parents:
110855
diff
changeset
|
160 (when (and f must-exist (not (file-readable-p f))) |
2a665aeb6cbc
* dnd.el (dnd-get-local-file-name): Unhex of file name shall
Jan D. <jan.h.d@swipnet.se>
parents:
110855
diff
changeset
|
161 (setq f nil)) |
110839
018f0b2e8f23
Fix return value of dnd-get-local-file-name (Bug#7090).
Chong Yidong <cyd@stupidchicken.com>
parents:
109259
diff
changeset
|
162 f)) |
61479 | 163 |
164 (defun dnd-open-local-file (uri action) | |
165 "Open a local file. | |
166 The file is opened in the current window, or a new window if | |
167 `dnd-open-file-other-window' is set. URI is the url for the file, | |
168 and must have the format file:file-name or file:///file-name. | |
72912
1c4d17d3a136
(dnd-open-remote-file-function): Use dnd-open-local-file on ms-windows.
Jason Rumney <jasonr@gnu.org>
parents:
72689
diff
changeset
|
169 The last / in file:/// is part of the file name. If the system |
1c4d17d3a136
(dnd-open-remote-file-function): Use dnd-open-local-file on ms-windows.
Jason Rumney <jasonr@gnu.org>
parents:
72689
diff
changeset
|
170 natively supports unc file names, then remote urls of the form |
1c4d17d3a136
(dnd-open-remote-file-function): Use dnd-open-local-file on ms-windows.
Jason Rumney <jasonr@gnu.org>
parents:
72689
diff
changeset
|
171 file://server-name/file-name will also be handled by this function. |
1c4d17d3a136
(dnd-open-remote-file-function): Use dnd-open-local-file on ms-windows.
Jason Rumney <jasonr@gnu.org>
parents:
72689
diff
changeset
|
172 An alternative for systems that do not support unc file names is |
1c4d17d3a136
(dnd-open-remote-file-function): Use dnd-open-local-file on ms-windows.
Jason Rumney <jasonr@gnu.org>
parents:
72689
diff
changeset
|
173 `dnd-open-remote-url'. ACTION is ignored." |
61479 | 174 |
175 (let* ((f (dnd-get-local-file-name uri t))) | |
176 (if (and f (file-readable-p f)) | |
177 (progn | |
178 (if dnd-open-file-other-window | |
179 (find-file-other-window f) | |
180 (find-file f)) | |
181 'private) | |
182 (error "Can not read %s" uri)))) | |
183 | |
72687
eedaad0e9f80
* dnd.el (dnd-protocol-alist): Add what url-handler-mode can handle.
Jan Djärv <jan.h.d@swipnet.se>
parents:
70760
diff
changeset
|
184 (defun dnd-open-remote-url (uri action) |
eedaad0e9f80
* dnd.el (dnd-protocol-alist): Add what url-handler-mode can handle.
Jan Djärv <jan.h.d@swipnet.se>
parents:
70760
diff
changeset
|
185 "Open a remote file with `find-file' and `url-handler-mode'. |
eedaad0e9f80
* dnd.el (dnd-protocol-alist): Add what url-handler-mode can handle.
Jan Djärv <jan.h.d@swipnet.se>
parents:
70760
diff
changeset
|
186 Turns `url-handler-mode' on if not on before. The file is opened in the |
eedaad0e9f80
* dnd.el (dnd-protocol-alist): Add what url-handler-mode can handle.
Jan Djärv <jan.h.d@swipnet.se>
parents:
70760
diff
changeset
|
187 current window, or a new window if `dnd-open-file-other-window' is set. |
eedaad0e9f80
* dnd.el (dnd-protocol-alist): Add what url-handler-mode can handle.
Jan Djärv <jan.h.d@swipnet.se>
parents:
70760
diff
changeset
|
188 URI is the url for the file. ACTION is ignored." |
eedaad0e9f80
* dnd.el (dnd-protocol-alist): Add what url-handler-mode can handle.
Jan Djärv <jan.h.d@swipnet.se>
parents:
70760
diff
changeset
|
189 (progn |
72689
3ff56e45c67f
* dnd.el: Fix bootstrapping
Jan Djärv <jan.h.d@swipnet.se>
parents:
72687
diff
changeset
|
190 (require 'url-handlers) |
72687
eedaad0e9f80
* dnd.el (dnd-protocol-alist): Add what url-handler-mode can handle.
Jan Djärv <jan.h.d@swipnet.se>
parents:
70760
diff
changeset
|
191 (or url-handler-mode (url-handler-mode)) |
eedaad0e9f80
* dnd.el (dnd-protocol-alist): Add what url-handler-mode can handle.
Jan Djärv <jan.h.d@swipnet.se>
parents:
70760
diff
changeset
|
192 (if dnd-open-file-other-window |
eedaad0e9f80
* dnd.el (dnd-protocol-alist): Add what url-handler-mode can handle.
Jan Djärv <jan.h.d@swipnet.se>
parents:
70760
diff
changeset
|
193 (find-file-other-window uri) |
eedaad0e9f80
* dnd.el (dnd-protocol-alist): Add what url-handler-mode can handle.
Jan Djärv <jan.h.d@swipnet.se>
parents:
70760
diff
changeset
|
194 (find-file uri)) |
eedaad0e9f80
* dnd.el (dnd-protocol-alist): Add what url-handler-mode can handle.
Jan Djärv <jan.h.d@swipnet.se>
parents:
70760
diff
changeset
|
195 'private)) |
eedaad0e9f80
* dnd.el (dnd-protocol-alist): Add what url-handler-mode can handle.
Jan Djärv <jan.h.d@swipnet.se>
parents:
70760
diff
changeset
|
196 |
eedaad0e9f80
* dnd.el (dnd-protocol-alist): Add what url-handler-mode can handle.
Jan Djärv <jan.h.d@swipnet.se>
parents:
70760
diff
changeset
|
197 |
61479 | 198 (defun dnd-open-file (uri action) |
199 "Open a local or remote file. | |
200 The file is opened in the current window, or a new window if | |
201 `dnd-open-file-other-window' is set. URI is the url for the file, | |
202 and must have the format file://hostname/file-name. ACTION is ignored. | |
203 The last / in file://hostname/ is part of the file name." | |
204 | |
205 ;; The hostname may be our hostname, in that case, convert to a local | |
206 ;; file. Otherwise return nil. | |
207 (let ((local-file (dnd-get-local-file-uri uri))) | |
208 (if local-file (dnd-open-local-file local-file action) | |
72687
eedaad0e9f80
* dnd.el (dnd-protocol-alist): Add what url-handler-mode can handle.
Jan Djärv <jan.h.d@swipnet.se>
parents:
70760
diff
changeset
|
209 (if dnd-open-remote-file-function |
eedaad0e9f80
* dnd.el (dnd-protocol-alist): Add what url-handler-mode can handle.
Jan Djärv <jan.h.d@swipnet.se>
parents:
70760
diff
changeset
|
210 (funcall dnd-open-remote-file-function uri action) |
eedaad0e9f80
* dnd.el (dnd-protocol-alist): Add what url-handler-mode can handle.
Jan Djärv <jan.h.d@swipnet.se>
parents:
70760
diff
changeset
|
211 (error "Remote files not supported"))))) |
61479 | 212 |
213 | |
214 (defun dnd-insert-text (window action text) | |
215 "Insert text at point or push to the kill ring if buffer is read only. | |
216 TEXT is the text as a string, WINDOW is the window where the drop happened." | |
217 (if (or buffer-read-only | |
218 (not (windowp window))) | |
219 (progn | |
220 (kill-new text) | |
65582
4d1085b02d64
Message format spec fixes (1)
Deepak Goel <deego@gnufans.org>
parents:
64762
diff
changeset
|
221 (message "%s" |
61479 | 222 (substitute-command-keys |
223 "The dropped text can be accessed with \\[yank]"))) | |
224 (insert text)) | |
225 action) | |
226 | |
227 | |
228 (provide 'dnd) | |
229 | |
61482 | 230 ;; arch-tag: 0472f6a5-2e8f-4304-9e44-1a0877c771b7 |
61479 | 231 ;;; dnd.el ends here |