annotate lisp/ffap.el @ 110410:f2e111723c3a

Merge changes made in Gnus trunk. Reimplement nnimap, and do tweaks to the rest of the code to support that. * gnus-int.el (gnus-finish-retrieve-group-infos) (gnus-retrieve-group-data-early): New functions. * gnus-range.el (gnus-range-nconcat): New function. * gnus-start.el (gnus-get-unread-articles): Support early retrieval of data. (gnus-read-active-for-groups): Support finishing the early retrieval of data. * gnus-sum.el (gnus-summary-move-article): Pass the move-to group name if the move is internal, so that nnimap can do fast internal moves. * gnus.el (gnus-article-special-mark-lists): Add uid/active tuples, for nnimap usage. * nnimap.el: Rewritten. * nnmail.el (nnmail-inhibit-default-split-group): New internal variable to allow the mail splitting to not return a default group. This is useful for nnimap, which will leave unmatched mail in the inbox. * utf7.el (utf7-encode): Autoload. Implement shell connection. * nnimap.el (nnimap-open-shell-stream): New function. (nnimap-open-connection): Use it. Get the number of lines by using BODYSTRUCTURE. (nnimap-transform-headers): Get the number of lines in each message. (nnimap-retrieve-headers): Query for BODYSTRUCTURE so that we get the number of lines. Not all servers return UIDNEXT. Work past this problem. Remove junk from end of file. Fix typo in "bogus" section. Make capabilties be case-insensitive. Require cl when compiling. Don't bug out if the LIST command doesn't have any parameters. 2010-09-17 Knut Anders Hatlen <kahatlen@gmail.com> (tiny change) * nnimap.el (nnimap-get-groups): Don't bug out if the LIST command doesn't have any parameters. (mm-text-html-renderer): Document gnus-article-html. 2010-09-17 Julien Danjou <julien@danjou.info> (tiny fix) * mm-decode.el (mm-text-html-renderer): Document gnus-article-html. * dgnushack.el: Define netrc-credentials. If the user doesn't have a /etc/services, supply some sensible port defaults. Have `unseen-or-unread' select an unread unseen article first. (nntp-open-server): Return whether the open was successful or not. Throughout all files, replace (save-excursion (set-buffer ...)) with (with-current-buffer ... ). Save result so that it doesn't say "failed" all the time. Add ~/.authinfo to the default, since that's probably most useful for users. Don't use the "finish" method when we're reading from the agent. Add some more nnimap-relevant agent stuff to nnagent.el. * nnimap.el (nnimap-with-process-buffer): Removed. Revert one line that was changed by mistake in the last checkin. (nnimap-open-connection): Don't error out when we can't make a connection nnimap-related changes to avoid bugging out if we can't contact a server. * gnus-start.el (gnus-get-unread-articles): Don't try to scan groups from methods that are denied. * nnimap.el (nnimap-possibly-change-group): Return nil if we can't log in. (nnimap-finish-retrieve-group-infos): Make sure we're not waiting for nothing. * gnus-sum.el (gnus-select-newsgroup): Indent.
author Katsumi Yamaoka <yamaoka@jpl.org>
date Sat, 18 Sep 2010 10:02:19 +0000
parents 76b761c74dae
children 376148b31b5e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
54183
b91c8ab75b81 (dired-at-point): Additional writability test for relative directory names.
Juri Linkov <juri@jurta.org>
parents: 54106
diff changeset
1 ;;; ffap.el --- find file (or url) at point
b91c8ab75b81 (dired-at-point): Additional writability test for relative directory names.
Juri Linkov <juri@jurta.org>
parents: 54106
diff changeset
2
104886
386dbc11f8f7 (ffap-file-at-point): Handle absolute (non-remote) files with line
Glenn Morris <rgm@gnu.org>
parents: 103730
diff changeset
3 ;; Copyright (C) 1995, 1996, 1997, 2000, 2001, 2002, 2003, 2004, 2005,
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 106793
diff changeset
4 ;; 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
54183
b91c8ab75b81 (dired-at-point): Additional writability test for relative directory names.
Juri Linkov <juri@jurta.org>
parents: 54106
diff changeset
5
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13979
diff changeset
6 ;; Author: Michelangelo Grigni <mic@mathcs.emory.edu>
73776
876b645dd9c2 No maintainer now.
Richard M. Stallman <rms@gnu.org>
parents: 73203
diff changeset
7 ;; Maintainer: FSF
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
8 ;; Created: 29 Mar 1993
22250
a77d473867b8 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22214
diff changeset
9 ;; Keywords: files, hypermedia, matching, mouse, convenience
18486
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
10 ;; X-URL: ftp://ftp.mathcs.emory.edu/pub/mic/emacs/
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 ;; This file is part of GNU Emacs.
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94217
diff changeset
14 ;; GNU Emacs is free software: you can redistribute it and/or modify
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 ;; 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: 94217
diff changeset
16 ;; 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: 94217
diff changeset
17 ;; (at your option) any later version.
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; GNU Emacs is distributed in the hope that it will be useful,
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 ;; GNU General Public License for more details.
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24 ;; 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: 94217
diff changeset
25 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
27
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28 ;;; Commentary:
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 ;;
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
30 ;; Command find-file-at-point replaces find-file. With a prefix, it
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
31 ;; behaves exactly like find-file. Without a prefix, it first tries
17635
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
32 ;; to guess a default file or URL from the text around the point
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
33 ;; (`ffap-require-prefix' swaps these behaviors). This is useful for
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
34 ;; following references in situations such as mail or news buffers,
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
35 ;; README's, MANIFEST's, and so on. Submit bugs or suggestions with
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
36 ;; M-x ffap-bug.
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37 ;;
34867
e701bc3564db (ffap-bindings): Make interactive and add an autoload cookie.
Eli Zaretskii <eliz@gnu.org>
parents: 30687
diff changeset
38 ;; For the default installation, add this line to your .emacs file:
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39 ;;
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
40 ;; (ffap-bindings) ; do default key bindings
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 ;;
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
42 ;; ffap-bindings makes the following global key bindings:
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43 ;;
58923
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
44 ;; C-x C-f find-file-at-point (abbreviated as ffap)
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
45 ;; C-x C-r ffap-read-only
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
46 ;; C-x C-v ffap-alternate-file
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
47 ;;
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
48 ;; C-x d dired-at-point
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
49 ;; C-x C-d ffap-list-directory
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
50 ;;
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
51 ;; C-x 4 f ffap-other-window
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
52 ;; C-x 4 r ffap-read-only-other-window
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
53 ;; C-x 4 d ffap-dired-other-window
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
54 ;;
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
55 ;; C-x 5 f ffap-other-frame
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
56 ;; C-x 5 r ffap-read-only-other-frame
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
57 ;; C-x 5 d ffap-dired-other-frame
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
58 ;;
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
59 ;; S-mouse-3 ffap-at-mouse
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
60 ;; C-S-mouse-3 ffap-menu
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61 ;;
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
62 ;; ffap-bindings also adds hooks to make the following local bindings
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
63 ;; in vm, gnus, and rmail:
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64 ;;
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
65 ;; M-l ffap-next, or ffap-gnus-next in gnus (l == "link")
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
66 ;; M-m ffap-menu, or ffap-gnus-menu in gnus (m == "menu")
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 ;;
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
68 ;; If you do not like these bindings, modify the variable
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
69 ;; `ffap-bindings', or write your own.
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70 ;;
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
71 ;; If you use ange-ftp, browse-url, complete, efs, or w3, it is best
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
72 ;; to load or autoload them before ffap. If you use ff-paths, load it
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
73 ;; afterwards. Try apropos {C-h a ffap RET} to get a list of the many
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
74 ;; option variables. In particular, if ffap is slow, try these:
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75 ;;
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
76 ;; (setq ffap-alist nil) ; faster, dumber prompting
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
77 ;; (setq ffap-machine-p-known 'accept) ; no pinging
17635
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
78 ;; (setq ffap-url-regexp nil) ; disable URL features in ffap
52672
d4d213cfb340 whitespace.el now takes user customizable variable to display cleanliness of
Rajesh Vaidheeswarran <rv@gnu.org>
parents: 52401
diff changeset
79 ;; (setq ffap-shell-prompt-regexp nil) ; disable shell prompt stripping
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
80 ;;
18486
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
81 ;; ffap uses `browse-url' (if found, else `w3-fetch') to fetch URL's.
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
82 ;; For a hairier `ffap-url-fetcher', try ffap-url.el (same ftp site).
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
83 ;; Also, you can add `ffap-menu-rescan' to various hooks to fontify
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48409
diff changeset
84 ;; the file and URL references within a buffer.
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
86
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
87 ;;; Change Log:
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
88 ;;
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
89 ;; The History and Contributors moved to ffap.LOG (same ftp site),
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
90 ;; which also has some old examples and commentary from ffap 1.5.
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
91
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
92
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
93 ;;; Todo list:
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
94 ;; * use kpsewhich
49808
6a37bab32791 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 49694
diff changeset
95 ;; * let "/dir/file#key" jump to key (tag or regexp) in /dir/file
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
96 ;; * find file of symbol if TAGS is loaded (like above)
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
97 ;; * break long menus into multiple panes (like imenu?)
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
98 ;; * notice node in "(dired)Virtual Dired" (quotes, parentheses, whitespace)
49808
6a37bab32791 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 49694
diff changeset
99 ;; * notice "machine.dom blah blah blah dir/file" (how?)
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
100 ;; * as w3 becomes standard, rewrite to rely more on its functions
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
101 ;; * regexp options for ffap-string-at-point, like font-lock (MCOOK)
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
102 ;; * v19: could replace `ffap-locate-file' with a quieter `locate-library'
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
103 ;; * handle "$(VAR)" in Makefiles
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
104 ;; * use the font-lock machinery
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
105
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
106
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107 ;;; Code:
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108
103729
f78c4d81bda4 (ffap-version): Make it an obsolete alias for emacs-version.
Glenn Morris <rgm@gnu.org>
parents: 100908
diff changeset
109 (define-obsolete-variable-alias 'ffap-version 'emacs-version "23.2")
18486
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
110
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
111 (defgroup ffap nil
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
112 "Find file or URL at point."
103730
7193abeb1062 (ffap): Remove defunct URL from custom group.
Glenn Morris <rgm@gnu.org>
parents: 103729
diff changeset
113 ;; Dead 2009/07/05.
7193abeb1062 (ffap): Remove defunct URL from custom group.
Glenn Morris <rgm@gnu.org>
parents: 103729
diff changeset
114 ;; :link '(url-link :tag "URL" "ftp://ftp.mathcs.emory.edu/pub/mic/emacs/")
22250
a77d473867b8 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22214
diff changeset
115 :group 'matching
a77d473867b8 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22214
diff changeset
116 :group 'convenience)
18486
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
117
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
118 ;; The code is organized in pages, separated by formfeed characters.
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
119 ;; See the next two pages for standard customization ideas.
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
120
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
121
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 ;;; User Variables:
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123
106503
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
124 (defun ffap-symbol-value (sym &optional default)
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
125 "Return value of symbol SYM, if bound, or DEFAULT otherwise."
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
126 (if (boundp sym) (symbol-value sym) default))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127
52672
d4d213cfb340 whitespace.el now takes user customizable variable to display cleanliness of
Rajesh Vaidheeswarran <rv@gnu.org>
parents: 52401
diff changeset
128 (defcustom ffap-shell-prompt-regexp
d4d213cfb340 whitespace.el now takes user customizable variable to display cleanliness of
Rajesh Vaidheeswarran <rv@gnu.org>
parents: 52401
diff changeset
129 ;; This used to test for some shell prompts that don't have a space
d4d213cfb340 whitespace.el now takes user customizable variable to display cleanliness of
Rajesh Vaidheeswarran <rv@gnu.org>
parents: 52401
diff changeset
130 ;; after them. The common root shell prompt (#) is not listed since it
d4d213cfb340 whitespace.el now takes user customizable variable to display cleanliness of
Rajesh Vaidheeswarran <rv@gnu.org>
parents: 52401
diff changeset
131 ;; also doubles up as a valid URL character.
d4d213cfb340 whitespace.el now takes user customizable variable to display cleanliness of
Rajesh Vaidheeswarran <rv@gnu.org>
parents: 52401
diff changeset
132 "[$%><]*"
106793
f0cdc68631e2 Fix typos in ffap.el.
Juanma Barranquero <lekktu@gmail.com>
parents: 106503
diff changeset
133 "Paths matching this regexp are stripped off the shell prompt.
52672
d4d213cfb340 whitespace.el now takes user customizable variable to display cleanliness of
Rajesh Vaidheeswarran <rv@gnu.org>
parents: 52401
diff changeset
134 If nil, ffap doesn't do shell prompt stripping."
d4d213cfb340 whitespace.el now takes user customizable variable to display cleanliness of
Rajesh Vaidheeswarran <rv@gnu.org>
parents: 52401
diff changeset
135 :type '(choice (const :tag "Disable" nil)
d4d213cfb340 whitespace.el now takes user customizable variable to display cleanliness of
Rajesh Vaidheeswarran <rv@gnu.org>
parents: 52401
diff changeset
136 (const :tag "Standard" "[$%><]*")
d4d213cfb340 whitespace.el now takes user customizable variable to display cleanliness of
Rajesh Vaidheeswarran <rv@gnu.org>
parents: 52401
diff changeset
137 regexp)
d4d213cfb340 whitespace.el now takes user customizable variable to display cleanliness of
Rajesh Vaidheeswarran <rv@gnu.org>
parents: 52401
diff changeset
138 :group 'ffap)
d4d213cfb340 whitespace.el now takes user customizable variable to display cleanliness of
Rajesh Vaidheeswarran <rv@gnu.org>
parents: 52401
diff changeset
139
17635
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
140 (defcustom ffap-ftp-regexp
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
141 ;; This used to test for ange-ftp or efs being present, but it should be
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
142 ;; harmless (and simpler) to give it this value unconditionally.
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
143 "\\`/[^/:]+:"
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 98339
diff changeset
144 "File names matching this regexp are treated as remote ffap.
49808
6a37bab32791 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 49694
diff changeset
145 If nil, ffap neither recognizes nor generates such names."
17635
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
146 :type '(choice (const :tag "Disable" nil)
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
147 (const :tag "Standard" "\\`/[^/:]+:")
17635
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
148 regexp)
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
149 :group 'ffap)
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150
17635
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
151 (defcustom ffap-url-unwrap-local t
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 98339
diff changeset
152 "If non-nil, convert `file:' URL to local file name before prompting."
17635
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
153 :type 'boolean
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
154 :group 'ffap)
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155
17635
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
156 (defcustom ffap-url-unwrap-remote t
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 98339
diff changeset
157 "If non-nil, convert `ftp:' URL to remote file name before prompting.
17635
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
158 This is ignored if `ffap-ftp-regexp' is nil."
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
159 :type 'boolean
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
160 :group 'ffap)
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
161
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
162 (defcustom ffap-ftp-default-user "anonymous"
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 98339
diff changeset
163 "User name in ftp file names generated by `ffap-host-to-path'.
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
164 Note this name may be omitted if it equals the default
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
165 \(either `efs-default-user' or `ange-ftp-default-user'\)."
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
166 :type 'string
17635
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
167 :group 'ffap)
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168
17635
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
169 (defcustom ffap-rfs-regexp
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170 ;; Remote file access built into file system? HP rfa or Andrew afs:
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171 "\\`/\\(afs\\|net\\)/."
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 ;; afs only: (and (file-exists-p "/afs") "\\`/afs/.")
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 98339
diff changeset
173 "Matching file names are treated as remote. Use nil to disable."
17635
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
174 :type 'regexp
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
175 :group 'ffap)
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
176
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177 (defvar ffap-url-regexp
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178 ;; Could just use `url-nonrelative-link' of w3, if loaded.
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179 ;; This regexp is not exhaustive, it just matches common cases.
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180 (concat
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181 "\\`\\("
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182 "news\\(post\\)?:\\|mailto:\\|file:" ; no host ok
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183 "\\|"
29115
4d1a63ff990f (ffap-url-regexp): Add `https'.
Gerd Moellmann <gerd@gnu.org>
parents: 26725
diff changeset
184 "\\(ftp\\|https?\\|telnet\\|gopher\\|www\\|wais\\)://" ; needs host
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
185 "\\)." ; require one more character
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
186 )
106793
f0cdc68631e2 Fix typos in ffap.el.
Juanma Barranquero <lekktu@gmail.com>
parents: 106503
diff changeset
187 "Regexp matching URLs. Use nil to disable URL features in ffap.")
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
188
17635
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
189 (defcustom ffap-foo-at-bar-prefix "mailto"
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 98339
diff changeset
190 "Presumed URL prefix type of strings like \"<foo.9z@bar>\".
17635
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
191 Sensible values are nil, \"news\", or \"mailto\"."
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
192 :type '(choice (const "mailto")
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
193 (const "news")
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
194 (const :tag "Disable" nil)
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
195 ;; string -- possible, but not really useful
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
196 )
17635
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
197 :group 'ffap)
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
198
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
200 ;;; Peanut Gallery (More User Variables):
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
201 ;;
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202 ;; Users of ffap occasionally suggest new features. If I consider
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203 ;; those features interesting but not clear winners (a matter of
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204 ;; personal taste) I try to leave options to enable them. Read
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
205 ;; through this section for features that you like, put an appropriate
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
206 ;; enabler in your .emacs file.
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
207
58923
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
208 (defcustom ffap-dired-wildcards "[*?][^/]*\\'"
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 98339
diff changeset
209 "A regexp matching filename wildcard characters, or nil.
58923
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
210
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
211 If `find-file-at-point' gets a filename matching this pattern,
61365
e59db0620294 (ffap-pass-wildcards-to-dired): New user option to
Juri Linkov <juri@jurta.org>
parents: 59105
diff changeset
212 and `ffap-pass-wildcards-to-dired' is nil, it passes it on to
e59db0620294 (ffap-pass-wildcards-to-dired): New user option to
Juri Linkov <juri@jurta.org>
parents: 59105
diff changeset
213 `find-file' with non-nil WILDCARDS argument, which expands
e59db0620294 (ffap-pass-wildcards-to-dired): New user option to
Juri Linkov <juri@jurta.org>
parents: 59105
diff changeset
214 wildcards and visits multiple files. To visit a file whose name
e59db0620294 (ffap-pass-wildcards-to-dired): New user option to
Juri Linkov <juri@jurta.org>
parents: 59105
diff changeset
215 contains wildcard characters you can suppress wildcard expansion
e59db0620294 (ffap-pass-wildcards-to-dired): New user option to
Juri Linkov <juri@jurta.org>
parents: 59105
diff changeset
216 by setting `find-file-wildcards'. If `find-file-at-point' gets a
e59db0620294 (ffap-pass-wildcards-to-dired): New user option to
Juri Linkov <juri@jurta.org>
parents: 59105
diff changeset
217 filename matching this pattern and `ffap-pass-wildcards-to-dired'
e59db0620294 (ffap-pass-wildcards-to-dired): New user option to
Juri Linkov <juri@jurta.org>
parents: 59105
diff changeset
218 is non-nil, it passes it on to `dired'.
58923
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
219
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
220 If `dired-at-point' gets a filename matching this pattern,
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
221 it passes it on to `dired'."
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
222 :type '(choice (const :tag "Disable" nil)
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
223 (const :tag "Enable" "[*?][^/]*\\'")
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
224 ;; regexp -- probably not useful
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
225 )
17635
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
226 :group 'ffap)
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227
61365
e59db0620294 (ffap-pass-wildcards-to-dired): New user option to
Juri Linkov <juri@jurta.org>
parents: 59105
diff changeset
228 (defcustom ffap-pass-wildcards-to-dired nil
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 98339
diff changeset
229 "If non-nil, pass filenames matching `ffap-dired-wildcards' to dired."
61365
e59db0620294 (ffap-pass-wildcards-to-dired): New user option to
Juri Linkov <juri@jurta.org>
parents: 59105
diff changeset
230 :type 'boolean
e59db0620294 (ffap-pass-wildcards-to-dired): New user option to
Juri Linkov <juri@jurta.org>
parents: 59105
diff changeset
231 :group 'ffap)
e59db0620294 (ffap-pass-wildcards-to-dired): New user option to
Juri Linkov <juri@jurta.org>
parents: 59105
diff changeset
232
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
233 (defcustom ffap-newfile-prompt nil
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
234 ;; Suggestion from RHOGEE, 11 Jul 1994. Disabled, I think this is
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
235 ;; better handled by `find-file-not-found-hooks'.
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 98339
diff changeset
236 "Whether `find-file-at-point' prompts about a nonexistent file."
17635
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
237 :type 'boolean
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
238 :group 'ffap)
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239
17635
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
240 (defcustom ffap-require-prefix nil
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
241 ;; Suggestion from RHOGEE, 20 Oct 1994.
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 98339
diff changeset
242 "If set, reverses the prefix argument to `find-file-at-point'.
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
243 This is nil so neophytes notice ffap. Experts may prefer to disable
17635
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
244 ffap most of the time."
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
245 :type 'boolean
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
246 :group 'ffap)
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247
17635
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
248 (defcustom ffap-file-finder 'find-file
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 98339
diff changeset
249 "The command called by `find-file-at-point' to find a file."
17635
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
250 :type 'function
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
251 :group 'ffap)
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252 (put 'ffap-file-finder 'risky-local-variable t)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253
58923
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
254 (defcustom ffap-directory-finder 'dired
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 98339
diff changeset
255 "The command called by `dired-at-point' to find a directory."
58923
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
256 :type 'function
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
257 :group 'ffap)
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
258 (put 'ffap-directory-finder 'risky-local-variable t)
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
259
17635
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
260 (defcustom ffap-url-fetcher
18486
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
261 (if (fboundp 'browse-url)
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
262 'browse-url ; rely on browse-url-browser-function
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
263 'w3-fetch)
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
264 ;; Remote control references:
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265 ;; http://www.ncsa.uiuc.edu/SDG/Software/XMosaic/remote-control.html
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
266 ;; http://home.netscape.com/newsref/std/x-remote.html
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 98339
diff changeset
267 "A function of one argument, called by ffap to fetch an URL.
18486
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
268 Reasonable choices are `w3-fetch' or a `browse-url-*' function.
23352
0550057ebca1 Doc fixes.
Karl Heuer <kwzh@gnu.org>
parents: 22659
diff changeset
269 For a fancy alternative, get `ffap-url.el'."
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
270 :type '(choice (const w3-fetch)
18486
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
271 (const browse-url) ; in recent versions of browse-url
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
272 (const browse-url-netscape)
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
273 (const browse-url-mosaic)
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
274 function)
17635
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
275 :group 'ffap)
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
276 (put 'ffap-url-fetcher 'risky-local-variable t)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
278
18486
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
279 ;;; Compatibility:
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
280 ;;
68828
6129fc95cce2 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 68651
diff changeset
281 ;; This version of ffap supports only the Emacs it is distributed in.
6129fc95cce2 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 68651
diff changeset
282 ;; See the ftp site for a more general version. The following
6129fc95cce2 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 68651
diff changeset
283 ;; functions are necessary "leftovers" from the more general version.
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
284
106503
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
285 (defun ffap-mouse-event () ; current mouse event, or nil
18486
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
286 (and (listp last-nonmenu-event) last-nonmenu-event))
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
287 (defun ffap-event-buffer (event)
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
288 (window-buffer (car (event-start event))))
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
289
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
290
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
291 ;;; Find Next Thing in buffer (`ffap-next'):
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
292 ;;
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
293 ;; Original ffap-next-url (URL's only) from RPECK 30 Mar 1995. Since
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
294 ;; then, broke it up into ffap-next-guess (noninteractive) and
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
295 ;; ffap-next (a command). It now work on files as well as url's.
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
296
17635
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
297 (defcustom ffap-next-regexp
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
298 ;; If you want ffap-next to find URL's only, try this:
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
299 ;; (and ffap-url-regexp (string-match "\\\\`" ffap-url-regexp)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
300 ;; (concat "\\<" (substring ffap-url-regexp 2))))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
301 ;;
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
302 ;; It pays to put a big fancy regexp here, since ffap-guesser is
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
303 ;; much more time-consuming than regexp searching:
75189
c456d15d23fd (ffap-next-regexp, ffap-machine-p, ffap-newsgroup-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 74439
diff changeset
304 "[/:.~[:alpha:]]/\\|@[[:alpha:]][-[:alnum:]]*\\."
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 98339
diff changeset
305 "Regular expression governing movements of `ffap-next'."
17635
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
306 :type 'regexp
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
307 :group 'ffap)
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
308
17676
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
309 (defvar ffap-next-guess nil
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
310 "Last value returned by `ffap-next-guess'.")
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
311
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
312 (defvar ffap-string-at-point-region '(1 1)
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
313 "List (BEG END), last region returned by `ffap-string-at-point'.")
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
314
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
315 (defun ffap-next-guess (&optional back lim)
17635
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
316 "Move point to next file or URL, and return it as a string.
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
317 If nothing is found, leave point at limit and return nil.
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
318 Optional BACK argument makes search backwards.
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
319 Optional LIM argument limits the search.
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
320 Only considers strings that match `ffap-next-regexp'."
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
321 (or lim (setq lim (if back (point-min) (point-max))))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
322 (let (guess)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
323 (while (not (or guess (eq (point) lim)))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
324 (funcall (if back 're-search-backward 're-search-forward)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
325 ffap-next-regexp lim 'move)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
326 (setq guess (ffap-guesser)))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
327 ;; Go to end, so we do not get same guess twice:
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
328 (goto-char (nth (if back 0 1) ffap-string-at-point-region))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
329 (setq ffap-next-guess guess)))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
330
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
331 ;;;###autoload
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
332 (defun ffap-next (&optional back wrap)
17635
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
333 "Search buffer for next file or URL, and run ffap.
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
334 Optional argument BACK says to search backwards.
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
335 Optional argument WRAP says to try wrapping around if necessary.
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
336 Interactively: use a single prefix to search backwards,
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
337 double prefix to wrap forward, triple to wrap backwards.
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
338 Actual search is done by `ffap-next-guess'."
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
339 (interactive
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
340 (cdr (assq (prefix-numeric-value current-prefix-arg)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
341 '((1) (4 t) (16 nil t) (64 t t)))))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
342 (let ((pt (point))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
343 (guess (ffap-next-guess back)))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
344 ;; Try wraparound if necessary:
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
345 (and (not guess) wrap
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
346 (goto-char (if back (point-max) (point-min)))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
347 (setq guess (ffap-next-guess back pt)))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
348 (if guess
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
349 (progn
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
350 (sit-for 0) ; display point movement
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
351 (find-file-at-point (ffap-prompter guess)))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
352 (goto-char pt) ; restore point
17635
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
353 (message "No %sfiles or URL's found"
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
354 (if wrap "" "more ")))))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
355
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
356 (defun ffap-next-url (&optional back wrap)
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
357 "Like `ffap-next', but search with `ffap-url-regexp'."
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
358 (interactive)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
359 (let ((ffap-next-regexp ffap-url-regexp))
105372
bd2966850aac Use `called-interactively-p' instead of `interactive-p'.
Juanma Barranquero <lekktu@gmail.com>
parents: 104886
diff changeset
360 (if (called-interactively-p 'interactive)
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
361 (call-interactively 'ffap-next)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
362 (ffap-next back wrap))))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
363
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
364
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
365 ;;; Machines (`ffap-machine-p'):
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
366
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
367 ;; I cannot decide a "best" strategy here, so these are variables. In
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
368 ;; particular, if `Pinging...' is broken or takes too long on your
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
369 ;; machine, try setting these all to accept or reject.
17635
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
370 (defcustom ffap-machine-p-local 'reject ; this happens often
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 98339
diff changeset
371 "What `ffap-machine-p' does with hostnames that have no domain.
23443
362c52acd51f (ffap-machine-p-local): Fix editing error.
Richard M. Stallman <rms@gnu.org>
parents: 23352
diff changeset
372 Value should be a symbol, one of `ping', `accept', and `reject'."
17635
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
373 :type '(choice (const ping)
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
374 (const accept)
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
375 (const reject))
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
376 :group 'ffap)
23352
0550057ebca1 Doc fixes.
Karl Heuer <kwzh@gnu.org>
parents: 22659
diff changeset
377 (defcustom ffap-machine-p-known 'ping ; `accept' for higher speed
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 98339
diff changeset
378 "What `ffap-machine-p' does with hostnames that have a known domain.
23352
0550057ebca1 Doc fixes.
Karl Heuer <kwzh@gnu.org>
parents: 22659
diff changeset
379 Value should be a symbol, one of `ping', `accept', and `reject'.
0550057ebca1 Doc fixes.
Karl Heuer <kwzh@gnu.org>
parents: 22659
diff changeset
380 See `mail-extr.el' for the known domains."
17635
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
381 :type '(choice (const ping)
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
382 (const accept)
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
383 (const reject))
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
384 :group 'ffap)
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
385 (defcustom ffap-machine-p-unknown 'reject
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 98339
diff changeset
386 "What `ffap-machine-p' does with hostnames that have an unknown domain.
23352
0550057ebca1 Doc fixes.
Karl Heuer <kwzh@gnu.org>
parents: 22659
diff changeset
387 Value should be a symbol, one of `ping', `accept', and `reject'.
0550057ebca1 Doc fixes.
Karl Heuer <kwzh@gnu.org>
parents: 22659
diff changeset
388 See `mail-extr.el' for the known domains."
17635
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
389 :type '(choice (const ping)
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
390 (const accept)
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
391 (const reject))
e687d30cbf1a Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16286
diff changeset
392 :group 'ffap)
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
393
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
394 (defun ffap-what-domain (domain)
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
395 ;; Like what-domain in mail-extr.el, returns string or nil.
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
396 (require 'mail-extr)
106503
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
397 (let ((ob (or (ffap-symbol-value 'mail-extr-all-top-level-domains)
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
398 (ffap-symbol-value 'all-top-level-domains)))) ; XEmacs
18486
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
399 (and ob (get (intern-soft (downcase domain) ob) 'domain-name))))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
400
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
401 (defun ffap-machine-p (host &optional service quiet strategy)
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
402 "Decide whether HOST is the name of a real, reachable machine.
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
403 Depending on the domain (none, known, or unknown), follow the strategy
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
404 named by the variable `ffap-machine-p-local', `ffap-machine-p-known',
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
405 or `ffap-machine-p-unknown'. Pinging uses `open-network-stream'.
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
406 Optional SERVICE specifies the port used \(default \"discard\"\).
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
407 Optional QUIET flag suppresses the \"Pinging...\" message.
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
408 Optional STRATEGY overrides the three variables above.
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
409 Returned values:
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
410 t means that HOST answered.
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
411 'accept means the relevant variable told us to accept.
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
412 \"mesg\" means HOST exists, but does not respond for some reason."
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
413 ;; Try some (Emory local):
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
414 ;; (ffap-machine-p "ftp" nil nil 'ping)
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
415 ;; (ffap-machine-p "nonesuch" nil nil 'ping)
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
416 ;; (ffap-machine-p "ftp.mathcs.emory.edu" nil nil 'ping)
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
417 ;; (ffap-machine-p "mathcs" 5678 nil 'ping)
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
418 ;; (ffap-machine-p "foo.bonk" nil nil 'ping)
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
419 ;; (ffap-machine-p "foo.bonk.com" nil nil 'ping)
80037
4318dfaeb2cb *** empty log message ***
Juanma Barranquero <lekktu@gmail.com>
parents: 79794
diff changeset
420 (if (or (string-match "[^-[:alnum:].]" host) ; Invalid chars (?)
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
421 (not (string-match "[^0-9]" host))) ; 1: a number? 2: quick reject
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
422 nil
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
423 (let* ((domain
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
424 (and (string-match "\\.[^.]*$" host)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
425 (downcase (substring host (1+ (match-beginning 0))))))
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
426 (what-domain (if domain (ffap-what-domain domain) "Local")))
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
427 (or strategy
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
428 (setq strategy
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
429 (cond ((not domain) ffap-machine-p-local)
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
430 ((not what-domain) ffap-machine-p-unknown)
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
431 (t ffap-machine-p-known))))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
432 (cond
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
433 ((eq strategy 'accept) 'accept)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
434 ((eq strategy 'reject) nil)
38070
e52b4f89d86f (ffap-machine-p): Always return nil if
Eli Zaretskii <eliz@gnu.org>
parents: 35096
diff changeset
435 ((not (fboundp 'open-network-stream)) nil)
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
436 ;; assume (eq strategy 'ping)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
437 (t
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
438 (or quiet
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
439 (if (stringp what-domain)
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
440 (message "Pinging %s (%s)..." host what-domain)
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
441 (message "Pinging %s ..." host)))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
442 (condition-case error
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
443 (progn
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
444 (delete-process
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
445 (open-network-stream
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
446 "ffap-machine-p" nil host (or service "discard")))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
447 t)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
448 (error
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
449 (let ((mesg (car (cdr error))))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
450 (cond
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
451 ;; v18:
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
452 ((string-match "^Unknown host" mesg) nil)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
453 ((string-match "not responding$" mesg) mesg)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
454 ;; v19:
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
455 ;; (file-error "connection failed" "permission denied"
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
456 ;; "nonesuch" "ffap-machine-p")
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
457 ;; (file-error "connection failed" "host is unreachable"
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
458 ;; "gopher.house.gov" "ffap-machine-p")
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
459 ;; (file-error "connection failed" "address already in use"
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
460 ;; "ftp.uu.net" "ffap-machine-p")
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
461 ((equal mesg "connection failed")
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
462 (if (equal (nth 2 error) "permission denied")
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
463 nil ; host does not exist
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
464 ;; Other errors mean the host exists:
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
465 (nth 2 error)))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
466 ;; Could be "Unknown service":
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
467 (t (signal (car error) (cdr error))))))))))))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
468
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
469
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
470 ;;; Possibly Remote Resources:
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
471
49808
6a37bab32791 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 49694
diff changeset
472 (defun ffap-replace-file-component (fullname name)
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
473 "In remote FULLNAME, replace path with NAME. May return nil."
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
474 ;; Use ange-ftp or efs if loaded, but do not load them otherwise.
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
475 (let (found)
84866
45ab0bfaaa12 (ffap-replace-file-component): Use `mapc' rather than `mapcar'.
Juanma Barranquero <lekktu@gmail.com>
parents: 82140
diff changeset
476 (mapc
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
477 (function (lambda (sym) (and (fboundp sym) (setq found sym))))
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
478 '(
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
479 efs-replace-path-component
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
480 ange-ftp-replace-path-component
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
481 ange-ftp-replace-name-component
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
482 ))
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
483 (and found
49808
6a37bab32791 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 49694
diff changeset
484 (fset 'ffap-replace-file-component found)
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
485 (funcall found fullname name))))
49808
6a37bab32791 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 49694
diff changeset
486 ;; (ffap-replace-file-component "/who@foo.com:/whatever" "/new")
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
487
18486
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
488 (defun ffap-file-suffix (file)
23352
0550057ebca1 Doc fixes.
Karl Heuer <kwzh@gnu.org>
parents: 22659
diff changeset
489 "Return trailing `.foo' suffix of FILE, or nil if none."
18486
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
490 (let ((pos (string-match "\\.[^./]*\\'" file)))
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
491 (and pos (substring file pos nil))))
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
492
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
493 (defvar ffap-compression-suffixes '(".gz" ".Z") ; .z is mostly dead
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
494 "List of suffixes tried by `ffap-file-exists-string'.")
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
495
18486
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
496 (defun ffap-file-exists-string (file &optional nomodify)
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
497 ;; Early jka-compr versions modified file-exists-p to return the
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
498 ;; filename, maybe modified by adding a suffix like ".gz". That
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
499 ;; broke the interface of file-exists-p, so it was later dropped.
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
500 ;; Here we document and simulate the old behavior.
23352
0550057ebca1 Doc fixes.
Karl Heuer <kwzh@gnu.org>
parents: 22659
diff changeset
501 "Return FILE (maybe modified) if the file exists, else nil.
18486
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
502 When using jka-compr (a.k.a. `auto-compression-mode'), the returned
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
503 name may have a suffix added from `ffap-compression-suffixes'.
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
504 The optional NOMODIFY argument suppresses the extra search."
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
505 (cond
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
506 ((not file) nil) ; quietly reject nil
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
507 ((file-exists-p file) file) ; try unmodified first
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
508 ;; three reasons to suppress search:
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
509 (nomodify nil)
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
510 ((not (rassq 'jka-compr-handler file-name-handler-alist)) nil)
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
511 ((member (ffap-file-suffix file) ffap-compression-suffixes) nil)
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
512 (t ; ok, do the search
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
513 (let ((list ffap-compression-suffixes) try ret)
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
514 (while list
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
515 (if (file-exists-p (setq try (concat file (car list))))
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
516 (setq ret try list nil)
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
517 (setq list (cdr list))))
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
518 ret))))
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
519
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
520 (defun ffap-file-remote-p (filename)
23352
0550057ebca1 Doc fixes.
Karl Heuer <kwzh@gnu.org>
parents: 22659
diff changeset
521 "If FILENAME looks remote, return it (maybe slightly improved)."
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
522 ;; (ffap-file-remote-p "/user@foo.bar.com:/pub")
49808
6a37bab32791 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 49694
diff changeset
523 ;; (ffap-file-remote-p "/cssun.mathcs.emory.edu://dir")
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
524 ;; (ffap-file-remote-p "/ffap.el:80")
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
525 (or (and ffap-ftp-regexp
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
526 (string-match ffap-ftp-regexp filename)
49808
6a37bab32791 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 49694
diff changeset
527 ;; Convert "/host.com://dir" to "/host:/dir", to handle a dieing
6a37bab32791 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 49694
diff changeset
528 ;; practice of advertising ftp files as "host.dom://filename".
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
529 (if (string-match "//" filename)
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
530 ;; (replace-match "/" nil nil filename)
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
531 (concat (substring filename 0 (1+ (match-beginning 0)))
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
532 (substring filename (match-end 0)))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
533 filename))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
534 (and ffap-rfs-regexp
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
535 (string-match ffap-rfs-regexp filename)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
536 filename)))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
537
106503
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
538 (defun ffap-machine-at-point ()
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
539 "Return machine name at point if it exists, or nil."
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
540 (let ((mach (ffap-string-at-point 'machine)))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
541 (and (ffap-machine-p mach) mach)))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
542
49808
6a37bab32791 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 49694
diff changeset
543 (defsubst ffap-host-to-filename (host)
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
544 "Convert HOST to something like \"/USER@HOST:\" or \"/HOST:\".
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
545 Looks at `ffap-ftp-default-user', returns \"\" for \"localhost\"."
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
546 (if (equal host "localhost")
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
547 ""
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
548 (let ((user ffap-ftp-default-user))
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
549 ;; Avoid including the user if it is same as default:
106503
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
550 (if (or (equal user (ffap-symbol-value 'ange-ftp-default-user))
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
551 (equal user (ffap-symbol-value 'efs-default-user)))
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
552 (setq user nil))
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
553 (concat "/" user (and user "@") host ":"))))
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
554
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
555 (defun ffap-fixup-machine (mach)
49808
6a37bab32791 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 49694
diff changeset
556 ;; Convert a hostname into an url, an ftp file name, or nil.
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
557 (cond
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
558 ((not (and ffap-url-regexp (stringp mach))) nil)
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
559 ;; gopher.well.com
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
560 ((string-match "\\`gopher[-.]" mach) ; or "info"?
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
561 (concat "gopher://" mach "/"))
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
562 ;; www.ncsa.uiuc.edu
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
563 ((and (string-match "\\`w\\(ww\\|eb\\)[-.]" mach))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
564 (concat "http://" mach "/"))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
565 ;; More cases? Maybe "telnet:" for archie?
49808
6a37bab32791 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 49694
diff changeset
566 (ffap-ftp-regexp (ffap-host-to-filename mach))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
567 ))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
568
75189
c456d15d23fd (ffap-next-regexp, ffap-machine-p, ffap-newsgroup-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 74439
diff changeset
569 (defvar ffap-newsgroup-regexp "^[[:lower:]]+\\.[-+[:lower:]_0-9.]+$"
17676
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
570 "Strings not matching this fail `ffap-newsgroup-p'.")
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
571 (defvar ffap-newsgroup-heads ; entirely inadequate
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
572 '("alt" "comp" "gnu" "misc" "news" "sci" "soc" "talk")
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
573 "Used by `ffap-newsgroup-p' if gnus is not running.")
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
574
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
575 (defun ffap-newsgroup-p (string)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
576 "Return STRING if it looks like a newsgroup name, else nil."
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
577 (and
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
578 (string-match ffap-newsgroup-regexp string)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
579 (let ((htbs '(gnus-active-hashtb gnus-newsrc-hashtb gnus-killed-hashtb))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
580 (heads ffap-newsgroup-heads)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
581 htb ret)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
582 (while htbs
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
583 (setq htb (car htbs) htbs (cdr htbs))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
584 (condition-case nil
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
585 (progn
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
586 ;; errs: htb symbol may be unbound, or not a hash-table.
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
587 ;; gnus-gethash is just a macro for intern-soft.
43174
8a1b4dc4ca4c (ffap-newsgroup-p): Test for non-nil symbol-value of htb.
Richard M. Stallman <rms@gnu.org>
parents: 38070
diff changeset
588 (and (symbol-value htb)
8a1b4dc4ca4c (ffap-newsgroup-p): Test for non-nil symbol-value of htb.
Richard M. Stallman <rms@gnu.org>
parents: 38070
diff changeset
589 (intern-soft string (symbol-value htb))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
590 (setq ret string htbs nil))
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
591 ;; If we made it this far, gnus is running, so ignore "heads":
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
592 (setq heads nil))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
593 (error nil)))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
594 (or ret (not heads)
75189
c456d15d23fd (ffap-next-regexp, ffap-machine-p, ffap-newsgroup-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 74439
diff changeset
595 (let ((head (string-match "\\`\\([[:lower:]]+\\)\\." string)))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
596 (and head (setq head (substring string 0 (match-end 1)))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
597 (member head heads)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
598 (setq ret string))))
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
599 ;; Is there ever a need to modify string as a newsgroup name?
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
600 ret)))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
601
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
602 (defsubst ffap-url-p (string)
106793
f0cdc68631e2 Fix typos in ffap.el.
Juanma Barranquero <lekktu@gmail.com>
parents: 106503
diff changeset
603 "If STRING looks like an URL, return it (maybe improved), else nil."
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
604 (let ((case-fold-search t))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
605 (and ffap-url-regexp (string-match ffap-url-regexp string)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
606 ;; I lied, no improvement:
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
607 string)))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
608
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
609 ;; Broke these out of ffap-fixup-url, for use of ffap-url package.
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
610 (defsubst ffap-url-unwrap-local (url)
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
611 "Return URL as a local file, or nil. Ignores `ffap-url-regexp'."
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
612 (and (string-match "\\`\\(file\\|ftp\\):/?\\([^/]\\|\\'\\)" url)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
613 (substring url (1+ (match-end 1)))))
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
614 (defsubst ffap-url-unwrap-remote (url)
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
615 "Return URL as a remote file, or nil. Ignores `ffap-url-regexp'."
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
616 (and (string-match "\\`\\(ftp\\|file\\)://\\([^:/]+\\):?\\(/.*\\)" url)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
617 (concat
49808
6a37bab32791 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 49694
diff changeset
618 (ffap-host-to-filename (substring url (match-beginning 2) (match-end 2)))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
619 (substring url (match-beginning 3) (match-end 3)))))
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
620 ;; Test: (ffap-url-unwrap-remote "ftp://foo.com/bar.boz")
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
621
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
622 (defun ffap-fixup-url (url)
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
623 "Clean up URL and return it, maybe as a file name."
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
624 (cond
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
625 ((not (stringp url)) nil)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
626 ((and ffap-url-unwrap-local (ffap-url-unwrap-local url)))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
627 ((and ffap-url-unwrap-remote ffap-ftp-regexp
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
628 (ffap-url-unwrap-remote url)))
98339
c646ac5cd7c0 (ffap-fixup-url): Don't call url-normalize-url. (Bug#898)
Glenn Morris <rgm@gnu.org>
parents: 95784
diff changeset
629 ;; All this seems to do is remove any trailing "#anchor" part (Bug#898).
c646ac5cd7c0 (ffap-fixup-url): Don't call url-normalize-url. (Bug#898)
Glenn Morris <rgm@gnu.org>
parents: 95784
diff changeset
630 ;;; ((fboundp 'url-normalize-url) ; may autoload url (part of w3)
c646ac5cd7c0 (ffap-fixup-url): Don't call url-normalize-url. (Bug#898)
Glenn Morris <rgm@gnu.org>
parents: 95784
diff changeset
631 ;;; (url-normalize-url url))
18486
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
632 (url)))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
633
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
634
49808
6a37bab32791 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 49694
diff changeset
635 ;;; File Name Handling:
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
636 ;;
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
637 ;; The upcoming ffap-alist actions need various utilities to prepare
49808
6a37bab32791 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 49694
diff changeset
638 ;; and search directories. Too many features here.
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
639
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
640 ;; (defun ffap-last (l) (while (cdr l) (setq l (cdr l))) l)
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
641 ;; (defun ffap-splice (func inlist)
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
642 ;; "Equivalent to (apply 'nconc (mapcar FUNC INLIST)), but less consing."
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
643 ;; (let* ((head (cons 17 nil)) (last head))
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
644 ;; (while inlist
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
645 ;; (setcdr last (funcall func (car inlist)))
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
646 ;; (setq last (ffap-last last) inlist (cdr inlist)))
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
647 ;; (cdr head)))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
648
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
649 (defun ffap-list-env (env &optional empty)
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
650 "Return a list of strings parsed from environment variable ENV.
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
651 Optional EMPTY is the default list if \(getenv ENV\) is undefined, and
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
652 also is substituted for the first empty-string component, if there is one.
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
653 Uses `path-separator' to separate the path into substrings."
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
654 ;; We cannot use parse-colon-path (files.el), since it kills
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
655 ;; "//" entries using file-name-as-directory.
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
656 ;; Similar: dired-split, TeX-split-string, and RHOGEE's psg-list-env
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
657 ;; in ff-paths and bib-cite. The EMPTY arg may help mimic kpathsea.
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
658 (if (or empty (getenv env)) ; should return something
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
659 (let ((start 0) match dir ret)
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
660 (setq env (concat (getenv env) path-separator))
13905
7df0a9cb269a (ffap-list-env): Use `path-separator' rather than ":".
Richard M. Stallman <rms@gnu.org>
parents: 13531
diff changeset
661 (while (setq match (string-match path-separator env start))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
662 (setq dir (substring env start match) start (1+ match))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
663 ;;(and (file-directory-p dir) (not (member dir ret)) ...)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
664 (setq ret (cons dir ret)))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
665 (setq ret (nreverse ret))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
666 (and empty (setq match (member "" ret))
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
667 (progn ; allow string or list here
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
668 (setcdr match (append (cdr-safe empty) (cdr match)))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
669 (setcar match (or (car-safe empty) empty))))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
670 ret)))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
671
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
672 (defun ffap-reduce-path (path)
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
673 "Remove duplicates and non-directories from PATH list."
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
674 (let (ret tem)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
675 (while path
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
676 (setq tem path path (cdr path))
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
677 (if (equal (car tem) ".") (setcar tem ""))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
678 (or (member (car tem) ret)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
679 (not (file-directory-p (car tem)))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
680 (progn (setcdr tem ret) (setq ret tem))))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
681 (nreverse ret)))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
682
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
683 (defun ffap-all-subdirs (dir &optional depth)
106793
f0cdc68631e2 Fix typos in ffap.el.
Juanma Barranquero <lekktu@gmail.com>
parents: 106503
diff changeset
684 "Return list of all subdirectories under DIR, starting with itself.
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
685 Directories beginning with \".\" are ignored, and directory symlinks
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
686 are listed but never searched (to avoid loops).
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
687 Optional DEPTH limits search depth."
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
688 (and (file-exists-p dir)
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
689 (ffap-all-subdirs-loop (expand-file-name dir) (or depth -1))))
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
690
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
691 (defun ffap-all-subdirs-loop (dir depth) ; internal
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
692 (setq depth (1- depth))
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
693 (cons dir
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
694 (and (not (eq depth -1))
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
695 (apply 'nconc
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
696 (mapcar
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
697 (function
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
698 (lambda (d)
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
699 (cond
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
700 ((not (file-directory-p d)) nil)
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
701 ((file-symlink-p d) (list d))
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
702 (t (ffap-all-subdirs-loop d depth)))))
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
703 (directory-files dir t "\\`[^.]")
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
704 )))))
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
705
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
706 (defvar ffap-kpathsea-depth 1
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
707 "Bound on depth of subdirectory search in `ffap-kpathsea-expand-path'.
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
708 Set to 0 to avoid all searching, or nil for no limit.")
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
709
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
710 (defun ffap-kpathsea-expand-path (path)
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
711 "Replace each \"//\"-suffixed dir in PATH by a list of its subdirs.
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
712 The subdirs begin with the original directory, and the depth of the
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
713 search is bounded by `ffap-kpathsea-depth'. This is intended to mimic
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
714 kpathsea, a library used by some versions of TeX."
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
715 (apply 'nconc
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
716 (mapcar
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
717 (function
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
718 (lambda (dir)
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
719 (if (string-match "[^/]//\\'" dir)
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
720 (ffap-all-subdirs (substring dir 0 -2) ffap-kpathsea-depth)
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
721 (list dir))))
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
722 path)))
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
723
106503
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
724 (defun ffap-locate-file (file nosuffix path)
68828
6129fc95cce2 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 68651
diff changeset
725 ;; The current version of locate-library could almost replace this,
54183
b91c8ab75b81 (dired-at-point): Additional writability test for relative directory names.
Juri Linkov <juri@jurta.org>
parents: 54106
diff changeset
726 ;; except it does not let us override the suffix list. The
18486
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
727 ;; compression-suffixes search moved to ffap-file-exists-string.
106503
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
728 "A generic path-searching function.
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
729 Returns the name of file in PATH, or nil.
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
730 Optional NOSUFFIX, if nil or t, is like the fourth argument
106503
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
731 for `load': whether to try the suffixes (\".elc\" \".el\" \"\").
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
732 If a nonempty list, it is a list of suffixes to try instead.
106503
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
733 PATH is a list of directories.
18486
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
734
106503
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
735 This uses `ffap-file-exists-string', which may try adding suffixes from
18486
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
736 `ffap-compression-suffixes'."
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
737 (if (file-name-absolute-p file)
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
738 (setq path (list (file-name-directory file))
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
739 file (file-name-nondirectory file)))
106503
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
740 (let ((dir-ok (equal "" (file-name-nondirectory file)))
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
741 (suffixes-to-try
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
742 (cond
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
743 ((consp nosuffix) nosuffix)
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
744 (nosuffix '(""))
18486
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
745 (t '(".elc" ".el" ""))))
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
746 suffixes try found)
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
747 (while path
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
748 (setq suffixes suffixes-to-try)
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
749 (while suffixes
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
750 (setq try (ffap-file-exists-string
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
751 (expand-file-name
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
752 (concat file (car suffixes)) (car path))))
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
753 (if (and try (or dir-ok (not (file-directory-p try))))
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
754 (setq found try suffixes nil path nil)
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
755 (setq suffixes (cdr suffixes))))
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
756 (setq path (cdr path)))
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
757 found))
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
758
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
759
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
760 ;;; Action List (`ffap-alist'):
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
761 ;;
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
762 ;; These search actions depend on the major-mode or regexps matching
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
763 ;; the current name. The little functions and their variables are
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
764 ;; deferred to the next section, at some loss of "code locality". A
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
765 ;; good example of featuritis. Trim this list for speed.
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
766
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
767 (defvar ffap-alist
17676
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
768 '(
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
769 ("" . ffap-completable) ; completion, slow on some systems
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
770 ("\\.info\\'" . ffap-info) ; gzip.info
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
771 ("\\`info/" . ffap-info-2) ; info/emacs
75189
c456d15d23fd (ffap-next-regexp, ffap-machine-p, ffap-newsgroup-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 74439
diff changeset
772 ("\\`[-[:lower:]]+\\'" . ffap-info-3) ; (emacs)Top [only in the parentheses]
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
773 ("\\.elc?\\'" . ffap-el) ; simple.el, simple.elc
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
774 (emacs-lisp-mode . ffap-el-mode) ; rmail, gnus, simple, custom
18486
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
775 ;; (lisp-interaction-mode . ffap-el-mode) ; maybe
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
776 (finder-mode . ffap-el-mode) ; type {C-h p} and try it
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
777 (help-mode . ffap-el-mode) ; maybe useful
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
778 (c++-mode . ffap-c-mode) ; search ffap-c-path
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
779 (cc-mode . ffap-c-mode) ; same
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
780 ("\\.\\([chCH]\\|cc\\|hh\\)\\'" . ffap-c-mode) ; stdio.h
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
781 (fortran-mode . ffap-fortran-mode) ; FORTRAN requested by MDB
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
782 ("\\.[fF]\\'" . ffap-fortran-mode)
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
783 (tex-mode . ffap-tex-mode) ; search ffap-tex-path
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
784 (latex-mode . ffap-latex-mode) ; similar
17676
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
785 ("\\.\\(tex\\|sty\\|doc\\|cls\\)\\'" . ffap-tex)
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
786 ("\\.bib\\'" . ffap-bib) ; search ffap-bib-path
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
787 ("\\`\\." . ffap-home) ; .emacs, .bashrc, .profile
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
788 ("\\`~/" . ffap-lcd) ; |~/misc/ffap.el.Z|
106503
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
789 ;; This used to have a blank, but ffap-string-at-point doesn't
87822
f78c41a364cf (ffap-alist): Remove space from RFC regexp.
Glenn Morris <rgm@gnu.org>
parents: 87655
diff changeset
790 ;; handle blanks.
f78c41a364cf (ffap-alist): Remove space from RFC regexp.
Glenn Morris <rgm@gnu.org>
parents: 87655
diff changeset
791 ;; http://lists.gnu.org/archive/html/emacs-devel/2008-01/msg01058.html
106503
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
792 ("\\`[Rr][Ff][Cc][-#]?\\([0-9]+\\)" ; no $
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
793 . ffap-rfc) ; "100% RFC2100 compliant"
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
794 (dired-mode . ffap-dired) ; maybe in a subdirectory
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
795 )
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
796 "Alist of \(KEY . FUNCTION\) pairs parsed by `ffap-file-at-point'.
106793
f0cdc68631e2 Fix typos in ffap.el.
Juanma Barranquero <lekktu@gmail.com>
parents: 106503
diff changeset
797 If string NAME at point (maybe \"\") is not a file or URL, these pairs
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
798 specify actions to try creating such a string. A pair matches if either
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
799 KEY is a symbol, and it equals `major-mode', or
106793
f0cdc68631e2 Fix typos in ffap.el.
Juanma Barranquero <lekktu@gmail.com>
parents: 106503
diff changeset
800 KEY is a string, it should match NAME as a regexp.
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
801 On a match, \(FUNCTION NAME\) is called and should return a file, an
106793
f0cdc68631e2 Fix typos in ffap.el.
Juanma Barranquero <lekktu@gmail.com>
parents: 106503
diff changeset
802 URL, or nil. If nil, search the alist for further matches.")
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
803
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
804 (put 'ffap-alist 'risky-local-variable t)
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
805
18486
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
806 ;; Example `ffap-alist' modifications:
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
807 ;;
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
808 ;; (setq ffap-alist ; remove a feature in `ffap-alist'
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
809 ;; (delete (assoc 'c-mode ffap-alist) ffap-alist))
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
810 ;;
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
811 ;; (setq ffap-alist ; add something to `ffap-alist'
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
812 ;; (cons
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
813 ;; (cons "^YSN[0-9]+$"
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
814 ;; (defun ffap-ysn (name)
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
815 ;; (concat
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
816 ;; "http://www.physics.uiuc.edu/"
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
817 ;; "ysn/httpd/htdocs/ysnarchive/issuefiles/"
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
818 ;; (substring name 3) ".html")))
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
819 ;; ffap-alist))
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
820
17676
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
821
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
822 ;;; Action Definitions:
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
823 ;;
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
824 ;; Define various default members of `ffap-alist'.
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
825
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
826 (defun ffap-completable (name)
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
827 (let* ((dir (or (file-name-directory name) default-directory))
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
828 (cmp (file-name-completion (file-name-nondirectory name) dir)))
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
829 (and cmp (concat dir cmp))))
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
830
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
831 (defun ffap-home (name) (ffap-locate-file name t '("~")))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
832
17676
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
833 (defun ffap-info (name)
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
834 (ffap-locate-file
17676
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
835 name '("" ".info")
106503
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
836 (or (ffap-symbol-value 'Info-directory-list)
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
837 (ffap-symbol-value 'Info-default-directory-list)
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
838 )))
17676
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
839
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
840 (defun ffap-info-2 (name) (ffap-info (substring name 5)))
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
841
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
842 (defun ffap-info-3 (name)
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
843 ;; This ignores the node! "(emacs)Top" same as "(emacs)Intro"
17676
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
844 (and (equal (ffap-string-around) "()") (ffap-info name)))
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
845
106503
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
846 (defun ffap-el (name) (ffap-locate-file name t load-path))
17676
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
847
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
848 (defun ffap-el-mode (name)
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
849 ;; If name == "foo.el" we will skip it, since ffap-el already
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
850 ;; searched for it once. (This assumes the default ffap-alist.)
17676
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
851 (and (not (string-match "\\.el\\'" name))
106503
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
852 (ffap-locate-file name '(".el") load-path)))
17676
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
853
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
854 (defvar ffap-c-path
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
855 ;; Need smarter defaults here! Suggestions welcome.
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
856 '("/usr/include" "/usr/local/include"))
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
857 (defun ffap-c-mode (name)
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
858 (ffap-locate-file name t ffap-c-path))
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
859
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
860 (defvar ffap-fortran-path '("../include" "/usr/include"))
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
861
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
862 (defun ffap-fortran-mode (name)
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
863 (ffap-locate-file name t ffap-fortran-path))
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
864
17676
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
865 (defvar ffap-tex-path
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
866 t ; delayed initialization
106793
f0cdc68631e2 Fix typos in ffap.el.
Juanma Barranquero <lekktu@gmail.com>
parents: 106503
diff changeset
867 "Path where `ffap-tex-mode' looks for TeX files.
17676
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
868 If t, `ffap-tex-init' will initialize this when needed.")
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
869
106503
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
870 (defun ffap-tex-init ()
17676
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
871 ;; Compute ffap-tex-path if it is now t.
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
872 (and (eq t ffap-tex-path)
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
873 ;; this may be slow, so say something
17676
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
874 (message "Initializing ffap-tex-path ...")
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
875 (setq ffap-tex-path
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
876 (ffap-reduce-path
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
877 (cons
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
878 "."
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
879 (ffap-kpathsea-expand-path
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
880 (append
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
881 (ffap-list-env "TEXINPUTS")
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
882 ;; (ffap-list-env "BIBINPUTS")
106503
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
883 (ffap-symbol-value
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
884 'TeX-macro-global ; AUCTeX
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
885 '("/usr/local/lib/tex/macros"
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
886 "/usr/local/lib/tex/inputs")))))))))
17676
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
887
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
888 (defun ffap-tex-mode (name)
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
889 (ffap-tex-init)
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
890 (ffap-locate-file name '(".tex" "") ffap-tex-path))
17676
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
891
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
892 (defun ffap-latex-mode (name)
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
893 (ffap-tex-init)
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
894 ;; only rare need for ""
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
895 (ffap-locate-file name '(".cls" ".sty" ".tex" "") ffap-tex-path))
17676
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
896
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
897 (defun ffap-tex (name)
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
898 (ffap-tex-init)
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
899 (ffap-locate-file name t ffap-tex-path))
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
900
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
901 (defvar ffap-bib-path
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
902 (ffap-list-env "BIBINPUTS"
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
903 (ffap-reduce-path
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
904 '(
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
905 ;; a few wild guesses, need better
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
906 "/usr/local/lib/tex/macros/bib" ; Solaris?
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
907 "/usr/lib/texmf/bibtex/bib" ; Linux?
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
908 ))))
17676
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
909
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
910 (defun ffap-bib (name)
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
911 (ffap-locate-file name t ffap-bib-path))
17676
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
912
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
913 (defun ffap-dired (name)
94217
3a71d408918b (ffap-read-file-or-url): Do not abuse completing-read's
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
914 (let ((pt (point)) try)
17676
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
915 (save-excursion
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
916 (and (progn
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
917 (beginning-of-line)
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
918 (looking-at " *[-d]r[-w][-x][-r][-w][-x][-r][-w][-x] "))
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
919 (re-search-backward "^ *$" nil t)
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
920 (re-search-forward "^ *\\([^ \t\n:]*\\):\n *total " pt t)
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
921 (file-exists-p
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
922 (setq try
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
923 (expand-file-name
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
924 name
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
925 (buffer-substring
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
926 (match-beginning 1) (match-end 1)))))
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
927 try))))
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
928
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
929 ;; Maybe a "Lisp Code Directory" reference:
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
930 (defun ffap-lcd (name)
106503
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
931 ;; FIXME: Is this still in use?
17676
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
932 (and
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
933 (or
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
934 ;; lisp-dir-apropos output buffer:
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
935 (string-match "Lisp Code Dir" (buffer-name))
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
936 ;; Inside an LCD entry like |~/misc/ffap.el.Z|,
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
937 ;; or maybe the holy LCD-Datafile itself:
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
938 (member (ffap-string-around) '("||" "|\n")))
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
939 (concat
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
940 ;; lispdir.el may not be loaded yet:
49808
6a37bab32791 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 49694
diff changeset
941 (ffap-host-to-filename
106503
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
942 (ffap-symbol-value 'elisp-archive-host
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
943 "archive.cis.ohio-state.edu"))
17676
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
944 (file-name-as-directory
106503
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
945 (ffap-symbol-value 'elisp-archive-directory
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
946 "/pub/gnu/emacs/elisp-archive/"))
17676
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
947 (substring name 2))))
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
948
106448
992f0db2b7c1 * ffap.el (ffap-rfc-path): Make this a defcustom since
Kevin Ryde <user42@zip.com.au>
parents: 106239
diff changeset
949 (defcustom ffap-rfc-path
992f0db2b7c1 * ffap.el (ffap-rfc-path): Make this a defcustom since
Kevin Ryde <user42@zip.com.au>
parents: 106239
diff changeset
950 (concat (ffap-host-to-filename "ftp.rfc-editor.org") "/in-notes/rfc%s.txt")
992f0db2b7c1 * ffap.el (ffap-rfc-path): Make this a defcustom since
Kevin Ryde <user42@zip.com.au>
parents: 106239
diff changeset
951 "A `format' string making a filename for RFC documents.
992f0db2b7c1 * ffap.el (ffap-rfc-path): Make this a defcustom since
Kevin Ryde <user42@zip.com.au>
parents: 106239
diff changeset
952 This can be an ange-ftp or tramp remote filename to download, or
992f0db2b7c1 * ffap.el (ffap-rfc-path): Make this a defcustom since
Kevin Ryde <user42@zip.com.au>
parents: 106239
diff changeset
953 a local filename if you have full set of RFCs locally. See also
992f0db2b7c1 * ffap.el (ffap-rfc-path): Make this a defcustom since
Kevin Ryde <user42@zip.com.au>
parents: 106239
diff changeset
954 `ffap-rfc-directories'."
992f0db2b7c1 * ffap.el (ffap-rfc-path): Make this a defcustom since
Kevin Ryde <user42@zip.com.au>
parents: 106239
diff changeset
955 :type 'string
992f0db2b7c1 * ffap.el (ffap-rfc-path): Make this a defcustom since
Kevin Ryde <user42@zip.com.au>
parents: 106239
diff changeset
956 :version "23.1"
992f0db2b7c1 * ffap.el (ffap-rfc-path): Make this a defcustom since
Kevin Ryde <user42@zip.com.au>
parents: 106239
diff changeset
957 :group 'ffap)
992f0db2b7c1 * ffap.el (ffap-rfc-path): Make this a defcustom since
Kevin Ryde <user42@zip.com.au>
parents: 106239
diff changeset
958
91755
fac76be7aaf4 Kevin Ryde <user42 at zip.com.au>
Glenn Morris <rgm@gnu.org>
parents: 87822
diff changeset
959 (defcustom ffap-rfc-directories nil
fac76be7aaf4 Kevin Ryde <user42 at zip.com.au>
Glenn Morris <rgm@gnu.org>
parents: 87822
diff changeset
960 "A list of directories to look for RFC files.
fac76be7aaf4 Kevin Ryde <user42 at zip.com.au>
Glenn Morris <rgm@gnu.org>
parents: 87822
diff changeset
961 If a given RFC isn't in these then `ffap-rfc-path' is offered."
fac76be7aaf4 Kevin Ryde <user42 at zip.com.au>
Glenn Morris <rgm@gnu.org>
parents: 87822
diff changeset
962 :type '(repeat directory)
91756
962527987174 (ffap-rfc-directories): Add :version.
Glenn Morris <rgm@gnu.org>
parents: 91755
diff changeset
963 :version "23.1"
91755
fac76be7aaf4 Kevin Ryde <user42 at zip.com.au>
Glenn Morris <rgm@gnu.org>
parents: 87822
diff changeset
964 :group 'ffap)
fac76be7aaf4 Kevin Ryde <user42 at zip.com.au>
Glenn Morris <rgm@gnu.org>
parents: 87822
diff changeset
965
17676
fcbe987b332a (ffap-alist): Delete `math-mode'.
Richard M. Stallman <rms@gnu.org>
parents: 17635
diff changeset
966 (defun ffap-rfc (name)
91755
fac76be7aaf4 Kevin Ryde <user42 at zip.com.au>
Glenn Morris <rgm@gnu.org>
parents: 87822
diff changeset
967 (let ((num (match-string 1 name)))
fac76be7aaf4 Kevin Ryde <user42 at zip.com.au>
Glenn Morris <rgm@gnu.org>
parents: 87822
diff changeset
968 (or (ffap-locate-file (format "rfc%s.txt" num) t ffap-rfc-directories)
fac76be7aaf4 Kevin Ryde <user42 at zip.com.au>
Glenn Morris <rgm@gnu.org>
parents: 87822
diff changeset
969 (format ffap-rfc-path num))))
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
970
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
971
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
972 ;;; At-Point Functions:
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
973
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
974 (defvar ffap-string-at-point-mode-alist
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
975 '(
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
976 ;; The default, used when the `major-mode' is not found.
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
977 ;; Slightly controversial decisions:
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
978 ;; * strip trailing "@" and ":"
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
979 ;; * no commas (good for latex)
95784
ebad352d55ce (ffap-string-at-point-mode-alist): Use alpha rather than lower.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 95592
diff changeset
980 (file "--:\\\\$+<>@-Z_[:alpha:]~*?" "<@" "@>;.,!:")
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
981 ;; An url, or maybe a email/news message-id:
95784
ebad352d55ce (ffap-string-at-point-mode-alist): Use alpha rather than lower.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 95592
diff changeset
982 (url "--:=&?$+@-Z_[:alpha:]~#,%;*" "^[:alnum:]" ":;.,!?")
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
983 ;; Find a string that does *not* contain a colon:
95784
ebad352d55ce (ffap-string-at-point-mode-alist): Use alpha rather than lower.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 95592
diff changeset
984 (nocolon "--9$+<>@-Z_[:alpha:]~" "<@" "@>;.,!?")
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
985 ;; A machine:
75189
c456d15d23fd (ffap-next-regexp, ffap-machine-p, ffap-newsgroup-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 74439
diff changeset
986 (machine "-[:alnum:]." "" ".")
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
987 ;; Mathematica paths: allow backquotes
75189
c456d15d23fd (ffap-next-regexp, ffap-machine-p, ffap-newsgroup-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 74439
diff changeset
988 (math-mode ",-:$+<>@-Z_[:lower:]~`" "<" "@>;.,!?`:")
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
989 )
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
990 "Alist of \(MODE CHARS BEG END\), where MODE is a symbol,
23352
0550057ebca1 Doc fixes.
Karl Heuer <kwzh@gnu.org>
parents: 22659
diff changeset
991 possibly a major-mode name, or one of the symbol
0550057ebca1 Doc fixes.
Karl Heuer <kwzh@gnu.org>
parents: 22659
diff changeset
992 `file', `url', `machine', and `nocolon'.
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
993 `ffap-string-at-point' uses the data fields as follows:
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
994 1. find a maximal string of CHARS around point,
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
995 2. strip BEG chars before point from the beginning,
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
996 3. Strip END chars after point from the end.")
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
997
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
998 (defvar ffap-string-at-point nil
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
999 ;; Added at suggestion of RHOGEE (for ff-paths), 7/24/95.
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1000 "Last string returned by `ffap-string-at-point'.")
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1001
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1002 (defun ffap-string-at-point (&optional mode)
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1003 "Return a string of characters from around point.
23352
0550057ebca1 Doc fixes.
Karl Heuer <kwzh@gnu.org>
parents: 22659
diff changeset
1004 MODE (defaults to value of `major-mode') is a symbol used to look up string
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1005 syntax parameters in `ffap-string-at-point-mode-alist'.
23352
0550057ebca1 Doc fixes.
Karl Heuer <kwzh@gnu.org>
parents: 22659
diff changeset
1006 If MODE is not found, we use `file' instead of MODE.
54183
b91c8ab75b81 (dired-at-point): Additional writability test for relative directory names.
Juri Linkov <juri@jurta.org>
parents: 54106
diff changeset
1007 If the region is active, return a string from the region.
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1008 Sets `ffap-string-at-point' and `ffap-string-at-point-region'."
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1009 (let* ((args
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1010 (cdr
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1011 (or (assq (or mode major-mode) ffap-string-at-point-mode-alist)
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1012 (assq 'file ffap-string-at-point-mode-alist))))
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1013 (pt (point))
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1014 (str
54183
b91c8ab75b81 (dired-at-point): Additional writability test for relative directory names.
Juri Linkov <juri@jurta.org>
parents: 54106
diff changeset
1015 (if (and transient-mark-mode mark-active)
b91c8ab75b81 (dired-at-point): Additional writability test for relative directory names.
Juri Linkov <juri@jurta.org>
parents: 54106
diff changeset
1016 (buffer-substring
b91c8ab75b81 (dired-at-point): Additional writability test for relative directory names.
Juri Linkov <juri@jurta.org>
parents: 54106
diff changeset
1017 (setcar ffap-string-at-point-region (region-beginning))
b91c8ab75b81 (dired-at-point): Additional writability test for relative directory names.
Juri Linkov <juri@jurta.org>
parents: 54106
diff changeset
1018 (setcar (cdr ffap-string-at-point-region) (region-end)))
b91c8ab75b81 (dired-at-point): Additional writability test for relative directory names.
Juri Linkov <juri@jurta.org>
parents: 54106
diff changeset
1019 (buffer-substring
b91c8ab75b81 (dired-at-point): Additional writability test for relative directory names.
Juri Linkov <juri@jurta.org>
parents: 54106
diff changeset
1020 (save-excursion
b91c8ab75b81 (dired-at-point): Additional writability test for relative directory names.
Juri Linkov <juri@jurta.org>
parents: 54106
diff changeset
1021 (skip-chars-backward (car args))
b91c8ab75b81 (dired-at-point): Additional writability test for relative directory names.
Juri Linkov <juri@jurta.org>
parents: 54106
diff changeset
1022 (skip-chars-forward (nth 1 args) pt)
b91c8ab75b81 (dired-at-point): Additional writability test for relative directory names.
Juri Linkov <juri@jurta.org>
parents: 54106
diff changeset
1023 (setcar ffap-string-at-point-region (point)))
b91c8ab75b81 (dired-at-point): Additional writability test for relative directory names.
Juri Linkov <juri@jurta.org>
parents: 54106
diff changeset
1024 (save-excursion
b91c8ab75b81 (dired-at-point): Additional writability test for relative directory names.
Juri Linkov <juri@jurta.org>
parents: 54106
diff changeset
1025 (skip-chars-forward (car args))
b91c8ab75b81 (dired-at-point): Additional writability test for relative directory names.
Juri Linkov <juri@jurta.org>
parents: 54106
diff changeset
1026 (skip-chars-backward (nth 2 args) pt)
b91c8ab75b81 (dired-at-point): Additional writability test for relative directory names.
Juri Linkov <juri@jurta.org>
parents: 54106
diff changeset
1027 (setcar (cdr ffap-string-at-point-region) (point)))))))
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1028 (set-text-properties 0 (length str) nil str)
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1029 (setq ffap-string-at-point str)))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1030
106503
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
1031 (defun ffap-string-around ()
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1032 ;; Sometimes useful to decide how to treat a string.
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1033 "Return string of two chars around last `ffap-string-at-point'.
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1034 Assumes the buffer has not changed."
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1035 (save-excursion
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1036 (format "%c%c"
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1037 (progn
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1038 (goto-char (car ffap-string-at-point-region))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1039 (preceding-char)) ; maybe 0
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1040 (progn
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1041 (goto-char (nth 1 ffap-string-at-point-region))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1042 (following-char)) ; maybe 0
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1043 )))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1044
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1045 (defun ffap-copy-string-as-kill (&optional mode)
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1046 ;; Requested by MCOOK. Useful?
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1047 "Call `ffap-string-at-point', and copy result to `kill-ring'."
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1048 (interactive)
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1049 (let ((str (ffap-string-at-point mode)))
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1050 (if (equal "" str)
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1051 (message "No string found around point.")
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1052 (kill-new str)
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1053 ;; Older: (apply 'copy-region-as-kill ffap-string-at-point-region)
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1054 (message "Copied to kill ring: %s" str))))
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1055
86479
0ea24c4dea5d (ffap-bug, ffap-submit-bug): Redefine as obsolete aliases for
Glenn Morris <rgm@gnu.org>
parents: 84866
diff changeset
1056 ;; External.
86812
5a96d566fe43 (w3-view-this-url): Declare as a function.
Glenn Morris <rgm@gnu.org>
parents: 86479
diff changeset
1057 (declare-function w3-view-this-url "ext:w3" (&optional no-show))
86479
0ea24c4dea5d (ffap-bug, ffap-submit-bug): Redefine as obsolete aliases for
Glenn Morris <rgm@gnu.org>
parents: 84866
diff changeset
1058
106503
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
1059 (defun ffap-url-at-point ()
106793
f0cdc68631e2 Fix typos in ffap.el.
Juanma Barranquero <lekktu@gmail.com>
parents: 106503
diff changeset
1060 "Return URL from around point if it exists, or nil."
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1061 ;; Could use w3's url-get-url-at-point instead. Both handle "URL:",
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1062 ;; ignore non-relative links, trim punctuation. The other will
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1063 ;; actually look back if point is in whitespace, but I would rather
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1064 ;; ffap be less aggressive in such situations.
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1065 (and
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1066 ffap-url-regexp
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1067 (or
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1068 ;; In a w3 buffer button?
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1069 (and (eq major-mode 'w3-mode)
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1070 ;; interface recommended by wmperry:
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1071 (w3-view-this-url t))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1072 ;; Is there a reason not to strip trailing colon?
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1073 (let ((name (ffap-string-at-point 'url)))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1074 (cond
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1075 ((string-match "^url:" name) (setq name (substring name 4)))
75189
c456d15d23fd (ffap-next-regexp, ffap-machine-p, ffap-newsgroup-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 74439
diff changeset
1076 ((and (string-match "\\`[^:</>@]+@[^:</>@]+[[:alnum:]]\\'" name)
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1077 ;; "foo@bar": could be "mailto" or "news" (a Message-ID).
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1078 ;; Without "<>" it must be "mailto". Otherwise could be
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1079 ;; either, so consult `ffap-foo-at-bar-prefix'.
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1080 (let ((prefix (if (and (equal (ffap-string-around) "<>")
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1081 ;; Expect some odd characters:
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1082 (string-match "[$.0-9].*[$.0-9].*@" name))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1083 ;; Could be news:
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1084 ffap-foo-at-bar-prefix
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1085 "mailto")))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1086 (and prefix (setq name (concat prefix ":" name))))))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1087 ((ffap-newsgroup-p name) (setq name (concat "news:" name)))
75189
c456d15d23fd (ffap-next-regexp, ffap-machine-p, ffap-newsgroup-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 74439
diff changeset
1088 ((and (string-match "\\`[[:alnum:]]+\\'" name) ; <mic> <root> <nobody>
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1089 (equal (ffap-string-around) "<>")
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1090 ;; (ffap-user-p name):
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1091 (not (string-match "~" (expand-file-name (concat "~" name))))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1092 )
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1093 (setq name (concat "mailto:" name)))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1094 )
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1095 (and (ffap-url-p name) name)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1096 ))))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1097
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1098 (defvar ffap-gopher-regexp
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1099 "^.*\\<\\(Type\\|Name\\|Path\\|Host\\|Port\\) *= *\\(.*\\) *$"
106793
f0cdc68631e2 Fix typos in ffap.el.
Juanma Barranquero <lekktu@gmail.com>
parents: 106503
diff changeset
1100 "Regexp matching a line in a gopher bookmark (maybe indented).
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1101 The two subexpressions are the KEY and VALUE.")
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1102
106503
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
1103 (defun ffap-gopher-at-point ()
106793
f0cdc68631e2 Fix typos in ffap.el.
Juanma Barranquero <lekktu@gmail.com>
parents: 106503
diff changeset
1104 "If point is inside a gopher bookmark block, return its URL."
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1105 ;; `gopher-parse-bookmark' from gopher.el is not so robust
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1106 (save-excursion
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1107 (beginning-of-line)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1108 (if (looking-at ffap-gopher-regexp)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1109 (progn
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1110 (while (and (looking-at ffap-gopher-regexp) (not (bobp)))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1111 (forward-line -1))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1112 (or (looking-at ffap-gopher-regexp) (forward-line 1))
106503
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
1113 (let ((type "1") path host (port "70"))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1114 (while (looking-at ffap-gopher-regexp)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1115 (let ((var (intern
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1116 (downcase
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1117 (buffer-substring (match-beginning 1)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1118 (match-end 1)))))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1119 (val (buffer-substring (match-beginning 2)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1120 (match-end 2))))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1121 (set var val)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1122 (forward-line 1)))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1123 (if (and path (string-match "^ftp:.*@" path))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1124 (concat "ftp://"
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1125 (substring path 4 (1- (match-end 0)))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1126 (substring path (match-end 0)))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1127 (and (= (length type) 1)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1128 host;; (ffap-machine-p host)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1129 (concat "gopher://" host
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1130 (if (equal port "70") "" (concat ":" port))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1131 "/" type path))))))))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1132
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1133 (defvar ffap-ftp-sans-slash-regexp
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1134 (and
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1135 ffap-ftp-regexp
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1136 ;; Note: by now, we know it is not an url.
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1137 ;; Icky regexp avoids: default: 123: foo::bar cs:pub
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1138 ;; It does match on: mic@cs: cs:/pub mathcs.emory.edu: (point at end)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1139 "\\`\\([^:@]+@[^:@]+:\\|[^@.:]+\\.[^@:]+:\\|[^:]+:[~/]\\)\\([^:]\\|\\'\\)")
49808
6a37bab32791 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 49694
diff changeset
1140 "Strings matching this are coerced to ftp file names by ffap.
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1141 That is, ffap just prepends \"/\". Set to nil to disable.")
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1142
106503
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
1143 (defun ffap-file-at-point ()
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1144 "Return filename from around point if it exists, or nil.
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1145 Existence test is skipped for names that look remote.
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1146 If the filename is not obvious, it also tries `ffap-alist',
106793
f0cdc68631e2 Fix typos in ffap.el.
Juanma Barranquero <lekktu@gmail.com>
parents: 106503
diff changeset
1147 which may actually result in an URL rather than a filename."
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1148 ;; Note: this function does not need to look for url's, just
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1149 ;; filenames. On the other hand, it is responsible for converting
49808
6a37bab32791 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 49694
diff changeset
1150 ;; a pseudo-url "site.com://dir" to an ftp file name
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1151 (let* ((case-fold-search t) ; url prefixes are case-insensitive
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1152 (data (match-data))
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1153 (string (ffap-string-at-point)) ; uses mode alist
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1154 (name
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1155 (or (condition-case nil
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1156 (and (not (string-match "//" string)) ; foo.com://bar
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1157 (substitute-in-file-name string))
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1158 (error nil))
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1159 string))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1160 (abs (file-name-absolute-p name))
77014
7f75e6af1a34 (ffap-file-at-point): Lower the priority of the
Glenn Morris <rgm@gnu.org>
parents: 75189
diff changeset
1161 (default-directory default-directory)
7f75e6af1a34 (ffap-file-at-point): Lower the priority of the
Glenn Morris <rgm@gnu.org>
parents: 75189
diff changeset
1162 (oname name))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1163 (unwind-protect
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1164 (cond
58923
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1165 ;; Immediate rejects (/ and // and /* are too common in C/C++):
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1166 ((member name '("" "/" "//" "/*" ".")) nil)
24312
24ffa91626d3 (ffap-file-at-point): Test local file names
Richard M. Stallman <rms@gnu.org>
parents: 23443
diff changeset
1167 ;; Immediately test local filenames. If default-directory is
24ffa91626d3 (ffap-file-at-point): Test local file names
Richard M. Stallman <rms@gnu.org>
parents: 23443
diff changeset
1168 ;; remote, you probably already have a connection.
24ffa91626d3 (ffap-file-at-point): Test local file names
Richard M. Stallman <rms@gnu.org>
parents: 23443
diff changeset
1169 ((and (not abs) (ffap-file-exists-string name)))
24ffa91626d3 (ffap-file-at-point): Test local file names
Richard M. Stallman <rms@gnu.org>
parents: 23443
diff changeset
1170 ;; Try stripping off line numbers; good for compilation/grep output.
24ffa91626d3 (ffap-file-at-point): Test local file names
Richard M. Stallman <rms@gnu.org>
parents: 23443
diff changeset
1171 ((and (not abs) (string-match ":[0-9]" name)
24ffa91626d3 (ffap-file-at-point): Test local file names
Richard M. Stallman <rms@gnu.org>
parents: 23443
diff changeset
1172 (ffap-file-exists-string (substring name 0 (match-beginning 0)))))
52672
d4d213cfb340 whitespace.el now takes user customizable variable to display cleanliness of
Rajesh Vaidheeswarran <rv@gnu.org>
parents: 52401
diff changeset
1173 ;; Try stripping off prominent (non-root - #) shell prompts
d4d213cfb340 whitespace.el now takes user customizable variable to display cleanliness of
Rajesh Vaidheeswarran <rv@gnu.org>
parents: 52401
diff changeset
1174 ;; if the ffap-shell-prompt-regexp is non-nil.
d4d213cfb340 whitespace.el now takes user customizable variable to display cleanliness of
Rajesh Vaidheeswarran <rv@gnu.org>
parents: 52401
diff changeset
1175 ((and ffap-shell-prompt-regexp
d4d213cfb340 whitespace.el now takes user customizable variable to display cleanliness of
Rajesh Vaidheeswarran <rv@gnu.org>
parents: 52401
diff changeset
1176 (not abs) (string-match ffap-shell-prompt-regexp name)
d4d213cfb340 whitespace.el now takes user customizable variable to display cleanliness of
Rajesh Vaidheeswarran <rv@gnu.org>
parents: 52401
diff changeset
1177 (ffap-file-exists-string (substring name (match-end 0)))))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1178 ;; Accept remote names without actual checking (too slow):
77014
7f75e6af1a34 (ffap-file-at-point): Lower the priority of the
Glenn Morris <rgm@gnu.org>
parents: 75189
diff changeset
1179 ((and abs (ffap-file-remote-p name)))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1180 ;; Ok, not remote, try the existence test even if it is absolute:
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1181 ((and abs (ffap-file-exists-string name)))
104886
386dbc11f8f7 (ffap-file-at-point): Handle absolute (non-remote) files with line
Glenn Morris <rgm@gnu.org>
parents: 103730
diff changeset
1182 ;; Try stripping off line numbers.
386dbc11f8f7 (ffap-file-at-point): Handle absolute (non-remote) files with line
Glenn Morris <rgm@gnu.org>
parents: 103730
diff changeset
1183 ((and abs (string-match ":[0-9]" name)
386dbc11f8f7 (ffap-file-at-point): Handle absolute (non-remote) files with line
Glenn Morris <rgm@gnu.org>
parents: 103730
diff changeset
1184 (ffap-file-exists-string (substring name 0 (match-beginning 0)))))
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1185 ;; If it contains a colon, get rid of it (and return if exists)
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1186 ((and (string-match path-separator name)
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1187 (setq name (ffap-string-at-point 'nocolon))
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1188 (ffap-file-exists-string name)))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1189 ;; File does not exist, try the alist:
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1190 ((let ((alist ffap-alist) tem try case-fold-search)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1191 (while (and alist (not try))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1192 (setq tem (car alist) alist (cdr alist))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1193 (if (or (eq major-mode (car tem))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1194 (and (stringp (car tem))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1195 (string-match (car tem) name)))
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1196 (and (setq try
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1197 (condition-case nil
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1198 (funcall (cdr tem) name)
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1199 (error nil)))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1200 (setq try (or
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1201 (ffap-url-p try) ; not a file!
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1202 (ffap-file-remote-p try)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1203 (ffap-file-exists-string try))))))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1204 try))
77014
7f75e6af1a34 (ffap-file-at-point): Lower the priority of the
Glenn Morris <rgm@gnu.org>
parents: 75189
diff changeset
1205 ;; Try adding a leading "/" (common omission in ftp file names).
7f75e6af1a34 (ffap-file-at-point): Lower the priority of the
Glenn Morris <rgm@gnu.org>
parents: 75189
diff changeset
1206 ;; Note that this uses oname, which still has any colon part.
7f75e6af1a34 (ffap-file-at-point): Lower the priority of the
Glenn Morris <rgm@gnu.org>
parents: 75189
diff changeset
1207 ;; This should have a lower priority than the alist stuff,
7f75e6af1a34 (ffap-file-at-point): Lower the priority of the
Glenn Morris <rgm@gnu.org>
parents: 75189
diff changeset
1208 ;; else it matches things like "ffap.el:1234:56:Warning".
7f75e6af1a34 (ffap-file-at-point): Lower the priority of the
Glenn Morris <rgm@gnu.org>
parents: 75189
diff changeset
1209 ((and (not abs)
7f75e6af1a34 (ffap-file-at-point): Lower the priority of the
Glenn Morris <rgm@gnu.org>
parents: 75189
diff changeset
1210 ffap-ftp-sans-slash-regexp
7f75e6af1a34 (ffap-file-at-point): Lower the priority of the
Glenn Morris <rgm@gnu.org>
parents: 75189
diff changeset
1211 (string-match ffap-ftp-sans-slash-regexp oname)
7f75e6af1a34 (ffap-file-at-point): Lower the priority of the
Glenn Morris <rgm@gnu.org>
parents: 75189
diff changeset
1212 (ffap-file-remote-p (concat "/" oname))))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1213 ;; Alist failed? Try to guess an active remote connection
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1214 ;; from buffer variables, and try once more, both as an
49808
6a37bab32791 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 49694
diff changeset
1215 ;; absolute and relative file name on that remote host.
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1216 ((let* (ffap-rfs-regexp ; suppress
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1217 (remote-dir
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1218 (cond
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1219 ((ffap-file-remote-p default-directory))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1220 ((and (eq major-mode 'internal-ange-ftp-mode)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1221 (string-match "^\\*ftp \\(.*\\)@\\(.*\\)\\*$"
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1222 (buffer-name)))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1223 (concat "/" (substring (buffer-name) 5 -1) ":"))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1224 ;; This is too often a bad idea:
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1225 ;;((and (eq major-mode 'w3-mode)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1226 ;; (stringp url-current-server))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1227 ;; (host-to-ange-path url-current-server))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1228 )))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1229 (and remote-dir
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1230 (or
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1231 (and (string-match "\\`\\(/?~?ftp\\)/" name)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1232 (ffap-file-exists-string
49808
6a37bab32791 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 49694
diff changeset
1233 (ffap-replace-file-component
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1234 remote-dir (substring name (match-end 1)))))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1235 (ffap-file-exists-string
49808
6a37bab32791 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 49694
diff changeset
1236 (ffap-replace-file-component remote-dir name))))))
58923
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1237 ((and ffap-dired-wildcards
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1238 (string-match ffap-dired-wildcards name)
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1239 abs
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1240 (ffap-file-exists-string (file-name-directory
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1241 (directory-file-name name)))
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1242 name))
54106
9aa83ff74ef0 (ffap-file-at-point): Try parent directories.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53313
diff changeset
1243 ;; Try all parent directories by deleting the trailing directory
9aa83ff74ef0 (ffap-file-at-point): Try parent directories.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53313
diff changeset
1244 ;; name until existing directory is found or name stops changing
9aa83ff74ef0 (ffap-file-at-point): Try parent directories.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53313
diff changeset
1245 ((let ((dir name))
9aa83ff74ef0 (ffap-file-at-point): Try parent directories.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53313
diff changeset
1246 (while (and dir
9aa83ff74ef0 (ffap-file-at-point): Try parent directories.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53313
diff changeset
1247 (not (ffap-file-exists-string dir))
9aa83ff74ef0 (ffap-file-at-point): Try parent directories.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53313
diff changeset
1248 (not (equal dir (setq dir (file-name-directory
9aa83ff74ef0 (ffap-file-at-point): Try parent directories.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53313
diff changeset
1249 (directory-file-name dir)))))))
9aa83ff74ef0 (ffap-file-at-point): Try parent directories.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53313
diff changeset
1250 (ffap-file-exists-string dir)))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1251 )
21155
5df2a690a85f (ffap-file-at-point): store-match-data => set-match-data.
Richard M. Stallman <rms@gnu.org>
parents: 18486
diff changeset
1252 (set-match-data data))))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1253
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1254 ;;; Prompting (`ffap-read-file-or-url'):
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1255 ;;
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1256 ;; We want to complete filenames as in read-file-name, but also url's
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1257 ;; which read-file-name-internal would truncate at the "//" string.
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1258 ;; The solution here is to replace read-file-name-internal with
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1259 ;; `ffap-read-file-or-url-internal', which checks the minibuffer
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1260 ;; contents before attempting to complete filenames.
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1261
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1262 (defun ffap-read-file-or-url (prompt guess)
106793
f0cdc68631e2 Fix typos in ffap.el.
Juanma Barranquero <lekktu@gmail.com>
parents: 106503
diff changeset
1263 "Read file or URL from minibuffer, with PROMPT and initial GUESS."
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1264 (or guess (setq guess default-directory))
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1265 (let (dir)
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1266 ;; Tricky: guess may have or be a local directory, like "w3/w3.elc"
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1267 ;; or "w3/" or "../el/ffap.el" or "../../../"
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1268 (or (ffap-url-p guess)
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1269 (progn
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1270 (or (ffap-file-remote-p guess)
18486
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1271 (setq guess
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1272 (abbreviate-file-name (expand-file-name guess))
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1273 ))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1274 (setq dir (file-name-directory guess))))
69009
3fe40c860c66 (ffap-read-file-or-url): Bind `completion-ignore-case' to value of
John Paul Wallington <jpw@pobox.com>
parents: 68982
diff changeset
1275 (let ((minibuffer-completing-file-name t)
79697
6c63d304805f * ffap.el (ffap-read-file-or-url): Let-bind
Michael Albinus <michael.albinus@gmx.de>
parents: 78236
diff changeset
1276 (completion-ignore-case read-file-name-completion-ignore-case)
87653
3091cbee6fd8 (ffap-read-file-or-url): Don't use let-binding to temporarily
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 87649
diff changeset
1277 (fnh-elem (cons ffap-url-regexp 'url-file-handler)))
3091cbee6fd8 (ffap-read-file-or-url): Don't use let-binding to temporarily
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 87649
diff changeset
1278 ;; Explain to `rfn-eshadow' that we can use URLs here.
3091cbee6fd8 (ffap-read-file-or-url): Don't use let-binding to temporarily
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 87649
diff changeset
1279 (push fnh-elem file-name-handler-alist)
3091cbee6fd8 (ffap-read-file-or-url): Don't use let-binding to temporarily
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 87649
diff changeset
1280 (unwind-protect
3091cbee6fd8 (ffap-read-file-or-url): Don't use let-binding to temporarily
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 87649
diff changeset
1281 (setq guess
94217
3a71d408918b (ffap-read-file-or-url): Do not abuse completing-read's
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
1282 (let ((default-directory (if dir (expand-file-name dir)
3a71d408918b (ffap-read-file-or-url): Do not abuse completing-read's
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
1283 default-directory)))
3a71d408918b (ffap-read-file-or-url): Do not abuse completing-read's
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
1284 (completing-read
3a71d408918b (ffap-read-file-or-url): Do not abuse completing-read's
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
1285 prompt
3a71d408918b (ffap-read-file-or-url): Do not abuse completing-read's
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
1286 'ffap-read-file-or-url-internal
3a71d408918b (ffap-read-file-or-url): Do not abuse completing-read's
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
1287 nil
3a71d408918b (ffap-read-file-or-url): Do not abuse completing-read's
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
1288 nil
3a71d408918b (ffap-read-file-or-url): Do not abuse completing-read's
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
1289 (if dir (cons guess (length dir)) guess)
3a71d408918b (ffap-read-file-or-url): Do not abuse completing-read's
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
1290 (list 'file-name-history)
3a71d408918b (ffap-read-file-or-url): Do not abuse completing-read's
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
1291 (and buffer-file-name
3a71d408918b (ffap-read-file-or-url): Do not abuse completing-read's
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
1292 (abbreviate-file-name buffer-file-name)))))
87653
3091cbee6fd8 (ffap-read-file-or-url): Don't use let-binding to temporarily
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 87649
diff changeset
1293 ;; Remove the special handler manually. We used to just let-bind
3091cbee6fd8 (ffap-read-file-or-url): Don't use let-binding to temporarily
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 87649
diff changeset
1294 ;; file-name-handler-alist to preserve its value, but that caused
3091cbee6fd8 (ffap-read-file-or-url): Don't use let-binding to temporarily
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 87649
diff changeset
1295 ;; other modifications to be lost (e.g. when Tramp gets loaded
3091cbee6fd8 (ffap-read-file-or-url): Don't use let-binding to temporarily
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 87649
diff changeset
1296 ;; during the completing-read call).
3091cbee6fd8 (ffap-read-file-or-url): Don't use let-binding to temporarily
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 87649
diff changeset
1297 (setq file-name-handler-alist (delq fnh-elem file-name-handler-alist))))
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1298 ;; Do file substitution like (interactive "F"), suggested by MCOOK.
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1299 (or (ffap-url-p guess) (setq guess (substitute-in-file-name guess)))
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1300 ;; Should not do it on url's, where $ is a common (VMS?) character.
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1301 ;; Note: upcoming url.el package ought to handle this automatically.
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1302 guess))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1303
94217
3a71d408918b (ffap-read-file-or-url): Do not abuse completing-read's
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
1304 (defun ffap-read-url-internal (string pred action)
106793
f0cdc68631e2 Fix typos in ffap.el.
Juanma Barranquero <lekktu@gmail.com>
parents: 106503
diff changeset
1305 "Complete URLs from history, treating given string as valid."
106503
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
1306 (let ((hist (ffap-symbol-value 'url-global-history-hash-table)))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1307 (cond
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1308 ((not action)
94217
3a71d408918b (ffap-read-file-or-url): Do not abuse completing-read's
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
1309 (or (try-completion string hist pred) string))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1310 ((eq action t)
94217
3a71d408918b (ffap-read-file-or-url): Do not abuse completing-read's
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
1311 (or (all-completions string hist pred) (list string)))
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1312 ;; action == lambda, documented where? Tests whether string is a
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1313 ;; valid "match". Let us always say yes.
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1314 (t t))))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1315
94217
3a71d408918b (ffap-read-file-or-url): Do not abuse completing-read's
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
1316 (defun ffap-read-file-or-url-internal (string pred action)
3a71d408918b (ffap-read-file-or-url): Do not abuse completing-read's
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
1317 (unless string ;Why would this ever happen?
30687
34027013888a (ffap-read-file-or-url-internal): Handle case the
Gerd Moellmann <gerd@gnu.org>
parents: 29203
diff changeset
1318 (setq string default-directory))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1319 (if (ffap-url-p string)
94217
3a71d408918b (ffap-read-file-or-url): Do not abuse completing-read's
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
1320 (ffap-read-url-internal string pred action)
3a71d408918b (ffap-read-file-or-url): Do not abuse completing-read's
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
1321 (read-file-name-internal string pred action)))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1322
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1323 ;; The rest of this page is just to work with package complete.el.
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1324 ;; This code assumes that you load ffap.el after complete.el.
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1325 ;;
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1326 ;; We must inform complete about whether our completion function
52731
82315f163e1e removed defadvice related code from ffap
Rajesh Vaidheeswarran <rv@gnu.org>
parents: 52689
diff changeset
1327 ;; will do filename style completion.
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1328
106503
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
1329 (defun ffap-complete-as-file-p ()
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1330 ;; Will `minibuffer-completion-table' complete the minibuffer
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1331 ;; contents as a filename? Assumes the minibuffer is current.
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1332 ;; Note: t and non-nil mean somewhat different reasons.
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1333 (if (eq minibuffer-completion-table 'ffap-read-file-or-url-internal)
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1334 (not (ffap-url-p (buffer-string))) ; t
49694
3738a81ff66f (ffap-complete-as-file-p): Use minibuffer-completing-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49588
diff changeset
1335 (and minibuffer-completing-file-name '(t)))) ;list
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1336
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1337 (and
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1338 (featurep 'complete)
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1339 (if (boundp 'PC-completion-as-file-name-predicate)
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1340 ;; modern version of complete.el, just set the variable:
52731
82315f163e1e removed defadvice related code from ffap
Rajesh Vaidheeswarran <rv@gnu.org>
parents: 52689
diff changeset
1341 (setq PC-completion-as-file-name-predicate 'ffap-complete-as-file-p)))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1342
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1343
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1344 ;;; Highlighting (`ffap-highlight'):
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1345 ;;
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1346 ;; Based on overlay highlighting in Emacs 19.28 isearch.el.
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1347
29203
004bedde23fc (ffap-menu-text-plist): Use display-mouse-p, not window-system.
Eli Zaretskii <eliz@gnu.org>
parents: 29117
diff changeset
1348 (defvar ffap-highlight t
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1349 "If non-nil, ffap highlights the current buffer substring.")
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1350
68982
72b641ca5ff3 (ffap) <defface>: Add explicit face declaration.
Juri Linkov <juri@jurta.org>
parents: 68828
diff changeset
1351 (defface ffap
72b641ca5ff3 (ffap) <defface>: Add explicit face declaration.
Juri Linkov <juri@jurta.org>
parents: 68828
diff changeset
1352 '((t :inherit highlight))
72b641ca5ff3 (ffap) <defface>: Add explicit face declaration.
Juri Linkov <juri@jurta.org>
parents: 68828
diff changeset
1353 "Face used to highlight the current buffer substring."
72b641ca5ff3 (ffap) <defface>: Add explicit face declaration.
Juri Linkov <juri@jurta.org>
parents: 68828
diff changeset
1354 :group 'ffap
72b641ca5ff3 (ffap) <defface>: Add explicit face declaration.
Juri Linkov <juri@jurta.org>
parents: 68828
diff changeset
1355 :version "22.1")
72b641ca5ff3 (ffap) <defface>: Add explicit face declaration.
Juri Linkov <juri@jurta.org>
parents: 68828
diff changeset
1356
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1357 (defvar ffap-highlight-overlay nil
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1358 "Overlay used by `ffap-highlight'.")
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1359
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1360 (defun ffap-highlight (&optional remove)
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1361 "If `ffap-highlight' is set, highlight the guess in this buffer.
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1362 That is, the last buffer substring found by `ffap-string-at-point'.
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1363 Optional argument REMOVE means to remove any such highlighting.
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1364 Uses the face `ffap' if it is defined, or else `highlight'."
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1365 (cond
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1366 (remove
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1367 (and ffap-highlight-overlay
18486
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1368 (delete-overlay ffap-highlight-overlay))
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1369 )
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1370 ((not ffap-highlight) nil)
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1371 (ffap-highlight-overlay
18486
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1372 (move-overlay
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1373 ffap-highlight-overlay
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1374 (car ffap-string-at-point-region)
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1375 (nth 1 ffap-string-at-point-region)
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1376 (current-buffer)))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1377 (t
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1378 (setq ffap-highlight-overlay
18486
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1379 (apply 'make-overlay ffap-string-at-point-region))
68982
72b641ca5ff3 (ffap) <defface>: Add explicit face declaration.
Juri Linkov <juri@jurta.org>
parents: 68828
diff changeset
1380 (overlay-put ffap-highlight-overlay 'face 'ffap))))
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1381
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1382
18486
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1383 ;;; Main Entrance (`find-file-at-point' == `ffap'):
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1384
106503
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
1385 (defun ffap-guesser ()
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1386 "Return file or URL or nil, guessed from text around point."
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1387 (or (and ffap-url-regexp
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1388 (ffap-fixup-url (or (ffap-url-at-point)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1389 (ffap-gopher-at-point))))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1390 (ffap-file-at-point) ; may yield url!
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1391 (ffap-fixup-machine (ffap-machine-at-point))))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1392
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1393 (defun ffap-prompter (&optional guess)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1394 ;; Does guess and prompt step for find-file-at-point.
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1395 ;; Extra complication for the temporary highlighting.
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1396 (unwind-protect
18486
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1397 ;; This catch will let ffap-alist entries do their own prompting
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1398 ;; and then maybe skip over this prompt (ff-paths, for example).
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1399 (catch 'ffap-prompter
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1400 (ffap-read-file-or-url
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1401 (if ffap-url-regexp "Find file or URL: " "Find file: ")
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1402 (prog1
95592
d05c87c7a8ed (ffap-prompter): Don't use the region.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94678
diff changeset
1403 (let ((mark-active nil))
d05c87c7a8ed (ffap-prompter): Don't use the region.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94678
diff changeset
1404 ;; Don't use the region here, since it can be something
d05c87c7a8ed (ffap-prompter): Don't use the region.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94678
diff changeset
1405 ;; completely unwieldy. If the user wants that, she could
d05c87c7a8ed (ffap-prompter): Don't use the region.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94678
diff changeset
1406 ;; use M-w before and then C-y. --Stef
d05c87c7a8ed (ffap-prompter): Don't use the region.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94678
diff changeset
1407 (setq guess (or guess (ffap-guesser)))) ; using ffap-alist here
18486
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1408 (and guess (ffap-highlight))
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1409 )))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1410 (ffap-highlight t)))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1411
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1412 ;;;###autoload
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1413 (defun find-file-at-point (&optional filename)
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1414 "Find FILENAME, guessing a default from text around point.
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1415 If `ffap-url-regexp' is not nil, the FILENAME may also be an URL.
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1416 With a prefix, this command behaves exactly like `ffap-file-finder'.
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1417 If `ffap-require-prefix' is set, the prefix meaning is reversed.
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1418 See also the variables `ffap-dired-wildcards', `ffap-newfile-prompt',
66184
4cc03ba58cf8 (find-file-at-point): Doc fix.
Romain Francoise <romain@orebokech.com>
parents: 64797
diff changeset
1419 and the functions `ffap-file-at-point' and `ffap-url-at-point'."
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1420 (interactive)
105372
bd2966850aac Use `called-interactively-p' instead of `interactive-p'.
Juanma Barranquero <lekktu@gmail.com>
parents: 104886
diff changeset
1421 (if (and (called-interactively-p 'interactive)
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1422 (if ffap-require-prefix (not current-prefix-arg)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1423 current-prefix-arg))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1424 ;; Do exactly the ffap-file-finder command, even the prompting:
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1425 (let (current-prefix-arg) ; we already interpreted it
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1426 (call-interactively ffap-file-finder))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1427 (or filename (setq filename (ffap-prompter)))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1428 (cond
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1429 ((ffap-url-p filename)
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1430 (let (current-prefix-arg) ; w3 2.3.25 bug, reported by KPC
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1431 (funcall ffap-url-fetcher filename)))
61365
e59db0620294 (ffap-pass-wildcards-to-dired): New user option to
Juri Linkov <juri@jurta.org>
parents: 59105
diff changeset
1432 ((and ffap-pass-wildcards-to-dired
e59db0620294 (ffap-pass-wildcards-to-dired): New user option to
Juri Linkov <juri@jurta.org>
parents: 59105
diff changeset
1433 ffap-dired-wildcards
e59db0620294 (ffap-pass-wildcards-to-dired): New user option to
Juri Linkov <juri@jurta.org>
parents: 59105
diff changeset
1434 (string-match ffap-dired-wildcards filename))
e59db0620294 (ffap-pass-wildcards-to-dired): New user option to
Juri Linkov <juri@jurta.org>
parents: 59105
diff changeset
1435 (funcall ffap-directory-finder filename))
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1436 ((and ffap-dired-wildcards
58923
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1437 (string-match ffap-dired-wildcards filename)
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1438 find-file-wildcards
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1439 ;; Check if it's find-file that supports wildcards arg
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1440 (memq ffap-file-finder '(find-file find-alternate-file)))
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1441 (funcall ffap-file-finder (expand-file-name filename) t))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1442 ((or (not ffap-newfile-prompt)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1443 (file-exists-p filename)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1444 (y-or-n-p "File does not exist, create buffer? "))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1445 (funcall ffap-file-finder
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1446 ;; expand-file-name fixes "~/~/.emacs" bug sent by CHUCKR.
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1447 (expand-file-name filename)))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1448 ;; User does not want to find a non-existent file:
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1449 ((signal 'file-error (list "Opening file buffer"
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1450 "no such file or directory"
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1451 filename))))))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1452
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1453 ;; Shortcut: allow {M-x ffap} rather than {M-x find-file-at-point}.
45169
f29db3d22988 (ffap): Don't hide it behind the autoload-cookie.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 43174
diff changeset
1454 ;;;###autoload
f29db3d22988 (ffap): Don't hide it behind the autoload-cookie.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 43174
diff changeset
1455 (defalias 'ffap 'find-file-at-point)
f29db3d22988 (ffap): Don't hide it behind the autoload-cookie.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 43174
diff changeset
1456
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1457
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1458 ;;; Menu support (`ffap-menu'):
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1459
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1460 (defvar ffap-menu-regexp nil
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1461 "*If non-nil, overrides `ffap-next-regexp' during `ffap-menu'.
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1462 Make this more restrictive for faster menu building.
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1463 For example, try \":/\" for URL (and some ftp) references.")
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1464
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1465 (defvar ffap-menu-alist nil
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1466 "Buffer local cache of menu presented by `ffap-menu'.")
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1467 (make-variable-buffer-local 'ffap-menu-alist)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1468
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1469 (defvar ffap-menu-text-plist
18486
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1470 (cond
29203
004bedde23fc (ffap-menu-text-plist): Use display-mouse-p, not window-system.
Eli Zaretskii <eliz@gnu.org>
parents: 29117
diff changeset
1471 ((display-mouse-p) '(face bold mouse-face highlight)) ; keymap <mousy-map>
004bedde23fc (ffap-menu-text-plist): Use display-mouse-p, not window-system.
Eli Zaretskii <eliz@gnu.org>
parents: 29117
diff changeset
1472 (t nil))
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1473 "Text properties applied to strings found by `ffap-menu-rescan'.
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1474 These properties may be used to fontify the menu references.")
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1475
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1476 ;;;###autoload
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1477 (defun ffap-menu (&optional rescan)
106793
f0cdc68631e2 Fix typos in ffap.el.
Juanma Barranquero <lekktu@gmail.com>
parents: 106503
diff changeset
1478 "Put up a menu of files and URLs mentioned in this buffer.
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1479 Then set mark, jump to choice, and try to fetch it. The menu is
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1480 cached in `ffap-menu-alist', and rebuilt by `ffap-menu-rescan'.
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1481 The optional RESCAN argument \(a prefix, interactively\) forces
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1482 a rebuild. Searches with `ffap-menu-regexp'."
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1483 (interactive "P")
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1484 ;; (require 'imenu) -- no longer used, but roughly emulated
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1485 (if (or (not ffap-menu-alist) rescan
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1486 ;; or if the first entry is wrong:
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1487 (and ffap-menu-alist
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1488 (let ((first (car ffap-menu-alist)))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1489 (save-excursion
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1490 (goto-char (cdr first))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1491 (not (equal (car first) (ffap-guesser)))))))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1492 (ffap-menu-rescan))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1493 ;; Tail recursive:
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1494 (ffap-menu-ask
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1495 (if ffap-url-regexp "Find file or URL" "Find file")
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1496 (cons (cons "*Rescan Buffer*" -1) ffap-menu-alist)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1497 'ffap-menu-cont))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1498
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1499 (defun ffap-menu-cont (choice) ; continuation of ffap-menu
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1500 (if (< (cdr choice) 0)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1501 (ffap-menu t) ; *Rescan*
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1502 (push-mark)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1503 (goto-char (cdr choice))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1504 ;; Momentary highlight:
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1505 (unwind-protect
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1506 (progn
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1507 (and ffap-highlight (ffap-guesser) (ffap-highlight))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1508 (sit-for 0) ; display
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1509 (find-file-at-point (car choice)))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1510 (ffap-highlight t))))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1511
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1512 (defun ffap-menu-ask (title alist cont)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1513 "Prompt from a menu of choices, and then apply some action.
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1514 Arguments are TITLE, ALIST, and CONT \(a continuation function\).
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1515 This uses either a menu or the minibuffer depending on invocation.
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1516 The TITLE string is used as either the prompt or menu title.
23352
0550057ebca1 Doc fixes.
Karl Heuer <kwzh@gnu.org>
parents: 22659
diff changeset
1517 Each ALIST entry looks like (STRING . DATA) and defines one choice.
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1518 Function CONT is applied to the entry chosen by the user."
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1519 ;; Note: this function is used with a different continuation
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1520 ;; by the ffap-url add-on package.
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1521 ;; Could try rewriting to use easymenu.el or lmenu.el.
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1522 (let (choice)
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1523 (cond
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1524 ;; Emacs mouse:
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1525 ((and (fboundp 'x-popup-menu) (ffap-mouse-event))
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1526 (setq choice
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1527 (x-popup-menu
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1528 t
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1529 (list "" (cons title
94217
3a71d408918b (ffap-read-file-or-url): Do not abuse completing-read's
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
1530 (mapcar (lambda (i) (cons (car i) i))
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1531 alist))))))
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1532 ;; minibuffer with completion buffer:
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1533 (t
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1534 (let ((minibuffer-setup-hook 'minibuffer-completion-help))
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1535 ;; Bug: prompting may assume unique strings, no "".
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1536 (setq choice
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1537 (completing-read
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1538 (format "%s (default %s): " title (car (car alist)))
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1539 alist nil t
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1540 ;; (cons (car (car alist)) 0)
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1541 nil)))
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1542 (sit-for 0) ; redraw original screen
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1543 ;; Convert string to its entry, or else the default:
94217
3a71d408918b (ffap-read-file-or-url): Do not abuse completing-read's
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
1544 (setq choice (or (assoc choice alist) (car alist)))))
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1545 (if choice
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1546 (funcall cont choice)
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1547 (message "No choice made!") ; possible with menus
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1548 nil)))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1549
106503
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
1550 (defun ffap-menu-rescan ()
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1551 "Search buffer for `ffap-menu-regexp' to build `ffap-menu-alist'.
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1552 Applies `ffap-menu-text-plist' text properties at all matches."
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1553 (interactive)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1554 (let ((ffap-next-regexp (or ffap-menu-regexp ffap-next-regexp))
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1555 (range (- (point-max) (point-min)))
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1556 (mod (buffer-modified-p)) ; was buffer modified?
67010
fcf116e30422 (ffap-menu-rescan): Use inhibit-read-only instead of binding
Eli Zaretskii <eliz@gnu.org>
parents: 66184
diff changeset
1557 ;; inhibit-read-only works on read-only text properties
fcf116e30422 (ffap-menu-rescan): Use inhibit-read-only instead of binding
Eli Zaretskii <eliz@gnu.org>
parents: 66184
diff changeset
1558 ;; as well as read-only buffers.
fcf116e30422 (ffap-menu-rescan): Use inhibit-read-only instead of binding
Eli Zaretskii <eliz@gnu.org>
parents: 66184
diff changeset
1559 (inhibit-read-only t) ; to set text-properties
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1560 item
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1561 ;; Avoid repeated searches of the *mode-alist:
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1562 (major-mode (if (assq major-mode ffap-string-at-point-mode-alist)
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1563 major-mode
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1564 'file)))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1565 (setq ffap-menu-alist nil)
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1566 (unwind-protect
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1567 (save-excursion
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1568 (goto-char (point-min))
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1569 (while (setq item (ffap-next-guess))
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1570 (setq ffap-menu-alist (cons (cons item (point)) ffap-menu-alist))
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1571 (add-text-properties (car ffap-string-at-point-region) (point)
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1572 ffap-menu-text-plist)
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1573 (message "Scanning...%2d%% <%s>"
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1574 (/ (* 100 (- (point) (point-min))) range) item)))
94217
3a71d408918b (ffap-read-file-or-url): Do not abuse completing-read's
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93975
diff changeset
1575 (or mod (restore-buffer-modified-p nil))))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1576 (message "Scanning...done")
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1577 ;; Remove duplicates.
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1578 (setq ffap-menu-alist ; sort by item
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1579 (sort ffap-menu-alist
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1580 (function
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1581 (lambda (a b) (string-lessp (car a) (car b))))))
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1582 (let ((ptr ffap-menu-alist)) ; remove duplicates
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1583 (while (cdr ptr)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1584 (if (equal (car (car ptr)) (car (car (cdr ptr))))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1585 (setcdr ptr (cdr (cdr ptr)))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1586 (setq ptr (cdr ptr)))))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1587 (setq ffap-menu-alist ; sort by position
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1588 (sort ffap-menu-alist
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1589 (function
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1590 (lambda (a b) (< (cdr a) (cdr b)))))))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1591
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1592
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1593 ;;; Mouse Support (`ffap-at-mouse'):
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1594 ;;
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1595 ;; See the suggested binding in ffap-bindings (near eof).
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1596
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1597 (defvar ffap-at-mouse-fallback nil ; ffap-menu? too time-consuming
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1598 "Command invoked by `ffap-at-mouse' if nothing found at click, or nil.
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1599 Ignored when `ffap-at-mouse' is called programmatically.")
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1600 (put 'ffap-at-mouse-fallback 'risky-local-variable t)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1601
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1602 ;;;###autoload
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1603 (defun ffap-at-mouse (e)
106793
f0cdc68631e2 Fix typos in ffap.el.
Juanma Barranquero <lekktu@gmail.com>
parents: 106503
diff changeset
1604 "Find file or URL guessed from text around mouse click.
18486
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1605 Interactively, calls `ffap-at-mouse-fallback' if no guess is found.
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1606 Return value:
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1607 * if a guess string is found, return it (after finding it)
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1608 * if the fallback is called, return whatever it returns
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1609 * otherwise, nil"
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1610 (interactive "e")
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1611 (let ((guess
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1612 ;; Maybe less surprising without the save-excursion?
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1613 (save-excursion
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1614 (mouse-set-point e)
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1615 ;; Would prefer to do nothing unless click was *on* text. How
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1616 ;; to tell that the click was beyond the end of current line?
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1617 (ffap-guesser))))
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1618 (cond
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1619 (guess
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1620 (set-buffer (ffap-event-buffer e))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1621 (ffap-highlight)
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1622 (unwind-protect
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1623 (progn
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1624 (sit-for 0) ; display
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1625 (message "Finding `%s'" guess)
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1626 (find-file-at-point guess)
18486
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1627 guess) ; success: return non-nil
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1628 (ffap-highlight t)))
105372
bd2966850aac Use `called-interactively-p' instead of `interactive-p'.
Juanma Barranquero <lekktu@gmail.com>
parents: 104886
diff changeset
1629 ((called-interactively-p 'interactive)
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1630 (if ffap-at-mouse-fallback
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1631 (call-interactively ffap-at-mouse-fallback)
106793
f0cdc68631e2 Fix typos in ffap.el.
Juanma Barranquero <lekktu@gmail.com>
parents: 106503
diff changeset
1632 (message "No file or URL found at mouse click.")
18486
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1633 nil)) ; no fallback, return nil
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1634 ;; failure: return nil
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1635 )))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1636
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1637
58923
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1638 ;;; ffap-other-*, ffap-read-only-*, ffap-alternate-* commands:
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1639
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1640 ;; There could be a real `ffap-noselect' function, but we would need
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1641 ;; at least two new user variables, and there is no w3-fetch-noselect.
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1642 ;; So instead, we just fake it with a slow save-window-excursion.
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1643
106503
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
1644 (defun ffap-other-window ()
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1645 "Like `ffap', but put buffer in another window.
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1646 Only intended for interactive use."
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1647 (interactive)
58923
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1648 (let (value)
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1649 (switch-to-buffer-other-window
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1650 (save-window-excursion
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1651 (setq value (call-interactively 'ffap))
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1652 (unless (or (bufferp value) (bufferp (car-safe value)))
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1653 (setq value (current-buffer)))
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1654 (current-buffer)))
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1655 value))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1656
106503
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
1657 (defun ffap-other-frame ()
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1658 "Like `ffap', but put buffer in another frame.
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1659 Only intended for interactive use."
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1660 (interactive)
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1661 ;; Extra code works around dedicated windows (noted by JENS, 7/96):
58923
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1662 (let* ((win (selected-window))
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1663 (wdp (window-dedicated-p win))
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1664 value)
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1665 (unwind-protect
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1666 (progn
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1667 (set-window-dedicated-p win nil)
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1668 (switch-to-buffer-other-frame
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1669 (save-window-excursion
58923
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1670 (setq value (call-interactively 'ffap))
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1671 (unless (or (bufferp value) (bufferp (car-safe value)))
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1672 (setq value (current-buffer)))
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1673 (current-buffer))))
58923
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1674 (set-window-dedicated-p win wdp))
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1675 value))
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1676
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1677 (defun ffap-read-only ()
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1678 "Like `ffap', but mark buffer as read-only.
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1679 Only intended for interactive use."
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1680 (interactive)
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1681 (let ((value (call-interactively 'ffap)))
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1682 (unless (or (bufferp value) (bufferp (car-safe value)))
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1683 (setq value (current-buffer)))
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1684 (mapc (lambda (b) (with-current-buffer b (toggle-read-only 1)))
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1685 (if (listp value) value (list value)))
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1686 value))
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1687
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1688 (defun ffap-read-only-other-window ()
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1689 "Like `ffap', but put buffer in another window and mark as read-only.
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1690 Only intended for interactive use."
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1691 (interactive)
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1692 (let ((value (ffap-other-window)))
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1693 (mapc (lambda (b) (with-current-buffer b (toggle-read-only 1)))
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1694 (if (listp value) value (list value)))
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1695 value))
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1696
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1697 (defun ffap-read-only-other-frame ()
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1698 "Like `ffap', but put buffer in another frame and mark as read-only.
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1699 Only intended for interactive use."
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1700 (interactive)
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1701 (let ((value (ffap-other-frame)))
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1702 (mapc (lambda (b) (with-current-buffer b (toggle-read-only 1)))
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1703 (if (listp value) value (list value)))
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1704 value))
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1705
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1706 (defun ffap-alternate-file ()
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1707 "Like `ffap' and `find-alternate-file'.
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1708 Only intended for interactive use."
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1709 (interactive)
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1710 (let ((ffap-file-finder 'find-alternate-file))
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1711 (call-interactively 'ffap)))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1712
105966
1b85a4b6472f (ffap-alternate-file-other-window, ffap-literally): New functions.
Juri Linkov <juri@jurta.org>
parents: 105372
diff changeset
1713 (defun ffap-alternate-file-other-window ()
1b85a4b6472f (ffap-alternate-file-other-window, ffap-literally): New functions.
Juri Linkov <juri@jurta.org>
parents: 105372
diff changeset
1714 "Like `ffap' and `find-alternate-file-other-window'.
1b85a4b6472f (ffap-alternate-file-other-window, ffap-literally): New functions.
Juri Linkov <juri@jurta.org>
parents: 105372
diff changeset
1715 Only intended for interactive use."
1b85a4b6472f (ffap-alternate-file-other-window, ffap-literally): New functions.
Juri Linkov <juri@jurta.org>
parents: 105372
diff changeset
1716 (interactive)
1b85a4b6472f (ffap-alternate-file-other-window, ffap-literally): New functions.
Juri Linkov <juri@jurta.org>
parents: 105372
diff changeset
1717 (let ((ffap-file-finder 'find-alternate-file-other-window))
1b85a4b6472f (ffap-alternate-file-other-window, ffap-literally): New functions.
Juri Linkov <juri@jurta.org>
parents: 105372
diff changeset
1718 (call-interactively 'ffap)))
1b85a4b6472f (ffap-alternate-file-other-window, ffap-literally): New functions.
Juri Linkov <juri@jurta.org>
parents: 105372
diff changeset
1719
1b85a4b6472f (ffap-alternate-file-other-window, ffap-literally): New functions.
Juri Linkov <juri@jurta.org>
parents: 105372
diff changeset
1720 (defun ffap-literally ()
1b85a4b6472f (ffap-alternate-file-other-window, ffap-literally): New functions.
Juri Linkov <juri@jurta.org>
parents: 105372
diff changeset
1721 "Like `ffap' and `find-file-literally'.
1b85a4b6472f (ffap-alternate-file-other-window, ffap-literally): New functions.
Juri Linkov <juri@jurta.org>
parents: 105372
diff changeset
1722 Only intended for interactive use."
1b85a4b6472f (ffap-alternate-file-other-window, ffap-literally): New functions.
Juri Linkov <juri@jurta.org>
parents: 105372
diff changeset
1723 (interactive)
1b85a4b6472f (ffap-alternate-file-other-window, ffap-literally): New functions.
Juri Linkov <juri@jurta.org>
parents: 105372
diff changeset
1724 (let ((ffap-file-finder 'find-file-literally))
1b85a4b6472f (ffap-alternate-file-other-window, ffap-literally): New functions.
Juri Linkov <juri@jurta.org>
parents: 105372
diff changeset
1725 (call-interactively 'ffap)))
1b85a4b6472f (ffap-alternate-file-other-window, ffap-literally): New functions.
Juri Linkov <juri@jurta.org>
parents: 105372
diff changeset
1726
1b85a4b6472f (ffap-alternate-file-other-window, ffap-literally): New functions.
Juri Linkov <juri@jurta.org>
parents: 105372
diff changeset
1727 (defalias 'find-file-literally-at-point 'ffap-literally)
1b85a4b6472f (ffap-alternate-file-other-window, ffap-literally): New functions.
Juri Linkov <juri@jurta.org>
parents: 105372
diff changeset
1728
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1729
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1730 ;;; Bug Reporter:
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1731
86479
0ea24c4dea5d (ffap-bug, ffap-submit-bug): Redefine as obsolete aliases for
Glenn Morris <rgm@gnu.org>
parents: 84866
diff changeset
1732 (define-obsolete-function-alias 'ffap-bug 'report-emacs-bug "23.1")
0ea24c4dea5d (ffap-bug, ffap-submit-bug): Redefine as obsolete aliases for
Glenn Morris <rgm@gnu.org>
parents: 84866
diff changeset
1733 (define-obsolete-function-alias 'ffap-submit-bug 'report-emacs-bug "23.1")
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1734
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1735
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1736 ;;; Hooks for Gnus, VM, Rmail:
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1737 ;;
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1738 ;; If you do not like these bindings, write versions with whatever
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1739 ;; bindings you would prefer.
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1740
106503
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
1741 (defun ffap-ro-mode-hook ()
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1742 "Bind `ffap-next' and `ffap-menu' to M-l and M-m, resp."
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1743 (local-set-key "\M-l" 'ffap-next)
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1744 (local-set-key "\M-m" 'ffap-menu)
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1745 )
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1746
106503
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
1747 (defun ffap-gnus-hook ()
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1748 "Bind `ffap-gnus-next' and `ffap-gnus-menu' to M-l and M-m, resp."
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1749 (set (make-local-variable 'ffap-foo-at-bar-prefix) "news") ; message-id's
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1750 ;; Note "l", "L", "m", "M" are taken:
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1751 (local-set-key "\M-l" 'ffap-gnus-next)
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1752 (local-set-key "\M-m" 'ffap-gnus-menu))
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1753
64797
c0d8adac2bfe (gnus-summary-buffer, gnus-article-buffer): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents: 64762
diff changeset
1754 (defvar gnus-summary-buffer)
c0d8adac2bfe (gnus-summary-buffer, gnus-article-buffer): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents: 64762
diff changeset
1755 (defvar gnus-article-buffer)
c0d8adac2bfe (gnus-summary-buffer, gnus-article-buffer): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents: 64762
diff changeset
1756
86479
0ea24c4dea5d (ffap-bug, ffap-submit-bug): Redefine as obsolete aliases for
Glenn Morris <rgm@gnu.org>
parents: 84866
diff changeset
1757 ;; This code is called from gnus.
0ea24c4dea5d (ffap-bug, ffap-submit-bug): Redefine as obsolete aliases for
Glenn Morris <rgm@gnu.org>
parents: 84866
diff changeset
1758 (declare-function gnus-summary-select-article "gnus-sum"
0ea24c4dea5d (ffap-bug, ffap-submit-bug): Redefine as obsolete aliases for
Glenn Morris <rgm@gnu.org>
parents: 84866
diff changeset
1759 (&optional all-headers force pseudo article))
0ea24c4dea5d (ffap-bug, ffap-submit-bug): Redefine as obsolete aliases for
Glenn Morris <rgm@gnu.org>
parents: 84866
diff changeset
1760
0ea24c4dea5d (ffap-bug, ffap-submit-bug): Redefine as obsolete aliases for
Glenn Morris <rgm@gnu.org>
parents: 84866
diff changeset
1761 (declare-function gnus-configure-windows "gnus-win"
0ea24c4dea5d (ffap-bug, ffap-submit-bug): Redefine as obsolete aliases for
Glenn Morris <rgm@gnu.org>
parents: 84866
diff changeset
1762 (setting &optional force))
0ea24c4dea5d (ffap-bug, ffap-submit-bug): Redefine as obsolete aliases for
Glenn Morris <rgm@gnu.org>
parents: 84866
diff changeset
1763
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1764 (defun ffap-gnus-wrapper (form) ; used by both commands below
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1765 (and (eq (current-buffer) (get-buffer gnus-summary-buffer))
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1766 (gnus-summary-select-article)) ; get article of current line
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1767 ;; Preserve selected buffer, but do not do save-window-excursion,
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1768 ;; since we want to see any window created by the form. Temporarily
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1769 ;; select the article buffer, so we can see any point movement.
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1770 (let ((sb (window-buffer (selected-window))))
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1771 (gnus-configure-windows 'article)
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1772 (pop-to-buffer gnus-article-buffer)
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1773 (widen)
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1774 ;; Skip headers for ffap-gnus-next (which will wrap around)
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1775 (if (eq (point) (point-min)) (search-forward "\n\n" nil t))
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1776 (unwind-protect
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1777 (eval form)
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1778 (pop-to-buffer sb))))
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1779
106503
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
1780 (defun ffap-gnus-next ()
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1781 "Run `ffap-next' in the gnus article buffer."
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1782 (interactive) (ffap-gnus-wrapper '(ffap-next nil t)))
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1783
106503
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
1784 (defun ffap-gnus-menu ()
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1785 "Run `ffap-menu' in the gnus article buffer."
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1786 (interactive) (ffap-gnus-wrapper '(ffap-menu)))
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1787
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1788
21815
e3c8e2bb08b9 (dired-at-point): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21155
diff changeset
1789 (defcustom dired-at-point-require-prefix nil
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 98339
diff changeset
1790 "If set, reverses the prefix argument to `dired-at-point'.
21815
e3c8e2bb08b9 (dired-at-point): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21155
diff changeset
1791 This is nil so neophytes notice ffap. Experts may prefer to disable
e3c8e2bb08b9 (dired-at-point): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21155
diff changeset
1792 ffap most of the time."
e3c8e2bb08b9 (dired-at-point): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21155
diff changeset
1793 :type 'boolean
e3c8e2bb08b9 (dired-at-point): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21155
diff changeset
1794 :group 'ffap
e3c8e2bb08b9 (dired-at-point): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21155
diff changeset
1795 :version "20.3")
e3c8e2bb08b9 (dired-at-point): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21155
diff changeset
1796
e3c8e2bb08b9 (dired-at-point): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21155
diff changeset
1797 ;;;###autoload
e3c8e2bb08b9 (dired-at-point): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21155
diff changeset
1798 (defun dired-at-point (&optional filename)
107135
76b761c74dae * ffap.el (dired-at-point): Fix docstring. (Bug#5565)
Juri Linkov <juri@jurta.org>
parents: 106815
diff changeset
1799 "Start Dired, defaulting to file at point. See `ffap'.
76b761c74dae * ffap.el (dired-at-point): Fix docstring. (Bug#5565)
Juri Linkov <juri@jurta.org>
parents: 106815
diff changeset
1800 If `dired-at-point-require-prefix' is set, the prefix meaning is reversed."
21815
e3c8e2bb08b9 (dired-at-point): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21155
diff changeset
1801 (interactive)
105372
bd2966850aac Use `called-interactively-p' instead of `interactive-p'.
Juanma Barranquero <lekktu@gmail.com>
parents: 104886
diff changeset
1802 (if (and (called-interactively-p 'interactive)
21815
e3c8e2bb08b9 (dired-at-point): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21155
diff changeset
1803 (if dired-at-point-require-prefix
e3c8e2bb08b9 (dired-at-point): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21155
diff changeset
1804 (not current-prefix-arg)
e3c8e2bb08b9 (dired-at-point): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21155
diff changeset
1805 current-prefix-arg))
e3c8e2bb08b9 (dired-at-point): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21155
diff changeset
1806 (let (current-prefix-arg) ; already interpreted
58923
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1807 (call-interactively ffap-directory-finder))
21815
e3c8e2bb08b9 (dired-at-point): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21155
diff changeset
1808 (or filename (setq filename (dired-at-point-prompter)))
e3c8e2bb08b9 (dired-at-point): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21155
diff changeset
1809 (cond
e3c8e2bb08b9 (dired-at-point): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21155
diff changeset
1810 ((ffap-url-p filename)
e3c8e2bb08b9 (dired-at-point): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21155
diff changeset
1811 (funcall ffap-url-fetcher filename))
e3c8e2bb08b9 (dired-at-point): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21155
diff changeset
1812 ((and ffap-dired-wildcards
e3c8e2bb08b9 (dired-at-point): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21155
diff changeset
1813 (string-match ffap-dired-wildcards filename))
58923
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1814 (funcall ffap-directory-finder filename))
21815
e3c8e2bb08b9 (dired-at-point): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21155
diff changeset
1815 ((file-exists-p filename)
e3c8e2bb08b9 (dired-at-point): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21155
diff changeset
1816 (if (file-directory-p filename)
58923
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1817 (funcall ffap-directory-finder
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1818 (expand-file-name filename))
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1819 (funcall ffap-directory-finder
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1820 (concat (expand-file-name filename) "*"))))
54183
b91c8ab75b81 (dired-at-point): Additional writability test for relative directory names.
Juri Linkov <juri@jurta.org>
parents: 54106
diff changeset
1821 ((and (file-writable-p
b91c8ab75b81 (dired-at-point): Additional writability test for relative directory names.
Juri Linkov <juri@jurta.org>
parents: 54106
diff changeset
1822 (or (file-name-directory (directory-file-name filename))
b91c8ab75b81 (dired-at-point): Additional writability test for relative directory names.
Juri Linkov <juri@jurta.org>
parents: 54106
diff changeset
1823 filename))
50042
5e493709a8ef (dired-at-point): Check whether the user can create a directory before asking
Juanma Barranquero <lekktu@gmail.com>
parents: 49808
diff changeset
1824 (y-or-n-p "Directory does not exist, create it? "))
21815
e3c8e2bb08b9 (dired-at-point): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21155
diff changeset
1825 (make-directory filename)
58923
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1826 (funcall ffap-directory-finder filename))
21815
e3c8e2bb08b9 (dired-at-point): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21155
diff changeset
1827 ((error "No such file or directory `%s'" filename)))))
e3c8e2bb08b9 (dired-at-point): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21155
diff changeset
1828
e3c8e2bb08b9 (dired-at-point): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21155
diff changeset
1829 (defun dired-at-point-prompter (&optional guess)
e3c8e2bb08b9 (dired-at-point): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21155
diff changeset
1830 ;; Does guess and prompt step for find-file-at-point.
e3c8e2bb08b9 (dired-at-point): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21155
diff changeset
1831 ;; Extra complication for the temporary highlighting.
e3c8e2bb08b9 (dired-at-point): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21155
diff changeset
1832 (unwind-protect
e3c8e2bb08b9 (dired-at-point): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21155
diff changeset
1833 (ffap-read-file-or-url
81680
f4adce2647d3 (dired-at-point-prompter): Improve prompt in
Martin Rudalics <rudalics@gmx.at>
parents: 77014
diff changeset
1834 (cond
f4adce2647d3 (dired-at-point-prompter): Improve prompt in
Martin Rudalics <rudalics@gmx.at>
parents: 77014
diff changeset
1835 ((eq ffap-directory-finder 'list-directory)
f4adce2647d3 (dired-at-point-prompter): Improve prompt in
Martin Rudalics <rudalics@gmx.at>
parents: 77014
diff changeset
1836 "List directory (brief): ")
f4adce2647d3 (dired-at-point-prompter): Improve prompt in
Martin Rudalics <rudalics@gmx.at>
parents: 77014
diff changeset
1837 (ffap-url-regexp "Dired file or URL: ")
f4adce2647d3 (dired-at-point-prompter): Improve prompt in
Martin Rudalics <rudalics@gmx.at>
parents: 77014
diff changeset
1838 (t "Dired file: "))
21815
e3c8e2bb08b9 (dired-at-point): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21155
diff changeset
1839 (prog1
54183
b91c8ab75b81 (dired-at-point): Additional writability test for relative directory names.
Juri Linkov <juri@jurta.org>
parents: 54106
diff changeset
1840 (setq guess (or guess
b91c8ab75b81 (dired-at-point): Additional writability test for relative directory names.
Juri Linkov <juri@jurta.org>
parents: 54106
diff changeset
1841 (let ((guess (ffap-guesser)))
b91c8ab75b81 (dired-at-point): Additional writability test for relative directory names.
Juri Linkov <juri@jurta.org>
parents: 54106
diff changeset
1842 (if (or (not guess)
b91c8ab75b81 (dired-at-point): Additional writability test for relative directory names.
Juri Linkov <juri@jurta.org>
parents: 54106
diff changeset
1843 (ffap-url-p guess)
b91c8ab75b81 (dired-at-point): Additional writability test for relative directory names.
Juri Linkov <juri@jurta.org>
parents: 54106
diff changeset
1844 (ffap-file-remote-p guess))
b91c8ab75b81 (dired-at-point): Additional writability test for relative directory names.
Juri Linkov <juri@jurta.org>
parents: 54106
diff changeset
1845 guess
b91c8ab75b81 (dired-at-point): Additional writability test for relative directory names.
Juri Linkov <juri@jurta.org>
parents: 54106
diff changeset
1846 (setq guess (abbreviate-file-name
b91c8ab75b81 (dired-at-point): Additional writability test for relative directory names.
Juri Linkov <juri@jurta.org>
parents: 54106
diff changeset
1847 (expand-file-name guess)))
b91c8ab75b81 (dired-at-point): Additional writability test for relative directory names.
Juri Linkov <juri@jurta.org>
parents: 54106
diff changeset
1848 (cond
b91c8ab75b81 (dired-at-point): Additional writability test for relative directory names.
Juri Linkov <juri@jurta.org>
parents: 54106
diff changeset
1849 ;; Interpret local directory as a directory.
b91c8ab75b81 (dired-at-point): Additional writability test for relative directory names.
Juri Linkov <juri@jurta.org>
parents: 54106
diff changeset
1850 ((file-directory-p guess)
b91c8ab75b81 (dired-at-point): Additional writability test for relative directory names.
Juri Linkov <juri@jurta.org>
parents: 54106
diff changeset
1851 (file-name-as-directory guess))
b91c8ab75b81 (dired-at-point): Additional writability test for relative directory names.
Juri Linkov <juri@jurta.org>
parents: 54106
diff changeset
1852 ;; Get directory component from local files.
b91c8ab75b81 (dired-at-point): Additional writability test for relative directory names.
Juri Linkov <juri@jurta.org>
parents: 54106
diff changeset
1853 ((file-regular-p guess)
b91c8ab75b81 (dired-at-point): Additional writability test for relative directory names.
Juri Linkov <juri@jurta.org>
parents: 54106
diff changeset
1854 (file-name-directory guess))
b91c8ab75b81 (dired-at-point): Additional writability test for relative directory names.
Juri Linkov <juri@jurta.org>
parents: 54106
diff changeset
1855 (guess))))
b91c8ab75b81 (dired-at-point): Additional writability test for relative directory names.
Juri Linkov <juri@jurta.org>
parents: 54106
diff changeset
1856 ))
b91c8ab75b81 (dired-at-point): Additional writability test for relative directory names.
Juri Linkov <juri@jurta.org>
parents: 54106
diff changeset
1857 (and guess (ffap-highlight))))
21815
e3c8e2bb08b9 (dired-at-point): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21155
diff changeset
1858 (ffap-highlight t)))
e3c8e2bb08b9 (dired-at-point): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21155
diff changeset
1859
58923
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1860 ;;; ffap-dired-other-*, ffap-list-directory commands:
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1861
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1862 (defun ffap-dired-other-window ()
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1863 "Like `dired-at-point', but put buffer in another window.
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1864 Only intended for interactive use."
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1865 (interactive)
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1866 (let (value)
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1867 (switch-to-buffer-other-window
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1868 (save-window-excursion
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1869 (setq value (call-interactively 'dired-at-point))
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1870 (current-buffer)))
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1871 value))
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1872
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1873 (defun ffap-dired-other-frame ()
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1874 "Like `dired-at-point', but put buffer in another frame.
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1875 Only intended for interactive use."
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1876 (interactive)
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1877 ;; Extra code works around dedicated windows (noted by JENS, 7/96):
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1878 (let* ((win (selected-window))
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1879 (wdp (window-dedicated-p win))
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1880 value)
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1881 (unwind-protect
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1882 (progn
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1883 (set-window-dedicated-p win nil)
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1884 (switch-to-buffer-other-frame
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1885 (save-window-excursion
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1886 (setq value (call-interactively 'dired-at-point))
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1887 (current-buffer))))
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1888 (set-window-dedicated-p win wdp))
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1889 value))
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1890
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1891 (defun ffap-list-directory ()
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1892 "Like `dired-at-point' and `list-directory'.
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1893 Only intended for interactive use."
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1894 (interactive)
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1895 (let ((ffap-directory-finder 'list-directory))
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1896 (call-interactively 'dired-at-point)))
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1897
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1898
106239
0ac473df1bd1 Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents: 105966
diff changeset
1899 ;;; Hooks to put in `file-name-at-point-functions':
0ac473df1bd1 Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents: 105966
diff changeset
1900
0ac473df1bd1 Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents: 105966
diff changeset
1901 ;;;###autoload
0ac473df1bd1 Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents: 105966
diff changeset
1902 (progn (defun ffap-guess-file-name-at-point ()
0ac473df1bd1 Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents: 105966
diff changeset
1903 "Try to get a file name at point.
106503
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
1904 This hook is intended to be put in `file-name-at-point-functions'."
106239
0ac473df1bd1 Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents: 105966
diff changeset
1905 (when (fboundp 'ffap-guesser)
0ac473df1bd1 Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents: 105966
diff changeset
1906 ;; Logic from `ffap-read-file-or-url' and `dired-at-point-prompter'.
0ac473df1bd1 Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents: 105966
diff changeset
1907 (let ((guess (ffap-guesser)))
0ac473df1bd1 Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents: 105966
diff changeset
1908 (setq guess
0ac473df1bd1 Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents: 105966
diff changeset
1909 (if (or (not guess)
0ac473df1bd1 Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents: 105966
diff changeset
1910 (and (fboundp 'ffap-url-p)
0ac473df1bd1 Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents: 105966
diff changeset
1911 (ffap-url-p guess))
0ac473df1bd1 Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents: 105966
diff changeset
1912 (and (fboundp 'ffap-file-remote-p)
0ac473df1bd1 Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents: 105966
diff changeset
1913 (ffap-file-remote-p guess)))
0ac473df1bd1 Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents: 105966
diff changeset
1914 guess
0ac473df1bd1 Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents: 105966
diff changeset
1915 (abbreviate-file-name (expand-file-name guess))))
0ac473df1bd1 Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents: 105966
diff changeset
1916 (when guess
0ac473df1bd1 Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents: 105966
diff changeset
1917 (if (file-directory-p guess)
0ac473df1bd1 Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents: 105966
diff changeset
1918 (file-name-as-directory guess)
0ac473df1bd1 Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents: 105966
diff changeset
1919 guess))))))
0ac473df1bd1 Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents: 105966
diff changeset
1920
0ac473df1bd1 Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents: 105966
diff changeset
1921
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1922 ;;; Offer default global bindings (`ffap-bindings'):
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1923
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1924 (defvar ffap-bindings
18486
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1925 '(
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1926 (global-set-key [S-mouse-3] 'ffap-at-mouse)
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1927 (global-set-key [C-S-mouse-3] 'ffap-menu)
58923
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1928
18486
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1929 (global-set-key "\C-x\C-f" 'find-file-at-point)
58923
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1930 (global-set-key "\C-x\C-r" 'ffap-read-only)
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1931 (global-set-key "\C-x\C-v" 'ffap-alternate-file)
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1932
18486
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1933 (global-set-key "\C-x4f" 'ffap-other-window)
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1934 (global-set-key "\C-x5f" 'ffap-other-frame)
58923
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1935 (global-set-key "\C-x4r" 'ffap-read-only-other-window)
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1936 (global-set-key "\C-x5r" 'ffap-read-only-other-frame)
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1937
22282
95a8d00b0c5c (ffap-bindings): Fix the dired-at-point binding.
Karl Heuer <kwzh@gnu.org>
parents: 22250
diff changeset
1938 (global-set-key "\C-xd" 'dired-at-point)
58923
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1939 (global-set-key "\C-x4d" 'ffap-dired-other-window)
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1940 (global-set-key "\C-x5d" 'ffap-dired-other-frame)
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1941 (global-set-key "\C-x\C-d" 'ffap-list-directory)
481f80f548e1 (ffap-dired-wildcards): Set default to "[*?][^/]*\\'". Doc fix.
Juri Linkov <juri@jurta.org>
parents: 55999
diff changeset
1942
18486
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1943 (add-hook 'gnus-summary-mode-hook 'ffap-gnus-hook)
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1944 (add-hook 'gnus-article-mode-hook 'ffap-gnus-hook)
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1945 (add-hook 'vm-mode-hook 'ffap-ro-mode-hook)
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1946 (add-hook 'rmail-mode-hook 'ffap-ro-mode-hook)
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1947 ;; (setq dired-x-hands-off-my-keys t) ; the default
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1948 )
83ff1ecdb0e3 XEmacs compatibility hacks cleaned up.
Karl Heuer <kwzh@gnu.org>
parents: 18291
diff changeset
1949 "List of binding forms evaluated by function `ffap-bindings'.
35096
fd0085875bc0 (ffap-bindings): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 34867
diff changeset
1950 A reasonable ffap installation needs just this one line:
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1951 (ffap-bindings)
18291
130a48e6cc13 (ffap-soft-value): Make this a function again; the macro
Karl Heuer <kwzh@gnu.org>
parents: 17676
diff changeset
1952 Of course if you do not like these bindings, just roll your own!")
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1953
34867
e701bc3564db (ffap-bindings): Make interactive and add an autoload cookie.
Eli Zaretskii <eliz@gnu.org>
parents: 30687
diff changeset
1954 ;;;###autoload
106503
6cfa584799d3 Minor cleanup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106448
diff changeset
1955 (defun ffap-bindings ()
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1956 "Evaluate the forms in variable `ffap-bindings'."
34867
e701bc3564db (ffap-bindings): Make interactive and add an autoload cookie.
Eli Zaretskii <eliz@gnu.org>
parents: 30687
diff changeset
1957 (interactive)
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1958 (eval (cons 'progn ffap-bindings)))
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1959
14874
cecaaaec6fd6 Doc fixes. Reorganized. Retired v18 support.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
1960
103729
f78c4d81bda4 (ffap-version): Make it an obsolete alias for emacs-version.
Glenn Morris <rgm@gnu.org>
parents: 100908
diff changeset
1961 (provide 'ffap)
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 50042
diff changeset
1962
93975
1e3a407766b9 Fix up comment convention on the arch-tag lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92148
diff changeset
1963 ;; arch-tag: 9dd3e88a-5dec-4607-bd57-60ae9ede8ebc
13531
b4d9bb7adf24 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1964 ;;; ffap.el ends here