;ELC   
;;; Compiled by pot@pot.cnuce.cnr.it on Tue Mar 18 15:41:23 2003
;;; from file /home/pot/gnu/emacs-pretest.new/lisp/ffap.el
;;; in Emacs version 21.3
;;; with bytecomp version 2.85.4.1
;;; with all optimizations.

;;; This file uses dynamic docstrings, first added in Emacs 19.29.
(if (and (boundp 'emacs-version)
	 (< (aref emacs-version (1- (length emacs-version))) ?A)
	 (or (and (boundp 'epoch::version) epoch::version)
	     (string-lessp emacs-version "19.29")))
    (error "`ffap.el' was compiled for Emacs 19.29 or later"))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


(provide 'ffap)
#@54 The version of ffap: "Major.Minor-Build <Timestamp>"
(defconst ffap-version "1.9-fsf <97/06/25 13:21:41 mic>" (#$ . 626))
(custom-declare-group 'ffap nil "Find file or URL at point." :link '(url-link :tag "URL" "ftp://ftp.mathcs.emory.edu/pub/mic/emacs/") :group 'matching :group 'convenience)
#@108 Return value of symbol with NAME, if it is interned.
Otherwise return nil (or the optional DEFAULT value).
(defalias 'ffap-soft-value #[(name &optional default) "\303!\211\203 \304	!\203 	J\202 \n)\207" [name sym default intern-soft boundp] 3 (#$ . 927)])
#@128 *Paths matching this regexp are treated as remote ftp paths by ffap.
If nil, ffap neither recognizes nor generates such paths.
(custom-declare-variable 'ffap-ftp-regexp '"\\`/[^/:]+:" '(#$ . -1195) :type '(choice (const :tag "Disable" nil) (const :tag "Standard" "\\`/[^/:]+:") regexp) :group 'ffap)
#@66 *If non-nil, convert `file:' url to local path before prompting.
(custom-declare-variable 'ffap-url-unwrap-local 't '(#$ . -1501) :type 'boolean :group 'ffap)
#@111 *If non-nil, convert `ftp:' url to remote path before prompting.
This is ignored if `ffap-ftp-regexp' is nil.
(custom-declare-variable 'ffap-url-unwrap-remote 't '(#$ . -1667) :type 'boolean :group 'ffap)
#@170 *User name in ftp paths generated by `ffap-host-to-path'.
Note this name may be omitted if it equals the default
(either `efs-default-user' or `ange-ftp-default-user').
(custom-declare-variable 'ffap-ftp-default-user '"anonymous" '(#$ . -1879) :type 'string :group 'ffap)
#@57 *Matching paths are treated as remote.  nil to disable.
(custom-declare-variable 'ffap-rfs-regexp '"\\`/\\(afs\\|net\\)/." '(#$ . -2157) :type 'regexp :group 'ffap)
#@62 Regexp matching URL's.  nil to disable URL features in ffap.
(defvar ffap-url-regexp "\\`\\(news\\(post\\)?:\\|mailto:\\|file:\\|\\(ftp\\|https?\\|telnet\\|gopher\\|www\\|wais\\)://\\)." (#$ . 2328))
#@105 *Presumed URL prefix type of strings like "<foo.9z@bar>".
Sensible values are nil, "news", or "mailto".
(custom-declare-variable 'ffap-foo-at-bar-prefix '"mailto" '(#$ . -2535) :type '(choice (const "mailto") (const "news") (const :tag "Disable" nil)) :group 'ffap)
#@172 *A regexp matching filename wildcard characters, or nil.
If `find-file-at-point' gets a filename matching this pattern,
it passes it on to `dired' instead of `find-file'.
(custom-declare-variable 'ffap-dired-wildcards 'nil '(#$ . -2808) :type '(choice (const :tag "Disable" nil) (const :tag "Enable" "[*?][^/]*\\'")) :group 'ffap)
#@65 *Whether `find-file-at-point' prompts about a nonexistent file.
(custom-declare-variable 'ffap-newfile-prompt 'nil '(#$ . -3145) :type 'boolean :group 'ffap)
#@156 *If set, reverses the prefix argument to `find-file-at-point'.
This is nil so neophytes notice ffap.  Experts may prefer to disable
ffap most of the time.
(custom-declare-variable 'ffap-require-prefix 'nil '(#$ . -3310) :type 'boolean :group 'ffap)
#@61 *The command called by `find-file-at-point' to find a file.
(custom-declare-variable 'ffap-file-finder ''find-file '(#$ . -3565) :type 'function :group 'ffap)
(put 'ffap-file-finder 'risky-local-variable t)
#@170 *A function of one argument, called by ffap to fetch an URL.
Reasonable choices are `w3-fetch' or a `browse-url-*' function.
For a fancy alternative, get `ffap-url.el'.
(custom-declare-variable 'ffap-url-fetcher '(if (fboundp 'browse-url) 'browse-url 'w3-fetch) '(#$ . -3779) :type '(choice (const w3-fetch) (const browse-url) (const browse-url-netscape) (const browse-url-mosaic) function) :group 'ffap)
(put 'ffap-url-fetcher 'risky-local-variable t)
(defalias 'ffap-mouse-event #[nil "<\205 \207" [last-nonmenu-event] 1])
(defalias 'ffap-event-buffer #[(event) "\301\3028)@!\207" [event window-buffer 1] 3])
#@57 *Regular expression governing movements of `ffap-next'.
(custom-declare-variable 'ffap-next-regexp '"[/:.~a-zA-Z]/\\|@[a-zA-Z][-a-zA-Z0-9]*\\." '(#$ . -4402) :type 'regexp :group 'ffap)
#@43 Last value returned by `ffap-next-guess'.
(defvar ffap-next-guess nil (#$ . 4594))
#@65 List (BEG END), last region returned by `ffap-string-at-point'.
(defvar ffap-string-at-point-region '(1 1) (#$ . 4683))
#@260 Move point to next file or URL, and return it as a string.
If nothing is found, leave point at limit and return nil.
Optional BACK argument makes search backwards.
Optional LIM argument limits the search.
Only considers strings that match `ffap-next-regexp'.
(defalias 'ffap-next-guess #[(&optional back lim) "\204 	\203\f e\202 d\306`=\204+ 	\203 \307\202 \310\311#\210\312 \211\203 	\2033 \313\2024 \314\f8b\210\n\211)\207" [lim back guess ffap-next-regexp ffap-string-at-point-region ffap-next-guess nil re-search-backward re-search-forward move ffap-guesser 0 1] 5 (#$ . 4810)])
#@322 Search buffer for next file or URL, and run ffap.
Optional argument BACK says to search backwards.
Optional argument WRAP says to try wrapping around if necessary.
Interactively: use a single prefix to search backwards,
double prefix to wrap forward, triple to wrap backwards.
Actual search is done by `ffap-next-guess'.
(defalias 'ffap-next #[(&optional back wrap) "`\304!	\204  \203  \203 d\202 eb\203  \304\n\"	\2030 \305\306!\210\307\310	!!\202? \nb\210\311\312\203= \313\202> \314\"*\207" [back guess pt wrap ffap-next-guess sit-for 0 find-file-at-point ffap-prompter message "No %sfiles or URL's found" "" "more "] 3 (#$ . 5413) (byte-code "\301!\302\236A\207" [current-prefix-arg prefix-numeric-value ((1) (4 t) (16 nil t) (64 t t))] 2)])
#@54 Like `ffap-next', but search with `ffap-url-regexp'.
(defalias 'ffap-next-url #[(&optional back wrap) "t\203\f \304\305!\202 \305\n\")\207" [ffap-url-regexp ffap-next-regexp back wrap call-interactively ffap-next] 3 (#$ . 6176) nil])
#@130 *What `ffap-machine-p' does with hostnames that have no domain.
Value should be a symbol, one of `ping', `accept', and `reject'.
(custom-declare-variable 'ffap-machine-p-local ''reject '(#$ . -6421) :type '(choice (const ping) (const accept) (const reject)) :group 'ffap)
#@177 *What `ffap-machine-p' does with hostnames that have a known domain.
Value should be a symbol, one of `ping', `accept', and `reject'.
See `mail-extr.el' for the known domains.
(custom-declare-variable 'ffap-machine-p-known ''ping '(#$ . -6700) :type '(choice (const ping) (const accept) (const reject)) :group 'ffap)
#@180 *What `ffap-machine-p' does with hostnames that have an unknown domain.
Value should be a symbol, one of `ping', `accept', and `reject'.
See `mail-extr.el' for the known domains.
(custom-declare-variable 'ffap-machine-p-unknown ''reject '(#$ . -7024) :type '(choice (const ping) (const accept) (const reject)) :group 'ffap)
(defalias 'ffap-what-domain #[(domain) "\302\303!\210\304\305!\206 \304\306!\211\205 \307	\227\"\310N)\207" [ob domain require mail-extr ffap-soft-value "mail-extr-all-top-level-domains" "all-top-level-domains" intern-soft domain-name] 4])
#@615 Decide whether HOST is the name of a real, reachable machine.
Depending on the domain (none, known, or unknown), follow the strategy
named by the variable `ffap-machine-p-local', `ffap-machine-p-known',
or `ffap-machine-p-unknown'.  Pinging uses `open-network-stream'.
Optional SERVICE specifies the port used (default "discard").
Optional QUIET flag suppresses the "Pinging..." message.
Optional STRATEGY overrides the three variables above.
Returned values:
 t      means that HOST answered.
'accept means the relevant variable told us to accept.
"mesg"  means HOST exists, but does not respond for some reason.
(defalias 'ffap-machine-p #[(host &optional service quiet strategy) "\306\307\"\206\f \306\310\"??\205} \306\311\"\205 \312\224T\313O\227\211\203) \314	!\202* \315\204B 	\2047 \f\202A \n\204? \202A \316=\203L \316\202| \317=\203V \313\202| \320\321!\204` \313\202| \204x \n;\203s \322\323\n#\210\202x \322\324\"\210\325\326\327\217*\207" [host domain what-domain strategy ffap-machine-p-local ffap-machine-p-unknown string-match "[^-a-zA-Z0-9.]" "[^0-9]" "\\.[^.]*$" 0 nil ffap-what-domain "Local" accept reject fboundp open-network-stream message "Pinging %s (%s)..." "Pinging %s ..." error (byte-code "\302\303\304\305	\206\n \306$!\210\307\207" [host service delete-process open-network-stream "ffap-machine-p" nil "discard" t] 6) ((error (byte-code "A@\302\303	\"\203 \304\2025 \302\305	\"\203 	\2025 	\306\232\203/ \3078\310\232?\2055 \3078\2025 \311@A\")\207" [error mesg string-match "^Unknown host" nil "not responding$" "connection failed" 2 "permission denied" signal] 3))) ffap-machine-p-known quiet] 5 (#$ . 7599)])
#@62 In remote FULLNAME, replace path with NAME.  May return nil.
(defalias 'ffap-replace-path-component #[(fullname name) "\303\304\305\306\"\210\205 \307M\205 	\n\")\207" [found fullname name nil mapcar #[(sym) "\302!\205	 \211\207" [sym found fboundp] 2] (efs-replace-path-component ange-ftp-replace-path-component ange-ftp-replace-name-component) ffap-replace-path-component] 3 (#$ . 9274)])
#@56 Return trailing `.foo' suffix of FILE, or nil if none.
(defalias 'ffap-file-suffix #[(file) "\302\303\"\211\205 	\304O)\207" [file pos string-match "\\.[^./]*\\'" nil] 4 (#$ . 9680)])
#@54 List of suffixes tried by `ffap-file-exists-string'.
(defvar ffap-compression-suffixes '(".gz" ".Z") (#$ . 9874))
#@251 Return FILE (maybe modified) if the file exists, else nil.
When using jka-compr (a.k.a. `auto-compression-mode'), the returned
name may have a suffix added from `ffap-compression-suffixes'.
The optional NOMODIFY argument suppresses the extra search.
(defalias 'ffap-file-exists-string #[(file &optional nomodify) "\204 \306\207\307!\203 \207	\203 \306\207\310\311\n\"\204 \306\207\312!\235\203' \306\207\306\211\211\203P \307@P\211!\203G \306\211\202/ A\211\2042 \f+\207" [file nomodify file-name-handler-alist ffap-compression-suffixes ret try nil file-exists-p rassq jka-compr-handler ffap-file-suffix list] 4 (#$ . 9995)])
#@64 If FILENAME looks remote, return it (maybe slightly improved).
(defalias 'ffap-file-remote-p #[(filename) "\203% \303	\"\203% \303\304	\"\203! 	\305\211\224TO	\305\225\306OP\202\" 	\2061 \n\2051 \303\n	\"\2051 	\207" [ffap-ftp-regexp filename ffap-rfs-regexp string-match "//" 0 nil] 4 (#$ . 10653)])
#@52 Return machine name at point if it exists, or nil.
(defalias 'ffap-machine-at-point #[nil "\301\302!\303!\205 )\207" [mach ffap-string-at-point machine ffap-machine-p] 2 (#$ . 10962)])
#@121 Convert HOST to something like "/USER@HOST:" or "/HOST:".
Looks at `ffap-ftp-default-user', returns "" for "localhost".
(defalias 'ffap-host-to-path #[(host) "\303\232\203 \304\207	\211\305\306!\232\204 \n\305\307!\232\203 \310\311\n\211\205# \312\313\260)\207" [host ffap-ftp-default-user user "localhost" "" ffap-soft-value "ange-ftp-default-user" "efs-default-user" nil "/" "@" ":"] 6 (#$ . 11158)])
(put 'ffap-host-to-path 'byte-optimizer 'byte-compile-inline-expand)
(defalias 'ffap-fixup-machine #[(mach) "\203	 	;\204 \306\207\307\310	\"\203 \311	\312Q\207\307\313	\"\203# \314	\312Q\207\n\205T 	\211\315\232\2033 \316\202S \f\211\317\320!\232\204E \317\321!\232\203G \306\312\211\205N \322\323\260))\207" [ffap-url-regexp mach ffap-ftp-regexp host ffap-ftp-default-user user nil string-match "\\`gopher[-.]" "gopher://" "/" "\\`w\\(ww\\|eb\\)[-.]" "http://" "localhost" "" ffap-soft-value "ange-ftp-default-user" "efs-default-user" "@" ":"] 7])
#@52 Strings not matching this fail `ffap-newsgroup-p'.
(defvar ffap-newsgroup-regexp "^[a-z]+\\.[-+a-z_0-9.]+$" (#$ . 12135))
#@52 Used by `ffap-newsgroup-p' if gnus is not running.
(defvar ffap-newsgroup-heads '("alt" "comp" "gnu" "misc" "news" "sci" "soc" "talk") (#$ . 12263))
#@60 Return STRING if it looks like a newsgroup name, else nil.
(defalias 'ffap-newsgroup-p #[(string) "\306	\"\205O \307\n\310\211\203& @A\310\311\312\217\210\202 \204M \203M \306\313	\"\211\203L 	\314\315\225O\211\203L \235\203L 	),\207" [ffap-newsgroup-regexp string ffap-newsgroup-heads ret htb heads string-match (gnus-active-hashtb gnus-newsrc-hashtb gnus-killed-hashtb) nil (byte-code "J\203 \305	J\"\203 	\306\306\306\207" [htb string ret htbs heads intern-soft nil] 3) ((error)) "\\`\\([a-z]+\\)\\." 0 1 htbs head] 5 (#$ . 12418)])
#@68 If STRING looks like an url, return it (maybe improved), else nil.
(defalias 'ffap-url-p #[(string) "\303	\205 \304	\n\"\205 \n)\207" [case-fold-search ffap-url-regexp string t string-match] 3 (#$ . 12994)])
(put 'ffap-url-p 'byte-optimizer 'byte-compile-inline-expand)
#@65 Return URL as a local file, or nil.  Ignores `ffap-url-regexp'.
(defalias 'ffap-url-unwrap-local #[(url) "\301\302\"\205 \303\225T\304O\207" [url string-match "\\`\\(file\\|ftp\\):/?\\([^/]\\|\\'\\)" 1 nil] 3 (#$ . 13273)])
(put 'ffap-url-unwrap-local 'byte-optimizer 'byte-compile-inline-expand)
#@66 Return URL as a remote file, or nil.  Ignores `ffap-url-regexp'.
(defalias 'ffap-url-unwrap-remote #[(url) "\304\305\"\205@ \306\224\306\225O\211\307\232\203 \310\2028 \n\211\311\312!\232\204* \311\313!\232\203, \314\315\211\2053 \316	\317\260))\320\224\320\225OP\207" [url host ffap-ftp-default-user user string-match "\\`\\(ftp\\|file\\)://\\([^:/]+\\):?\\(/.*\\)" 2 "localhost" "" ffap-soft-value "ange-ftp-default-user" "efs-default-user" nil "/" "@" ":" 3] 7 (#$ . 13579)])
(put 'ffap-url-unwrap-remote 'byte-optimizer 'byte-compile-inline-expand)
#@51 Clean up URL and return it, maybe as a file name.
(defalias 'ffap-fixup-url #[(url) ";\204 \306\207	\203 \307\310\"\205 \311\225T\306O)\206{ \n\203p \203p \307\312\"\205l \313\224\313\225O\211\314\232\203@ \315\202d \211\316\317!\232\204T \316\320!\232\203W \306\321\211\205_ \322\f\323\260))\324\224\324\225OP)\206{ \325\326!\203z \326!\207\207" [url ffap-url-unwrap-local ffap-url-unwrap-remote ffap-ftp-regexp host ffap-ftp-default-user nil string-match "\\`\\(file\\|ftp\\):/?\\([^/]\\|\\'\\)" 1 "\\`\\(ftp\\|file\\)://\\([^:/]+\\):?\\(/.*\\)" 2 "localhost" "" ffap-soft-value "ange-ftp-default-user" "efs-default-user" "/" "@" ":" 3 fboundp url-normalize-url user] 7 (#$ . 14148)])
#@268 Return a list of strings parsed from environment variable ENV.
Optional EMPTY is the default list if (getenv ENV) is undefined, and
also is substituted for the first empty-string component, if there is one.
Uses `path-separator' to separate the path into substrings.
(defalias 'ffap-list-env #[(env &optional empty) "\204\n \306	!\205V \307\310\211\211\306	!\fP\311\f	#\211\2033 	\fO\fT\nB\202 \n\237\203T \312\n\235\211\203T \f\313\243\fA\"\241\210\f\242\206R \240\210\n,\207" [empty env ret dir match start getenv 0 nil string-match "" append path-separator] 4 (#$ . 14869)])
#@55 Remove duplicates and non-directories from PATH list.
(defalias 'ffap-reduce-path #[(path) "\303\211\n\203/ \n\nA@\304\232\203 \305\240\210@	\235\204 \306@!\203 	\241\210\202 	\237*\207" [tem ret path nil "." "" file-directory-p] 2 (#$ . 15475)])
#@216 Return list all subdirectories under DIR, starting with itself.
Directories beginning with "." are ignored, and directory symlinks
are listed but never searched (to avoid loops).
Optional DEPTH limits search depth.
(defalias 'ffap-all-subdirs #[(dir &optional depth) "\302!\205 \303\304!	\206 \305\"\207" [dir depth file-exists-p ffap-all-subdirs-loop expand-file-name -1] 3 (#$ . 15744)])
(defalias 'ffap-all-subdirs-loop #[(dir depth) "S	\302=?\205 \303\304\305\306\307	\310\311#\"\"B\207" [depth dir -1 apply nconc mapcar #[(d) "\302!\204 \303\207\304!\203 C\207\305	\"\207" [d depth file-directory-p nil file-symlink-p ffap-all-subdirs-loop] 3] directory-files t "\\`[^.]"] 9])
#@125 Bound on depth of subdirectory search in `ffap-kpathsea-expand-path'.
Set to 0 to avoid all searching, or nil for no limit.
(defvar ffap-kpathsea-depth 1 (#$ . 16447))
#@255 Replace each "//"-suffixed dir in PATH by a list of its subdirs.
The subdirs begin with the original directory, and the depth of the
search is bounded by `ffap-kpathsea-depth'.  This is intended to mimic
kpathsea, a library used by some versions of TeX.
(defalias 'ffap-kpathsea-expand-path #[(path) "\301\302\303\304\"\"\207" [path apply nconc mapcar #[(dir) "\302\303\"\203 \304\305\306O	\"\207C\207" [dir ffap-kpathsea-depth string-match "[^/]//\\'" ffap-all-subdirs 0 -2] 4]] 5 (#$ . 16622)])
#@581 A generic path-searching function, mimics `load' by default.
Returns path to file that (load FILE) would load, or nil.
Optional NOSUFFIX, if nil or t, is like the fourth argument
for load: whether to try the suffixes (".elc" ".el" "").
If a nonempty list, it is a list of suffixes to try instead.
Optional PATH is a list of directories instead of `load-path'.
Optional DIR-OK means that returning a directory is allowed,
DIR-OK is already implicit if FILE looks like a directory.

This uses ffap-file-exists-string, which may try adding suffixes from
`ffap-compression-suffixes'.
(defalias 'ffap-locate-file #[(file &optional nosuffix path dir-ok) "\204 	\n\204 \306!\307\232\310!\203 \311!C\306!\f:\203( \f\2021 \f\2030 \312\2021 \313\314\211\211\203 \203x \315\316@P@\"!\211\203o \n\204d \317!\204o \314\314\202C A\211\204H A\211\204? ,\207" [path load-path dir-ok file nosuffix found file-name-nondirectory "" file-name-absolute-p file-name-directory ("") (".elc" ".el" "") nil ffap-file-exists-string expand-file-name file-directory-p try suffixes suffixes-to-try] 5 (#$ . 17131)])
#@438 Alist of (KEY . FUNCTION) pairs parsed by `ffap-file-at-point'.
If string NAME at point (maybe "") is not a file or url, these pairs
specify actions to try creating such a string.  A pair matches if either
  KEY is a symbol, and it equals `major-mode', or
  KEY is a string, it should matches NAME as a regexp.
On a match, (FUNCTION NAME) is called and should return a file, an
url, or nil. If nil, search the alist for further matches.
(defvar ffap-alist '(("" . ffap-completable) ("\\.info\\'" . ffap-info) ("\\`info/" . ffap-info-2) ("\\`[-a-z]+\\'" . ffap-info-3) ("\\.elc?\\'" . ffap-el) (emacs-lisp-mode . ffap-el-mode) (finder-mode . ffap-el-mode) (help-mode . ffap-el-mode) (c++-mode . ffap-c-mode) (cc-mode . ffap-c-mode) ("\\.\\([chCH]\\|cc\\|hh\\)\\'" . ffap-c-mode) (fortran-mode . ffap-fortran-mode) ("\\.[fF]\\'" . ffap-fortran-mode) (tex-mode . ffap-tex-mode) (latex-mode . ffap-latex-mode) ("\\.\\(tex\\|sty\\|doc\\|cls\\)\\'" . ffap-tex) ("\\.bib\\'" . ffap-bib) ("\\`\\." . ffap-home) ("\\`~/" . ffap-lcd) ("^[Rr][Ff][Cc][- #]?\\([0-9]+\\)" . ffap-rfc) (dired-mode . ffap-dired)) (#$ . 18272))
(put 'ffap-alist 'risky-local-variable t)
(defalias 'ffap-completable #[(name) "\304!\206 	\305\306!\n\"\211\205 \nP*\207" [name default-directory dir cmp file-name-directory file-name-completion file-name-nondirectory] 4])
(defalias 'ffap-home #[(name) "\301\302\303#\207" [name ffap-locate-file t ("~")] 4])
(defalias 'ffap-info #[(name) "\301\302\303\304!\206\f \303\305!#\207" [name ffap-locate-file ("" ".info") ffap-soft-value "Info-directory-list" "Info-default-directory-list"] 5])
(defalias 'ffap-info-2 #[(name) "\301\302\303O!\207" [name ffap-info 5 nil] 4])
(defalias 'ffap-info-3 #[(name) "\301 \302\232\205\n \303!\207" [name ffap-string-around "()" ffap-info] 2])
(defalias 'ffap-el #[(name) "\301\302\"\207" [name ffap-locate-file t] 3])
(defalias 'ffap-el-mode #[(name) "\301\302\"?\205\f \303\304\"\207" [name string-match "\\.el\\'" ffap-locate-file (".el")] 3])
(byte-code "\301B\302\301!\204\f \303\301\207" [current-load-list ffap-c-path boundp ("/usr/include" "/usr/local/include")] 2)
(defalias 'ffap-c-mode #[(name) "\302\303	#\207" [name ffap-c-path ffap-locate-file t] 4])
(byte-code "\301B\302\301!\204\f \303\301\207" [current-load-list ffap-fortran-path boundp ("../include" "/usr/include")] 2)
(defalias 'ffap-fortran-mode #[(name) "\302\303	#\207" [name ffap-fortran-path ffap-locate-file t] 4])
#@105 Path where `ffap-tex-mode' looks for tex files.
If t, `ffap-tex-init' will initialize this when needed.
(defvar ffap-tex-path t (#$ . 20741))
(defalias 'ffap-tex-init #[nil "\301=\205 \302\303!\205 \304\305\306\307\310\311!\312\313\314\"\"!B!\211\207" [ffap-tex-path t message "Initializing ffap-tex-path ..." ffap-reduce-path "." ffap-kpathsea-expand-path append ffap-list-env "TEXINPUTS" ffap-soft-value "TeX-macro-global" ("/usr/local/lib/tex/macros" "/usr/local/lib/tex/inputs")] 8])
(defalias 'ffap-tex-mode #[(name) "\302 \210\303\304	#\207" [name ffap-tex-path ffap-tex-init ffap-locate-file (".tex" "")] 4])
(defalias 'ffap-latex-mode #[(name) "\302 \210\303\304	#\207" [name ffap-tex-path ffap-tex-init ffap-locate-file (".cls" ".sty" ".tex" "")] 4])
(defalias 'ffap-tex #[(name) "\302 \210\303\304	#\207" [name ffap-tex-path ffap-tex-init ffap-locate-file t] 4])
(byte-code "\301B\302\301!\204 \303\304\305\306!\"\301\207" [current-load-list ffap-bib-path boundp ffap-list-env "BIBINPUTS" ffap-reduce-path ("/usr/local/lib/tex/macros/bib" "/usr/lib/texmf/bibtex/bib")] 4)
(defalias 'ffap-bib #[(name) "\302\303	#\207" [name ffap-bib-path ffap-locate-file t] 4])
(defalias 'ffap-dired #[(name) "`\304\211\212\305 \210\306\307!\2050 \310\311\304\312#\2050 \313\314\n\312#\2050 \315\316\317\224\317\225{\"\211!\2050 ,\207" [try dir pt name nil beginning-of-line looking-at " *[-d]r[-w][-x][-r][-w][-x][-r][-w][-x] " re-search-backward "^ *$" t re-search-forward "^ *\\([^ 	\n:]*\\):\n *total " file-exists-p expand-file-name 1] 5])
(defalias 'ffap-lcd #[(name) "\304\305\306 \"\204 \307 \310\235\205J \311\312\313\"\211\314\232\203 \315\202> 	\211\311\316!\232\2040 \n\311\317!\232\2032 \320\321\n\211\2059 \322\323\260))\324\311\325\326\"!\327\320OQ\207" [host ffap-ftp-default-user user name string-match "Lisp Code Dir" buffer-name ffap-string-around ("||" "|\n") ffap-soft-value "elisp-archive-host" "archive.cis.ohio-state.edu" "localhost" "" "ange-ftp-default-user" "efs-default-user" nil "/" "@" ":" file-name-as-directory "elisp-archive-directory" "/pub/gnu/emacs/elisp-archive/" 2] 7])
(byte-code "\304B\305\304!\204: \306\306\307\232\203 \310\2026 \n\211\311\312!\232\204( \311\313!\232\203* \314\315\211\2051 \316	\317\260))\320P\314\207" [current-load-list host ffap-ftp-default-user user ffap-rfc-path boundp "ds.internic.net" "localhost" "" ffap-soft-value "ange-ftp-default-user" "efs-default-user" nil "/" "@" ":" "/rfc/rfc%s.txt"] 6)
(defalias 'ffap-rfc #[(name) "\302	\303\224\303\225O\"\207" [ffap-rfc-path name format 1] 5])
#@347 Alist of (MODE CHARS BEG END), where MODE is a symbol,
possibly a major-mode name, or one of the symbol
`file', `url', `machine', and `nocolon'.
`ffap-string-at-point' uses the data fields as follows:
1. find a maximal string of CHARS around point,
2. strip BEG chars before point from the beginning,
3. Strip END chars after point from the end.
(defvar ffap-string-at-point-mode-alist '((file "--:$+<>@-Z_a-z~" "<@" "@>;.,!?:") (url "--:=&?$+@-Z_a-z~#,%" "^A-Za-z0-9" ":;.,!?") (nocolon "--9$+<>@-Z_a-z~" "<@" "@>;.,!?") (machine "-a-zA-Z0-9." "" ".") (math-mode ",-:$+<>@-Z_a-z~`" "<" "@>;.,!?`:")) (#$ . 23337))
#@49 Last string returned by `ffap-string-at-point'.
(defvar ffap-string-at-point nil (#$ . 23958))
#@298 Return a string of characters from around point.
MODE (defaults to value of `major-mode') is a symbol used to look up string
syntax parameters in `ffap-string-at-point-mode-alist'.
If MODE is not found, we use `file' instead of MODE.
Sets `ffap-string-at-point' and `ffap-string-at-point-region'.
(defalias 'ffap-string-at-point #[(&optional mode) "\206 	\n\236\206 \306\n\236A`\212@\307x\210A@\fw\210`\240)\212@\307w\210\3108\fx\210A`\240){\311\312G\307$\210\211\f+\207" [mode major-mode ffap-string-at-point-mode-alist args pt ffap-string-at-point-region file nil 2 set-text-properties 0 str ffap-string-at-point] 5 (#$ . 24060)])
#@100 Return string of two chars around last `ffap-string-at-point'.
Assumes the buffer has not changed.
(defalias 'ffap-string-around #[nil "\212\301\302@b\210hA@b\210g#)\207" [ffap-string-at-point-region format "%c%c"] 4 (#$ . 24720)])
#@62 Call `ffap-string-at-point', and copy result to `kill-ring'.
(defalias 'ffap-copy-string-as-kill #[(&optional mode) "\302!\211\303\232\203 \304\305!\202 \306	!\210\304\307	\")\207" [mode str ffap-string-at-point "" message "No string found around point." kill-new "Copied to kill ring: %s"] 4 (#$ . 24960) nil])
#@52 Return url from around point if it exists, or nil.
(defalias 'ffap-url-at-point #[nil "\205\215 	\306=\203 \307\310!\206\215 \311\312!\313\314\n\"\203# \n\315\316O\202v \313\317\n\"\203L \320 \321\232\203< \313\322\n\"\203< \202= \323\211\205H \f\324\nQ\211)\204v \325\n!\203Y \326\nP\202v \313\327\n\"\203v \320 \321\232\203v \313\330\331\330\nP!\"\204v \332\nP\n\310\205\207 \313\"\205\207 *\205\214 \n)\207" [ffap-url-regexp major-mode name ffap-foo-at-bar-prefix prefix string w3-mode w3-view-this-url t ffap-string-at-point url string-match "^url:" 4 nil "\\`[^:</>@]+@[^:</>@]+[a-zA-Z0-9]\\'" ffap-string-around "<>" "[$.0-9].*[$.0-9].*@" "mailto" ":" ffap-newsgroup-p "news:" "\\`[a-z0-9]+\\'" "~" expand-file-name "mailto:" case-fold-search] 6 (#$ . 25282)])
#@109 Regexp Matching a line in a gopher bookmark (maybe indented).
The two subexpressions are the KEY and VALUE.
(defvar ffap-gopher-regexp "^.*\\<\\(Type\\|Name\\|Path\\|Host\\|Port\\) *= *\\(.*\\) *$" (#$ . 26072))
#@61 If point is inside a gopher bookmark block, return its url.
(defalias 'ffap-gopher-at-point #[nil "\212\306 \210\307!\205\213 \307!\203 o\204 \310y\210\202\n \307!\204# \311y\210\312\313\211\211\314\307!\203P \315\311\224\311\225{\227!\316\224\316\225{\211L\210\311y\210*\202- \203k \317\320\"\203k \321\322\323\225SO\323\225\313OQ\202\212 G\311U\205\212 \n\205\212 \324\n	\314\232\203\202 \325\202\205 \326	P\327\260-)\207" [ffap-gopher-regexp port host path name type beginning-of-line looking-at -1 1 "1" nil "70" intern 2 string-match "^ftp:.*@" "ftp://" 4 0 "gopher://" "" ":" "/" val var] 7 (#$ . 26290)])
#@114 Strings matching this are coerced to ftp paths by ffap.
That is, ffap just prepends "/".  Set to nil to disable.
(defvar ffap-ftp-sans-slash-regexp (byte-code "\205 \301\207" [ffap-ftp-regexp "\\`\\([^:@]+@[^:@]+:\\|[^@.:]+\\.[^@:]+:\\|[^:]+:[~/]\\)\\([^:]\\|\\'\\)"] 1) (#$ . 26934))
#@231 Return filename from around point if it exists, or nil.
Existence test is skipped for names that look remote.
If the filename is not obvious, it also tries `ffap-alist',
which may actually result in an url rather than a filename.
(defalias 'ffap-file-at-point #[nil "\306\307 \310 \311\312\313\217\206 \n\314!\315\216\316\235\203# \311\202>\f\204- \317!\206>\f\204B \320\321\"\203B \317\322\211\224O!\206>\f\204L \317!\206>\f\203V \323!\202h !\203k \320!\"\203k \323\324P!\206>\f\203u \317!\206>\320\"\"\203\213 \310\325!\211\203\213 \317!\206>#\311\211\211$%&&\203\365 $\204\365 &@%&A&'%@=\204\304 %@;\203\227 \320%@\"\203\227 \311\326\327\217\211$\203\227 $\306(\205\341 \320(\n\"\205\341 \n*\206\360 \323$!\206\360 \317$!$\202\227 $,\206>\311)\323!\206'\330=\205\320\331\332 \"\205\324\332 \333\334O\335Q\211*\205=\320\336\"\2036\317\337*\340\225\311O\"!\206=\317\337*\"!*.\207" [case-fold-search data string name abs default-directory t match-data ffap-string-at-point nil (byte-code "\301\302\"?\205 \303!\207" [string string-match "//" substitute-in-file-name] 3) ((error)) file-name-absolute-p ((set-match-data data)) ("" "/" "//" ".") ffap-file-exists-string string-match ":[0-9]" 0 ffap-file-remote-p "/" nocolon (byte-code "A	!\207" [tem name] 2) ((error)) internal-ange-ftp-mode "^\\*ftp \\(.*\\)@\\(.*\\)\\*$" buffer-name 5 -1 ":" "\\`\\(/?~?ftp\\)/" ffap-replace-path-component 1 ffap-ftp-sans-slash-regexp path-separator ffap-alist try tem alist major-mode ffap-url-regexp ffap-rfs-regexp remote-dir] 7 (#$ . 27228)])
#@66 Read file or url from minibuffer, with PROMPT and initial GUESS.
(defalias 'ffap-read-file-or-url #[(prompt guess) "\204 	\305\306!\204 \307!\204 \310\311!!\312!\313\314\f\315\n\305\n\2030 \nGB\2021 \316C&)\306!\204A \317!)\207" [guess default-directory dir minibuffer-completing-file-name prompt nil ffap-url-p ffap-file-remote-p abbreviate-file-name expand-file-name file-name-directory t completing-read ffap-read-file-or-url-internal file-name-history substitute-in-file-name] 7 (#$ . 28847)])
#@62 Complete url's from history, treating given string as valid.
(defalias 'ffap-read-url-internal #[(string dir action) "\303\304!	\204 \305\n\"\206& \n\202& 	\306=\203% \307\n\"\206& \nC\202& \306)\207" [hist action string ffap-soft-value "url-global-history-hash-table" try-completion t all-completions] 3 (#$ . 29372)])
(defalias 'ffap-read-file-or-url-internal #[(string dir action) "\204 	\n\204\f 	\n\306\f\205 \307\f\n\"\205 \n*\203& \310\n#\207\311\n#\207" [dir default-directory string case-fold-search ffap-url-regexp action t string-match ffap-read-url-internal read-file-name-internal] 4])
(defalias 'ffap-complete-as-file-p #[nil "\304=\203 \305 \306\205 \307	\"\205 	*?\207\310>\207" [minibuffer-completion-table string case-fold-search ffap-url-regexp ffap-read-file-or-url-internal buffer-string t string-match (read-file-name-internal read-directory-name-internal)] 3])
(byte-code "\301\302!\203! \303\300!\203 \304\202! \305\306!\210\307\310\311\312\313$\210\314\310\313\"\210\313\207" [PC-completion-as-file-name-predicate featurep complete boundp ffap-complete-as-file-p require advice ad-add-advice PC-do-completion (ffap-fix nil t (advice lambda nil "Work with ffap." (let ((minibuffer-completion-table (if (eq t (ffap-complete-as-file-p)) 'read-file-name-internal minibuffer-completion-table))) ad-do-it))) around nil ad-activate] 5)
#@59 If non-nil, ffap highlights the current buffer substring.
(defvar ffap-highlight t (#$ . 30759))
#@35 Overlay used by `ffap-highlight'.
(defvar ffap-highlight-overlay nil (#$ . 30862))
#@257 If `ffap-highlight' is set, highlight the guess in this buffer.
That is, the last buffer substring found by `ffap-string-at-point'.
Optional argument REMOVE means to remove any such highlighting.
Uses the face `ffap' if it is defined, or else `highlight'.
(defalias 'ffap-highlight #[(&optional remove) "\203\f 	\2054 \304	!\207\n\204 \305\207	\203  \306	@A@p$\207\307\310\"\311	\312\313\314!\2032 \314\2023 \315#\207" [remove ffap-highlight-overlay ffap-highlight ffap-string-at-point-region delete-overlay nil move-overlay apply make-overlay overlay-put face facep ffap highlight] 5 (#$ . 30952)])
#@60 Return file or URL or nil, guessed from text around point.
(defalias 'ffap-guesser #[nil "\203 \301\302 \206\f \303 !\206 \304 \206 \305\306 !\207" [ffap-url-regexp ffap-fixup-url ffap-url-at-point ffap-gopher-at-point ffap-file-at-point ffap-fixup-machine ffap-machine-at-point] 2 (#$ . 31564)])
(defalias 'ffap-prompter #[(&optional guess) "\300\216\301\302\215)\207" [((ffap-highlight t)) ffap-prompter (byte-code "\302\203	 \303\202\n \304	\206 \305 \211\211\203 \306 \210\"\207" [ffap-url-regexp guess ffap-read-file-or-url "Find file or URL: " "Find file: " ffap-guesser ffap-highlight] 4)] 2])
#@462 Find FILENAME, guessing a default from text around point.
If `ffap-url-regexp' is not nil, the FILENAME may also be an URL.
With a prefix, this command behaves exactly like `ffap-file-finder'.
If `ffap-require-prefix' is set, the prefix meaning is reversed.
See also the variables `ffap-dired-wildcards', `ffap-newfile-prompt',
and the functions `ffap-file-at-point' and `ffap-url-at-point'.

See <ftp://ftp.mathcs.emory.edu/pub/mic/emacs/> for latest version.
(defalias 'find-file-at-point #[(&optional filename) "t\203 \203 	?\202 	\203 \306\307\n!)\207\204 \310 \311\2051 \312\f\"\2051 \f*\203= \306!)\207\203N \312\"\203N \313!\207\203_ \314!\204_ \315\316!\203e \n\317!!\207\320\321\322\323E\"\207" [ffap-require-prefix current-prefix-arg ffap-file-finder filename string case-fold-search nil call-interactively ffap-prompter t string-match dired file-exists-p y-or-n-p "File does not exist, create buffer? " expand-file-name signal file-error "Opening file buffer" "no such file or directory" ffap-url-regexp ffap-url-fetcher ffap-dired-wildcards ffap-newfile-prompt] 5 (#$ . 32180) nil])
#@173 *If non-nil, overrides `ffap-next-regexp' during `ffap-menu'.
Make this more restrictive for faster menu building.
For example, try ":/" for URL (and some ftp) references.
(defvar ffap-menu-regexp nil (#$ . -33313))
#@54 Buffer local cache of menu presented by `ffap-menu'.
(defvar ffap-menu-alist nil (#$ . 33535))
(make-variable-buffer-local 'ffap-menu-alist)
#@126 Text properties applied to strings found by `ffap-menu-rescan'.
These properties may be used to fontify the menu references.
(defvar ffap-menu-text-plist (byte-code "\300 \203 \301\207\302\207" [display-mouse-p (face bold mouse-face highlight) nil] 1) (#$ . 33683))
#@296 Put up a menu of files and urls mentioned in this buffer.
Then set mark, jump to choice, and try to fetch it.  The menu is
cached in `ffap-menu-alist', and rebuilt by `ffap-menu-rescan'.
The optional RESCAN argument (a prefix, interactively) forces
a rebuild.  Searches with `ffap-menu-regexp'.
(defalias 'ffap-menu #[(&optional rescan) "\203 	\204 \203  @\212\nAb\210\n@\304 \232*\204  \305 \210\306\203) \307\202* \310\311\312BB\313#\207" [ffap-menu-alist rescan first ffap-url-regexp ffap-guesser ffap-menu-rescan ffap-menu-ask "Find file or URL" "Find file" "*Rescan Buffer*" -1 ffap-menu-cont] 4 (#$ . 33957) "P"])
(defalias 'ffap-menu-cont #[(choice) "A\302W\203 \303\304!\207\305 \210Ab\210\306\216	\203  \307 \203  \301 \210\310\302!\210\311@!)\207" [choice ffap-highlight 0 ffap-menu t push-mark ((ffap-highlight t)) ffap-guesser sit-for find-file-at-point] 2])
#@378 Prompt from a menu of choices, and then apply some action.
Arguments are TITLE, ALIST, and CONT (a continuation function).
This uses either a menu or the minibuffer depending on invocation.
The TITLE string is used as either the prompt or menu title.
Each ALIST entry looks like (STRING . DATA) and defines one choice.
Function CONT is applied to the entry chosen by the user.
(defalias 'ffap-menu-ask #[(title alist cont) "\305\306\307!\203 \310 \203 \307\311\312	\313\314\n\"BD\"\202; \315\316\317\320	\n@@#\n\305\311\305%)\321\322!\210\323\n\"\206: \n@\203E \f!\202J \324\325!\210\305)\207" [choice title alist minibuffer-setup-hook cont nil fboundp x-popup-menu ffap-mouse-event t "" mapcar #[(i) "@B\207" [i] 2] minibuffer-completion-help completing-read format "%s (default %s): " sit-for 0 assoc message "No choice made!"] 7 (#$ . 34847)])
#@129 Search buffer for `ffap-menu-regexp' to build `ffap-menu-alist'.
Applies `ffap-menu-text-plist' text properties at all matches.
(defalias 'ffap-menu-rescan #[nil "\206 	deZ\306 \307\211\n\236\203 \n\202 \310\307\311\216\212eb\210\312 \211\203P \f`BB\313@`#\210\314\315`eZ\316_\245\f#\210\202( .\314\317!\210\320\321\"\211A\203\206 @@A@@\232\203} \211AA\241\210\202` A\211\202b )\320\322\"\211\207" [ffap-menu-regexp ffap-next-regexp major-mode ffap-string-at-point-mode-alist item buffer-read-only buffer-modified-p nil file ((byte-code "\204 \301\302!\210\302\207" [mod set-buffer-modified-p nil] 2)) ffap-next-guess add-text-properties message "Scanning...%2d%% <%s>" 100 "Scanning...done" sort #[(a b) "@	@\231\207" [a b] 2] #[(a b) "A	AW\207" [a b] 2] mod range ffap-menu-alist ffap-string-at-point-region ffap-menu-text-plist ptr] 8 (#$ . 35713) nil])
#@128 Command invoked by `ffap-at-mouse' if nothing found at click, or nil.
Ignored when `ffap-at-mouse' is called programmatically.
(defvar ffap-at-mouse-fallback nil (#$ . 36630))
(put 'ffap-at-mouse-fallback 'risky-local-variable t)
#@276 Find file or url guessed from text around mouse click.
Interactively, calls `ffap-at-mouse-fallback' if no guess is found.
Return value:
  * if a guess string is found, return it (after finding it)
  * if the fallback is called, return whatever it returns
  * otherwise, nil
(defalias 'ffap-at-mouse #[(e) "\212\303!\210\304 )\211\203) \305!q\210\306 \210\307\216\310\311!\210\312\313	\"\210\314	!\210	)\202< t\205< \n\2037 \315\n!\202< \312\316!\210\317)\207" [e guess ffap-at-mouse-fallback mouse-set-point ffap-guesser ffap-event-buffer ffap-highlight ((ffap-highlight t)) sit-for 0 message "Finding `%s'" find-file-at-point call-interactively "No file or url found at mouse click." nil] 4 (#$ . 36867) "e"])
#@83 Like `ffap', but put buffer in another window.
Only intended for interactive use.
(defalias 'ffap-other-window #[nil "\300\301\213!\207" [switch-to-buffer-other-window ((byte-code "\300\301!\210p\207" [call-interactively ffap] 2))] 2 (#$ . 37588) nil])
#@82 Like `ffap', but put buffer in another frame.
Only intended for interactive use.
(defalias 'ffap-other-frame #[nil "\302 \303!\304\216\305\306\"\210\307\310\213!+\207" [win wdp selected-window window-dedicated-p ((set-window-dedicated-p win wdp)) set-window-dedicated-p nil switch-to-buffer-other-frame ((byte-code "\300\301!\210p\207" [call-interactively ffap] 2))] 3 (#$ . 37847) nil])
#@43 Submit a bug report for the ffap package.
(defalias 'ffap-bug #[nil "\302\303!\210\304\305\306\307\310\311\312\313	\314#\"#)\207" [reporter-prompt-for-summary-p obarray require reporter t reporter-submit-bug-report "Michelangelo Grigni <mic@mathcs.emory.edu>" "ffap" mapcar intern all-completions "ffap-" boundp] 9 (#$ . 38245) nil])
(fset 'ffap-submit-bug 'ffap-bug)
#@56 Bind `ffap-next' and `ffap-menu' to M-l and M-m, resp.
(defalias 'ffap-ro-mode-hook #[nil "\300\301\302\"\210\300\303\304\"\207" [local-set-key "\354" ffap-next "\355" ffap-menu] 3 (#$ . 38620)])
#@66 Bind `ffap-gnus-next' and `ffap-gnus-menu' to M-l and M-m, resp.
(defalias 'ffap-gnus-hook #[nil "\300\301!\302L\210\303\304\305\"\210\303\306\307\"\207" [make-local-variable ffap-foo-at-bar-prefix "news" local-set-key "\354" ffap-gnus-next "\355" ffap-gnus-menu] 3 (#$ . 38822)])
(defalias 'ffap-gnus-wrapper #[(form) "p\304!=\203 \305 \210\306\307 !\310\311!\210\312\n!\210~\210`e=\203& \313\314\315\316#\210\317\216\320!*\207" [gnus-summary-buffer sb gnus-article-buffer form get-buffer gnus-summary-select-article window-buffer selected-window gnus-configure-windows article pop-to-buffer search-forward "\n\n" nil t ((pop-to-buffer sb)) eval] 4])
#@45 Run `ffap-next' in the gnus article buffer.
(defalias 'ffap-gnus-next #[nil "\300\301!\207" [ffap-gnus-wrapper (ffap-next nil t)] 2 (#$ . 39484) nil])
#@45 Run `ffap-menu' in the gnus article buffer.
(defalias 'ffap-gnus-menu #[nil "\300\301!\207" [ffap-gnus-wrapper (ffap-menu)] 2 (#$ . 39641) nil])
#@152 *If set, reverses the prefix argument to `dired-at-point'.
This is nil so neophytes notice ffap.  Experts may prefer to disable
ffap most of the time.
(custom-declare-variable 'dired-at-point-require-prefix 'nil '(#$ . -39793) :type 'boolean :group 'ffap :version "20.3")
#@56 Start Dired, defaulting to file at point.  See `ffap'.
(defalias 'dired-at-point #[(&optional filename) "t\203 \203 	?\202 	\203 \306\307\310!)\207\n\204 \311 \n\312\205/ \313\"\205/ *\2038 \n!\207\203I \313\n\"\203I \310\n!\207\314\n!\203c \315\n!\203[ \310\316\n!!\207\310\316\n!\317P!\207\320\321!\203q \322\n!\210\310\n!\207\323\324\n\"\207" [dired-at-point-require-prefix current-prefix-arg filename string case-fold-search ffap-url-regexp nil call-interactively dired dired-at-point-prompter t string-match file-exists-p file-directory-p expand-file-name "*" y-or-n-p "Directory does not exist, create it? " make-directory error "No such file or directory `%s'" ffap-url-fetcher ffap-dired-wildcards] 3 (#$ . 40071) nil])
(defalias 'dired-at-point-prompter #[(&optional guess) "\302\216\303\203 \304\202\f \305	\206 \306 \211\211\203 \307 \210\")\207" [ffap-url-regexp guess ((ffap-highlight t)) ffap-read-file-or-url "Dired file or URL: " "Dired file: " ffap-guesser ffap-highlight] 4])
#@202 List of binding forms evaluated by function `ffap-bindings'.
A reasonable ffap installation needs just this one line:
  (ffap-bindings)
Of course if you do not like these bindings, just roll your own!
(defvar ffap-bindings '((global-set-key [S-mouse-3] 'ffap-at-mouse) (global-set-key [C-S-mouse-3] 'ffap-menu) (global-set-key "" 'find-file-at-point) (global-set-key "4f" 'ffap-other-window) (global-set-key "5f" 'ffap-other-frame) (global-set-key "d" 'dired-at-point) (add-hook 'gnus-summary-mode-hook 'ffap-gnus-hook) (add-hook 'gnus-article-mode-hook 'ffap-gnus-hook) (add-hook 'vm-mode-hook 'ffap-ro-mode-hook) (add-hook 'rmail-mode-hook 'ffap-ro-mode-hook)) (#$ . 41097))
#@49 Evaluate the forms in variable `ffap-bindings'.
(defalias 'ffap-bindings #[nil "\301\302B!\207" [ffap-bindings eval progn] 3 (#$ . 41785) nil])
