annotate lisp/dnd.el @ 62412:6ac7ed8e212b

(makefile-dependency-regex): Turn it into a var, and refine it to mask one more level of nested vars. (makefile-rule-action-regex): Turn it into a var, and refine it so it recognizes backslashed continuation lines as belonging to the same command. (makefile-macroassign-regex): Refine it so it recognizes backslashed continuation lines as belonging to the same command. (makefile-var-use-regex): Don't look at the next char, because it might be the same one to be skipped by the initial [^$], leading to an overlooked variable use. (makefile-make-font-lock-keywords): Remove two parameters, which are now variables that some of the modes set locally. Handle dependency and rule action matching through functions, because regexps alone match too often. Dependency matching now comes last, so it can check, whether a colon already matched something else. (makefile-mode): Inform that font-lock improves makefile parsing capabilities. (makefile-match-dependency, makefile-match-action): New functions.
author Daniel Pfeiffer <occitan@esperanto.org>
date Mon, 16 May 2005 20:13:09 +0000
parents a8f10a069bde
children 6fb026ad601f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
61479
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1 ;;; dnd.el --- drag and drop support.
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3 ;; Copyright (C) 2005
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4 ;; Free Software Foundation, Inc.
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
5
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
6 ;; Author: Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
7 ;; Maintainer: FSF
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
8 ;; Keywords: window, drag, drop
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
9
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
10 ;; This file is part of GNU Emacs.
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
11
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
12 ;; GNU Emacs is free software; you can redistribute it and/or modify
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
13 ;; it under the terms of the GNU General Public License as published by
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
14 ;; the Free Software Foundation; either version 2, or (at your option)
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
15 ;; any later version.
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
16
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
17 ;; GNU Emacs is distributed in the hope that it will be useful,
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
20 ;; GNU General Public License for more details.
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
21
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
22 ;; You should have received a copy of the GNU General Public License
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
24 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
25 ;; Boston, MA 02111-1307, USA.
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
26
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
27 ;;; Commentary:
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
28
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
29 ;; This file provides the generic handling of the drop part only.
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
30 ;; Different DND backends (X11, W32, etc.) that handle the platform
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
31 ;; specific DND parts call the functions here to do final delivery of
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
32 ;; a drop.
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
33
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
34 ;;; Code:
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
35
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
36 ;;; Customizable variables
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
37
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
38
62311
a8f10a069bde (dnd-protocol-alist): Add autoload.
Richard M. Stallman <rms@gnu.org>
parents: 62240
diff changeset
39 ;;;###autoload
61479
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
40 (defcustom dnd-protocol-alist
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
41 '(
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
42 ("^file:///" . dnd-open-local-file) ; XDND format.
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
43 ("^file://" . dnd-open-file) ; URL with host
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
44 ("^file:" . dnd-open-local-file) ; Old KDE, Motif, Sun
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
45 )
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
46
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
47 "The functions to call for different protocols when a drop is made.
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
48 This variable is used by `dnd-handle-one-url' and `dnd-handle-file-name'.
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
49 The list contains of (REGEXP . FUNCTION) pairs.
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
50 The functions shall take two arguments, URL, which is the URL dropped and
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
51 ACTION which is the action to be performed for the drop (move, copy, link,
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
52 private or ask).
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
53 If no match is found here, and the value of `browse-url-browser-function'
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
54 is a pair of (REGEXP . FUNCTION), those regexps are tried for a match.
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
55 If no match is found, the URL is inserted as text by calling `dnd-insert-text'.
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
56 The function shall return the action done (move, copy, link or private)
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
57 if some action was made, or nil if the URL is ignored."
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
58 :version "22.1"
62240
19d278c4224b * dnd.el (dnd-protocol-alist): Improve custom type.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 61482
diff changeset
59 :type '(repeat (cons (regexp) (function)))
61479
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
60 :group 'dnd)
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
61
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
62
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
63
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
64 (defcustom dnd-open-file-other-window nil
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
65 "If non-nil, always use find-file-other-window to open dropped files."
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
66 :version "22.1"
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
67 :type 'boolean
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
68 :group 'dnd)
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
69
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
70
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
71 ;; Functions
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
72
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
73 (defun dnd-handle-one-url (window action arg)
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
74 "Handle one dropped url by calling the appropriate handler.
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
75 The handler is first located by looking at `dnd-protocol-alist'.
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
76 If no match is found here, and the value of `browse-url-browser-function'
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
77 is a pair of (REGEXP . FUNCTION), those regexps are tried for a match.
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
78 If no match is found, just call `dnd-insert-text'.
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
79 WINDOW is where the drop happend, ACTION is the action for the drop,
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
80 ARG is the URL that has been dropped.
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
81 Returns ACTION."
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
82 (require 'browse-url)
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
83 (let* ((uri (replace-regexp-in-string
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
84 "%[A-Z0-9][A-Z0-9]"
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
85 (lambda (arg)
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
86 (format "%c" (string-to-number (substring arg 1) 16)))
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
87 arg))
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
88 ret)
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
89 (or
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
90 (catch 'done
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
91 (dolist (bf dnd-protocol-alist)
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
92 (when (string-match (car bf) uri)
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
93 (setq ret (funcall (cdr bf) uri action))
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
94 (throw 'done t)))
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
95 nil)
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
96 (when (not (functionp browse-url-browser-function))
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
97 (catch 'done
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
98 (dolist (bf browse-url-browser-function)
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
99 (when (string-match (car bf) uri)
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
100 (setq ret 'private)
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
101 (funcall (cdr bf) uri action)
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
102 (throw 'done t)))
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
103 nil))
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
104 (progn
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
105 (dnd-insert-text window action uri)
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
106 (setq ret 'private)))
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
107 ret))
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
108
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
109
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
110 (defun dnd-get-local-file-uri (uri)
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
111 "Return an uri converted to file:/// syntax if uri is a local file.
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
112 Return nil if URI is not a local file."
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
113
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
114 ;; The hostname may be our hostname, in that case, convert to a local
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
115 ;; file. Otherwise return nil. TODO: How about an IP-address as hostname?
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
116 (let ((hostname (when (string-match "^file://\\([^/]*\\)" uri)
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
117 (downcase (match-string 1 uri))))
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
118 (system-name-no-dot
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
119 (downcase (if (string-match "^[^\\.]+" system-name)
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
120 (match-string 0 system-name)
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
121 system-name))))
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
122 (when (and hostname
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
123 (or (string-equal "localhost" hostname)
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
124 (string-equal (downcase system-name) hostname)
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
125 (string-equal system-name-no-dot hostname)))
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
126 (concat "file://" (substring uri (+ 7 (length hostname)))))))
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
127
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
128 (defun dnd-get-local-file-name (uri &optional must-exist)
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
129 "Return file name converted from file:/// or file: syntax.
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
130 URI is the uri for the file. If MUST-EXIST is given and non-nil,
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
131 only return non-nil if the file exists.
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
132 Return nil if URI is not a local file."
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
133 (let ((f (cond ((string-match "^file:///" uri) ; XDND format.
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
134 (substring uri (1- (match-end 0))))
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
135 ((string-match "^file:" uri) ; Old KDE, Motif, Sun
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
136 (substring uri (match-end 0))))))
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
137 (when (and f must-exist)
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
138 (let* ((decoded-f (decode-coding-string
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
139 f
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
140 (or file-name-coding-system
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
141 default-file-name-coding-system)))
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
142 (try-f (if (file-readable-p decoded-f) decoded-f f)))
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
143 (when (file-readable-p try-f) try-f)))))
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
144
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
145
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
146 (defun dnd-open-local-file (uri action)
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
147 "Open a local file.
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
148 The file is opened in the current window, or a new window if
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
149 `dnd-open-file-other-window' is set. URI is the url for the file,
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
150 and must have the format file:file-name or file:///file-name.
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
151 The last / in file:/// is part of the file name. ACTION is ignored."
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
152
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
153 (let* ((f (dnd-get-local-file-name uri t)))
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
154 (if (and f (file-readable-p f))
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
155 (progn
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
156 (if dnd-open-file-other-window
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
157 (find-file-other-window f)
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
158 (find-file f))
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
159 'private)
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
160 (error "Can not read %s" uri))))
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
161
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
162 (defun dnd-open-file (uri action)
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
163 "Open a local or remote file.
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
164 The file is opened in the current window, or a new window if
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
165 `dnd-open-file-other-window' is set. URI is the url for the file,
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
166 and must have the format file://hostname/file-name. ACTION is ignored.
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
167 The last / in file://hostname/ is part of the file name."
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
168
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
169 ;; The hostname may be our hostname, in that case, convert to a local
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
170 ;; file. Otherwise return nil.
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
171 (let ((local-file (dnd-get-local-file-uri uri)))
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
172 (if local-file (dnd-open-local-file local-file action)
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
173 (error "Remote files not supported"))))
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
174
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
175
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
176 (defun dnd-insert-text (window action text)
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
177 "Insert text at point or push to the kill ring if buffer is read only.
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
178 TEXT is the text as a string, WINDOW is the window where the drop happened."
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
179 (if (or buffer-read-only
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
180 (not (windowp window)))
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
181 (progn
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
182 (kill-new text)
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
183 (message
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
184 (substitute-command-keys
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
185 "The dropped text can be accessed with \\[yank]")))
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
186 (insert text))
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
187 action)
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
188
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
189
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
190 (provide 'dnd)
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
191
61482
0d768c0d43e2 Add arch taglines
Miles Bader <miles@gnu.org>
parents: 61479
diff changeset
192 ;; arch-tag: 0472f6a5-2e8f-4304-9e44-1a0877c771b7
61479
4ce8a38362c4 First version
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
193 ;;; dnd.el ends here