Mercurial > emacs
annotate lisp/dnd.el @ 110523:a5ad4f188e19
Synch Semantic to CEDET 1.0.
Move CEDET ChangeLog entries to new file lisp/cedet/ChangeLog.
* semantic.el (semantic-version): Update to 2.0.
(semantic-mode-map): Add "," and "m" bindings.
(navigate-menu): Update.
* semantic/symref.el (semantic-symref-calculate-rootdir):
New function.
(semantic-symref-detect-symref-tool): Use it.
* semantic/symref/grep.el (semantic-symref-grep-shell): New var.
(semantic-symref-perform-search): Use it. Calculate root dir with
semantic-symref-calculate-rootdir.
(semantic-symref-derive-find-filepatterns): Improve error message.
* semantic/symref/list.el
(semantic-symref-results-mode-map): New bindings.
(semantic-symref-auto-expand-results): New option.
(semantic-symref-results-dump): Obey auto-expand.
(semantic-symref-list-expand-all, semantic-symref-regexp)
(semantic-symref-list-contract-all)
(semantic-symref-list-map-open-hits)
(semantic-symref-list-update-open-hits)
(semantic-symref-list-create-macro-on-open-hit)
(semantic-symref-list-call-macro-on-open-hits): New functions.
(semantic-symref-list-menu-entries)
(semantic-symref-list-menu): New vars.
(semantic-symref-list-map-open-hits): Move cursor to beginning of
match before calling the mapped function.
* semantic/doc.el
(semantic-documentation-comment-preceeding-tag): Do nothing if the
mode doesn't provide comment-start-skip.
* semantic/scope.el
(semantic-analyze-scope-nested-tags-default): Strip duplicates.
(semantic-analyze-scoped-inherited-tag-map): Take the tag we are
looking for as part of the scoped tags list.
* semantic/html.el (semantic-default-html-setup): Add
senator-step-at-tag-classes.
* semantic/decorate/include.el
(semantic-decoration-on-unknown-includes): Change light bgcolor.
(semantic-decoration-on-includes-highlight-default): Check that
the include tag has a postion.
* semantic/complete.el (semantic-collector-local-members):
(semantic-complete-read-tag-local-members)
(semantic-complete-jump-local-members): New class and functions.
(semantic-complete-self-insert): Save excursion before completing.
* semantic/analyze/complete.el
(semantic-analyze-possible-completions-default): If no completions
are found, return the raw by-name-only completion list. Add FLAGS
arguments. Add support for 'no-tc (type constraint) and
'no-unique, or no stripping duplicates.
(semantic-analyze-possible-completions-default): Add FLAGS arg.
* semantic/util-modes.el
(semantic-stickyfunc-show-only-functions-p): New option.
(semantic-stickyfunc-fetch-stickyline): Don't show stickytext for
the very first line in a buffer.
* semantic/util.el (semantic-hack-search)
(semantic-recursive-find-nonterminal-by-name)
(semantic-current-tag-interactive): Deleted.
(semantic-describe-buffer): Fix expand-nonterminal. Add
lex-syntax-mods, type relation separator char, and command
separation char.
(semantic-sanity-check): Only message if called interactively.
* semantic/tag.el (semantic-tag-deep-copy-one-tag): Copy the
:filename property and the tag position.
* semantic/lex-spp.el (semantic-lex-spp-lex-text-string):
Add recursion limit.
* semantic/imenu.el (semantic-imenu-bucketize-type-members):
Make this buffer local, not the obsoleted variable.
* semantic/idle.el: Add breadcrumbs support.
(semantic-idle-summary-current-symbol-info-default)
(semantic-idle-tag-highlight)
(semantic-idle-completion-list-default): Use
semanticdb-without-unloaded-file-searches for speed, and to
conform to the controls that specify if the idle timer is supposed
to be parsing unparsed includes.
(semantic-idle-symbol-highlight-face)
(semantic-idle-symbol-maybe-highlight): Rename from *-summary-*.
Callers changed.
(semantic-idle-work-parse-neighboring-files-flag): Default to nil.
(semantic-idle-work-update-headers-flag): New var.
(semantic-idle-work-for-one-buffer): Use it.
(semantic-idle-local-symbol-highlight): Rename from
semantic-idle-tag-highlight.
(semantic-idle-truncate-long-summaries): New option.
* semantic/ia.el (semantic-ia-cache)
(semantic-ia-get-completions): Deleted. Callers changed.
(semantic-ia-show-variants): New command.
(semantic-ia-show-doc): If doc is empty, don't make a temp buffer.
(semantic-ia-show-summary): If there isn't anything to show, say so.
* semantic/grammar.el (semantic-grammar-create-package):
Save the buffer even in batch mode.
* semantic/fw.el
(semanticdb-without-unloaded-file-searches): New macro.
* semantic/dep.el (semantic-dependency-find-file-on-path):
Fix case dereferencing ede-object when it is a list.
* semantic/db-typecache.el (semanticdb-expand-nested-tag)
(semanticdb-typecache-faux-namespace): New functions.
(semanticdb-typecache-file-tags)
(semanticdb-typecache-merge-streams): Use them.
(semanticdb-typecache-file-tags): When deriving tags from a file,
give the mode a chance to monkey with the tag copy.
(semanticdb-typecache-find-default): Wrap find in save-excursion.
(semanticdb-typecache-find-by-name-helper): Merge found names down.
* semantic/db-global.el
(semanticdb-enable-gnu-global-in-buffer): Don't show messages if
GNU Global is not available and we don't want to throw an error.
* semantic/db-find.el (semanticdb-find-result-nth-in-buffer):
When trying to normalize the tag to a buffer, don't error if
set-buffer method doesn't exist.
* semantic/db-file.el (semanticdb-save-db): Simplify msg.
* semantic/db.el (semanticdb-refresh-table): If forcing a
refresh on a file not in a buffer, use semantic-find-file-noselect
and delete the buffer after use.
(semanticdb-current-database-list): When calculating root via
hooks, force it through true-filename and skip the list of
possible roots.
* semantic/ctxt.el (semantic-ctxt-imported-packages): New.
* semantic/analyze/debug.el
(semantic-analyzer-debug-insert-tag): Reset standard output to
current buffer.
(semantic-analyzer-debug-global-symbol)
(semantic-analyzer-debug-missing-innertype): Change "prefix" to
"symbol" in messages.
* semantic/analyze/refs.el: (semantic-analyze-refs-impl)
(semantic-analyze-refs-proto): When calculating value, make sure
the found tag is 'similar' to the originating tag.
(semantic--analyze-refs-find-tags-with-parent): Attempt to
identify matches via imported symbols of parents.
(semantic--analyze-refs-full-lookup-with-parents): Do a deep
search during the brute search.
* semantic/analyze.el
(semantic-analyze-find-tag-sequence-default): Be robust to
calculated scopes being nil.
* semantic/bovine/c.el (semantic-c-describe-environment): Add
project macro symbol array.
(semantic-c-parse-lexical-token): Add recursion limit.
(semantic-ctxt-imported-packages, semanticdb-expand-nested-tag):
New overrides.
(semantic-expand-c-tag-namelist): Split a full type from a typedef
out to its own tag.
(semantic-expand-c-tag-namelist): Do not split out a typedef'd
inline type if it is an anonymous type.
(semantic-c-reconstitute-token): Use the optional initializers as
a clue that some function is probably a constructor. When
defining the type of these constructors, split the parent name,
and use only the class part, if applicable.
* semantic/bovine/c-by.el:
* semantic/wisent/python-wy.el: Regenerate.
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Sat, 18 Sep 2010 22:49:54 -0400 |
parents | e76d2bc9dbbe |
children | 280c8ae2476d 018f0b2e8f23 |
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 | |
9 | |
10 ;; This file is part of GNU Emacs. | |
11 | |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
91327
diff
changeset
|
12 ;; GNU Emacs is free software: you can redistribute it and/or modify |
61479 | 13 ;; 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
|
14 ;; 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
|
15 ;; (at your option) any later version. |
61479 | 16 |
17 ;; GNU Emacs is distributed in the hope that it will be useful, | |
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
20 ;; GNU General Public License for more details. | |
21 | |
22 ;; 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
|
23 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
61479 | 24 |
25 ;;; Commentary: | |
26 | |
27 ;; This file provides the generic handling of the drop part only. | |
28 ;; Different DND backends (X11, W32, etc.) that handle the platform | |
29 ;; specific DND parts call the functions here to do final delivery of | |
30 ;; a drop. | |
31 | |
32 ;;; Code: | |
33 | |
34 ;;; Customizable variables | |
35 | |
36 | |
62311
a8f10a069bde
(dnd-protocol-alist): Add autoload.
Richard M. Stallman <rms@gnu.org>
parents:
62240
diff
changeset
|
37 ;;;###autoload |
61479 | 38 (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
|
39 `((,(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
|
40 (,(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
|
41 (,(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
|
42 (,(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
|
43 ) |
61479 | 44 |
45 "The functions to call for different protocols when a drop is made. | |
46 This variable is used by `dnd-handle-one-url' and `dnd-handle-file-name'. | |
47 The list contains of (REGEXP . FUNCTION) pairs. | |
48 The functions shall take two arguments, URL, which is the URL dropped and | |
49 ACTION which is the action to be performed for the drop (move, copy, link, | |
50 private or ask). | |
51 If no match is found here, and the value of `browse-url-browser-function' | |
52 is a pair of (REGEXP . FUNCTION), those regexps are tried for a match. | |
53 If no match is found, the URL is inserted as text by calling `dnd-insert-text'. | |
54 The function shall return the action done (move, copy, link or private) | |
55 if some action was made, or nil if the URL is ignored." | |
56 :version "22.1" | |
62240
19d278c4224b
* dnd.el (dnd-protocol-alist): Improve custom type.
Reiner Steib <Reiner.Steib@gmx.de>
parents:
61482
diff
changeset
|
57 :type '(repeat (cons (regexp) (function))) |
61479 | 58 :group 'dnd) |
59 | |
60 | |
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
|
61 (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
|
62 (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
|
63 '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
|
64 '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
|
65 "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
|
66 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
|
67 `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
|
68 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
|
69 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
|
70 `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
|
71 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
|
72 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
|
73 :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
|
74 :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
|
75 :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
|
76 |
61479 | 77 |
78 (defcustom dnd-open-file-other-window nil | |
79 "If non-nil, always use find-file-other-window to open dropped files." | |
80 :version "22.1" | |
81 :type 'boolean | |
82 :group 'dnd) | |
83 | |
84 | |
85 ;; Functions | |
86 | |
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
|
87 (defun dnd-handle-one-url (window action url) |
61479 | 88 "Handle one dropped url by calling the appropriate handler. |
89 The handler is first located by looking at `dnd-protocol-alist'. | |
90 If no match is found here, and the value of `browse-url-browser-function' | |
91 is a pair of (REGEXP . FUNCTION), those regexps are tried for a match. | |
92 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
|
93 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
|
94 URL is what has been dropped. |
61479 | 95 Returns ACTION." |
96 (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
|
97 (let (ret) |
61479 | 98 (or |
99 (catch 'done | |
100 (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
|
101 (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
|
102 (setq ret (funcall (cdr bf) url action)) |
61479 | 103 (throw 'done t))) |
104 nil) | |
105 (when (not (functionp browse-url-browser-function)) | |
106 (catch 'done | |
107 (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
|
108 (when (string-match (car bf) url) |
61479 | 109 (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
|
110 (funcall (cdr bf) url action) |
61479 | 111 (throw 'done t))) |
112 nil)) | |
113 (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
|
114 (dnd-insert-text window action url) |
61479 | 115 (setq ret 'private))) |
116 ret)) | |
117 | |
118 | |
119 (defun dnd-get-local-file-uri (uri) | |
120 "Return an uri converted to file:/// syntax if uri is a local file. | |
121 Return nil if URI is not a local file." | |
122 | |
123 ;; The hostname may be our hostname, in that case, convert to a local | |
124 ;; file. Otherwise return nil. TODO: How about an IP-address as hostname? | |
125 (let ((hostname (when (string-match "^file://\\([^/]*\\)" uri) | |
126 (downcase (match-string 1 uri)))) | |
127 (system-name-no-dot | |
128 (downcase (if (string-match "^[^\\.]+" system-name) | |
129 (match-string 0 system-name) | |
130 system-name)))) | |
131 (when (and hostname | |
132 (or (string-equal "localhost" hostname) | |
133 (string-equal (downcase system-name) hostname) | |
134 (string-equal system-name-no-dot hostname))) | |
135 (concat "file://" (substring uri (+ 7 (length hostname))))))) | |
136 | |
137 (defun dnd-get-local-file-name (uri &optional must-exist) | |
138 "Return file name converted from file:/// or file: syntax. | |
139 URI is the uri for the file. If MUST-EXIST is given and non-nil, | |
140 only return non-nil if the file exists. | |
141 Return nil if URI is not a local file." | |
142 (let ((f (cond ((string-match "^file:///" uri) ; XDND format. | |
143 (substring uri (1- (match-end 0)))) | |
144 ((string-match "^file:" uri) ; Old KDE, Motif, Sun | |
145 (substring uri (match-end 0)))))) | |
146 (when (and f must-exist) | |
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
|
147 (setq f (replace-regexp-in-string |
77132
4d39a7fbbc3c
(dnd-get-local-file-name): Decode both upper and lower
Jason Rumney <jasonr@gnu.org>
parents:
75347
diff
changeset
|
148 "%[A-Fa-f0-9][A-Fa-f0-9]" |
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
|
149 (lambda (arg) |
90603
d383ea975152
(dnd-get-local-file-name): Give a unibyte string to
Kenichi Handa <handa@m17n.org>
parents:
72912
diff
changeset
|
150 (let ((str (make-string 1 0))) |
d383ea975152
(dnd-get-local-file-name): Give a unibyte string to
Kenichi Handa <handa@m17n.org>
parents:
72912
diff
changeset
|
151 (aset str 0 (string-to-number (substring arg 1) 16)) |
d383ea975152
(dnd-get-local-file-name): Give a unibyte string to
Kenichi Handa <handa@m17n.org>
parents:
72912
diff
changeset
|
152 str)) |
78061
08057013c059
(dnd-get-local-file-name): Set fixcase to t in call to
Jan Djärv <jan.h.d@swipnet.se>
parents:
77132
diff
changeset
|
153 f t t)) |
61479 | 154 (let* ((decoded-f (decode-coding-string |
155 f | |
156 (or file-name-coding-system | |
157 default-file-name-coding-system))) | |
158 (try-f (if (file-readable-p decoded-f) decoded-f f))) | |
159 (when (file-readable-p try-f) try-f))))) | |
160 | |
161 | |
162 (defun dnd-open-local-file (uri action) | |
163 "Open a local file. | |
164 The file is opened in the current window, or a new window if | |
165 `dnd-open-file-other-window' is set. URI is the url for the file, | |
166 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
|
167 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
|
168 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
|
169 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
|
170 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
|
171 `dnd-open-remote-url'. ACTION is ignored." |
61479 | 172 |
173 (let* ((f (dnd-get-local-file-name uri t))) | |
174 (if (and f (file-readable-p f)) | |
175 (progn | |
176 (if dnd-open-file-other-window | |
177 (find-file-other-window f) | |
178 (find-file f)) | |
179 'private) | |
180 (error "Can not read %s" uri)))) | |
181 | |
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
|
182 (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
|
183 "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
|
184 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
|
185 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
|
186 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
|
187 (progn |
72689
3ff56e45c67f
* dnd.el: Fix bootstrapping
Jan Djärv <jan.h.d@swipnet.se>
parents:
72687
diff
changeset
|
188 (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
|
189 (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
|
190 (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
|
191 (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
|
192 (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
|
193 '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
|
194 |
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 |
61479 | 196 (defun dnd-open-file (uri action) |
197 "Open a local or remote file. | |
198 The file is opened in the current window, or a new window if | |
199 `dnd-open-file-other-window' is set. URI is the url for the file, | |
200 and must have the format file://hostname/file-name. ACTION is ignored. | |
201 The last / in file://hostname/ is part of the file name." | |
202 | |
203 ;; The hostname may be our hostname, in that case, convert to a local | |
204 ;; file. Otherwise return nil. | |
205 (let ((local-file (dnd-get-local-file-uri uri))) | |
206 (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
|
207 (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
|
208 (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
|
209 (error "Remote files not supported"))))) |
61479 | 210 |
211 | |
212 (defun dnd-insert-text (window action text) | |
213 "Insert text at point or push to the kill ring if buffer is read only. | |
214 TEXT is the text as a string, WINDOW is the window where the drop happened." | |
215 (if (or buffer-read-only | |
216 (not (windowp window))) | |
217 (progn | |
218 (kill-new text) | |
65582
4d1085b02d64
Message format spec fixes (1)
Deepak Goel <deego@gnufans.org>
parents:
64762
diff
changeset
|
219 (message "%s" |
61479 | 220 (substitute-command-keys |
221 "The dropped text can be accessed with \\[yank]"))) | |
222 (insert text)) | |
223 action) | |
224 | |
225 | |
226 (provide 'dnd) | |
227 | |
61482 | 228 ;; arch-tag: 0472f6a5-2e8f-4304-9e44-1a0877c771b7 |
61479 | 229 ;;; dnd.el ends here |