annotate lisp/ido.el @ 47576:b31c8ab7336a

Sync with version 2.0.20. Lengthy ChangeLog follows: 2002-09-22 Kai Gro?ohann <grossjoh@ls6.informatik.uni-dortmund.de> Version 2.0.20 released. 2002-09-20 Kai Gro?ohann <grossjoh@ls6.informatik.uni-dortmund.de> * net/tramp.el (tramp-completion-function-alist): Escape open paren in docstring. (tramp-user-regexp, tramp-host-regexp): Allow empty strings. (tramp-handle-insert-file-contents): Call tramp-message-for-buffer instead of tramp-message. (tramp-open-connection-rsh): Handle empty string as user name. (tramp-open-connection-su): Handle empty string as host name. Handle nil user name. (tramp-handle-file-local-copy, tramp-handle-write-region) (tramp-completion-handle-file-name-all-completions) (tramp-open-connection-telnet, tramp-open-connection-rsh) (tramp-open-connection-su, tramp-post-connection) (tramp-maybe-open-connection, tramp-method-out-of-band-p) (tramp-get-connection-function, tramp-get-remote-sh) (tramp-get-rsh-program, tramp-get-rsh-args) (tramp-get-rcp-program, tramp-get-rcp-args) (tramp-get-rcp-keep-date-arg, tramp-get-su-program) (tramp-get-su-args, tramp-get-telnet-program) (tramp-get-telnet-args): Use `tramp-find-method', perhaps require additional args USER, HOST. (tramp-action-password, tramp-open-connection-telnet) (tramp-open-connection-su, tramp-open-connection-multi) (tramp-method-out-of-band-p): `tramp-method-out-of-band-p' now takes USER and HOST arguments, to be able to use `tramp-find-method'. Update callers. (tramp-find-method): New function. 2002-09-20 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-handle-insert-directory): Handle "--dired" in SWITCHES (by removing it). 2002-09-18 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-file-name-handler): Add `file-remote-p' property. 2002-09-17 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (top-level): Maybe autoload uudecode-decode-region. 2002-09-16 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-bug): Add tramp-methods. 2002-09-16 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-methods): Update docstring: tramp-encoding-command, tramp-decoding-command, tramp-encoding-function and tramp-decoding-function are not parameters anymore. (tramp-uuencode-region): Autoload it. 2002-09-13 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> Version 2.0.19 released. * net/tramp-uu.el: New file, implements uuencode in Lisp. * net/tramp.el (tramp-coding-commands): Use `tramp-uuencode-region' as local encoder for the uuencode based entries. 2002-09-13 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-handle-write-region): Wrong parens. 2002-09-13 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> Version 2.0.18 released. * net/tramp.el (tramp-perl-decode): Perl changes to accomodate older versions of Perl. Now tested with 5.004. Suggestion from Michael Albinus. 2002-09-12 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-find-inline-encoding): Call tramp-call-local-coding-command with nil for INPUT and OUTPUT. (tramp-call-local-coding-command): OUTPUT equals nil means to discard the output. INPUT equals nil means /dev/null. 2002-09-12 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-encoding-shell): Default to environment variable COMSPEC on Windows. (tramp-handle-write-region): More debugging output. (tramp-find-inline-encoding): Ditto. 2002-09-11 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-completion-handle-file-name-all-completions): Define `result1'. (tramp-parse-hosts-group): Discard IPv6 entries. 2002-09-11 Kai Gro?ohann <grossjoh@ls6.informatik.uni-dortmund.de> * net/tramp.el (tramp-post-connection): Only send Perl mime-encode/decode implementations when using inline method. (tramp-handle-file-local-copy) (tramp-handle-write-region, tramp-post-connection) (tramp-coding-commands, tramp-find-inline-encoding): For the inline encodings, distinguish between local and remote commands, instead of between commands and functions. (The local commands can be functions, too.) If the local host is a Windows machine, we can't expect the same commands to work there as on the remote host. (tramp-call-local-coding-command): New function for calling local encoding and decoding commands. (tramp-set-remote-encoding, tramp-get-remote-encoding) (tramp-set-remote-decoding, tramp-get-remote-decoding) (tramp-set-local-encoding, tramp-get-local-encoding) (tramp-set-local-decoding, tramp-get-local-decoding): New functions. (tramp-get-encoding-command, tramp-set-encoding-command) (tramp-get-decoding-command, tramp-set-decoding-command) (tramp-get-encoding-function, tramp-set-encoding-function) (tramp-get-decoding-function, tramp-set-decoding-function): Old functions, removed. 2002-09-10 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-open-connection-setup-interactive-shell): Change command to invoke /bin/sh slightly to make it compatible with the `rc' shell. Suggested by Daniel Pittman. 2002-09-10 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-handle-write-region): Added missing `)'. Hope it's the right place. 2002-09-09 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-open-connection-setup-interactive-shell): Do "exec env PS1='$ ' /bin/sh" instead of just "exec /bin/sh" in order to get a sane shell prompt. If people have ${CWD}, say, in their shell prompt, then the default login shell might display something harmless, but the /bin/sh will display a dollar sign which confused the subsequent prompt recognition. (tramp-multi-action-password): More debugging output. (tramp-encoding-shell): Renamed from tramp-sh-program. More documentation. Default to cmd.exe on Windows NT. (tramp-encoding-command-switch): New variable. Use instead of hard-wired "-c" which is only good for /bin/sh. (tramp-encoding-reads-stdin): New variable. If t, commands are called like "/bin/sh -c COMMAND <INPUT", if nil, they are called like "/bin/sh -c COMMAND INPUT", ie the input file is the last argument. (tramp-multi-sh-program): Always default to tramp-encoding-shell. (tramp-handle-file-local-copy, tramp-handle-write-region): Respect tramp-encoding-shell and friends. (tramp-find-inline-encoding): Use new-style calls for checking if the local commands work. 2002-09-07 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-methods): Remove `tramp-completion-function' entries. They are handled now by `tramp-completion-function-alist'. (tramp-completion-function): Defvar removed. I've never used it. Hmm. (tramp-get-completion-function) (tramp-get-completion-rsh, tramp-get-completion-ssh) (tramp-get-completion-telnet, tramp-get-completion-su): Functions removed as well. Not necessary any longer due to extended customization means. (tramp-completion-function-alist): New defcustom. Holds all FUNCTION FILE pairs used for user and host name completion relevant for METHOD. (tramp-completion-function-alist-rsh) (tramp-completion-function-alist-ssh) (tramp-completion-function-alist-telnet) (tramp-completion-function-alist-su): Defconst for initializing `tramp-completion-function-alist'. Unfortunately, mainly UNIX-like values are known for me until now. Needs to be completed for at least VMS++ like operating systems. (tramp-set-completion-function) (tramp-get-completion-function): New functions for configuration of `tramp-completion-function-alist'. The old definition of `tramp-get-completion-function' has been discarded. (tramp-completion-handle-file-name-all-completions): Change function call for user/host completion according to definition in `tramp-completion-function-alist'. (tramp-parse-passwd): Added exception handling for "root", because `tramp-get-completion-su' (the previous place for this stuff) doesn't exist any longer. 2002-09-07 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-enter-password): Use `tramp-password-end-of-line' to terminate the line. (tramp-bug): Include new variable `tramp-password-end-of-line'. (tramp-password-end-of-line): New variable. People who use plink under Windows might have to issue "\r\n" after the password, but they need to send just "\n" after the other commands. So this variable was introduced to complement `tramp-rsh-end-of-line'. (tramp-wait-for-output, tramp-post-connection): Allow "\r" at end of line of the output delimiter. 2002-09-06 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-handle-file-local-copy, tramp-find-shell) (tramp-open-connection-setup-interactive-shell): Add some comments about Douglas Grey Stephen's suggestions to make Tramp work better with plink under Windows. I'm not sure what to think of them, but now I have a guinea pig to try it out on. Said guinea pig is having other problems, though... Also remove some commented-out code. 2002-09-06 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-get-completion-methods): Algorithm slightly tuned. (tramp-get-completion-user-host): Accept user names as they are if typed until "@". (tramp-completion-mode): Replace `last-input-char' by modern `last-input-event'. Check for `event-modifiers'. 2002-09-06 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (file-expand-wildcards): Corrected check to see if advising is necessary. 2002-09-05 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-postfix-single-method-format) (tramp-postfix-multi-method-format) (tramp-postfix-multi-hop-format) (tramp-postfix-user-format): New format strings. (tramp-postfix-single-method-regexp) (tramp-postfix-multi-method-regexp) (tramp-postfix-multi-hop-regexp) (tramp-postfix-user-regexp) (tramp-make-multi-tramp-file-format) (tramp-make-tramp-file-name): Apply them. (tramp-completion-handle-file-name-all-completions): Fix for invoking ange-ftp in case of "/ftp:xxx" file names. 2002-09-04 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-prefix-format) (tramp-postfix-host-format): New format strings. (tramp-prefix-regexp, tramp-method-regexp) (tramp-postfix-single-method-regexp) (tramp-postfix-multi-method-regexp) (tramp-postfix-multi-hop-regexp) (tramp-user-regexp, tramp-postfix-user-regexp) (tramp-host-regexp, tramp-postfix-host-regexp) (tramp-path-regexp): New atomar regular expressions. If corresponding format strings exist, derived from them. (tramp-file-name-structure) (tramp-multi-file-name-structure) (tramp-multi-file-name-hop-structure) (tramp-make-multi-tramp-file-format) (tramp-completion-mode) (tramp-completion-dissect-file-name) (tramp-parse-rhosts-group) (tramp-parse-shosts-group) (tramp-parse-hosts-group) (tramp-parse-passwd-group): Apply these expressions. (tramp-file-name-structure-unified) (tramp-file-name-structure-separate) (tramp-make-tramp-file-format-unified) (tramp-make-tramp-file-format-separate) (tramp-make-tramp-file-format) (tramp-make-tramp-file-user-nil-format-unified) (tramp-make-tramp-file-user-nil-format-separate) (tramp-make-tramp-file-user-nil-format) (tramp-multi-file-name-structure-unified) (tramp-multi-file-name-structure-separate) (tramp-multi-file-name-hop-structure-unified) (tramp-multi-file-name-hop-structure-separate) (tramp-make-multi-tramp-file-format-unified) (tramp-make-multi-tramp-file-format-separate): Removed. (tramp-make-tramp-file-name): Allow partial tramp file names. Generate tramp file format on-the-fly depending on parameters. Apply atomar format strings resp expressions. (tramp-get-completion-methods) (tramp-get-completion-user-host): Apply `tramp-make-tramp-file-name'. (tramp-parse-hosts-group): Take all host names and IP addresses into account. (tramp-bug): Remove `tramp-make-tramp-file-format'. 2002-09-01 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-methods): Add `tramp-completion-function' for "su" and "sudo". (tramp-get-completion-telnet): Implement it. (tramp-parse-hosts) (tramp-parse-hosts-group) (tramp-get-completion-su) (tramp-parse-passwd) (tramp-parse-passwd-group): New functions. 2002-08-31 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-completion-mode): Check for `last-input-char'. (tramp-completion-file-name-handler-alist): Add handler for `file-exists-p. (tramp-completion-handle-file-exists-p): New function. (tramp-completion-handle-file-name-completion): Simplified. (tramp-completion-dissect-file-name): Regexp's reorganised. (tramp-completion-handle-file-name-all-completions): Call completion-function only if `user' or `host' is given. (tramp-get-completion-user-host): New function. (tramp-get-completion-rsh) (tramp-get-completion-ssh): Apply it. 2002-08-29 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-completion-file-name-handler-alist): Add handler for `expand-file-name'. (tramp-completion-handle-expand-file-name): New function. 2002-08-26 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-completion-mode): New function. (tramp-completion-handle-file-name-directory) (tramp-completion-handle-file-name-all-completions): Apply it. (tramp-methods): Remove double definition of `ssh1-old' and `ssh2-old'. (tramp-point-at-eol): New defalias. (tramp-parse-rhosts-group) (tramp-parse-shosts-group):: Apply it. 2002-08-25 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-get-completion-methods) (tramp-get-completion-rsh) (tramp-get-completion-ssh): Add "[" for Xemacs. (tramp-completion-file-name-regexp-separate): Expression adapted. (tramp-completion-file-name-handler-alist): Add handler for `file-name-directory' and `file-name-nondirectory'. (tramp-completion-handle-file-name-directory) (tramp-completion-handle-file-name-nondirectory) (tramp-completion-run-real-handler): New functions. (tramp-completion-file-name-handler) (tramp-completion-handle-file-name-all-completions): Apply `tramp-completion-run-real-handler'. (tramp-parse-rhosts) (tramp-parse-shosts): Use `with-temp-buffer'. `result? renamed to `res' (otherwise side effects in XEmacs). 2002-08-24 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-completion-file-name-regexp) (tramp-completion-file-name-handler-alist) (tramp-flatten-list) (tramp-completion-dissect-file-name) (tramp-get-completion-rsh) (tramp-parse-rhosts) (tramp-parse-rhosts-group) (tramp-get-completion-ssh): Doc string tuned. (tramp-methods): Doc string and custom type extended for `tramp-completion-function'. (tramp-completion-function): Variable added. Is it really used? Other variables like `tramp-completion-function' aren't used. (tramp-completion-file-name-handler-alist): Add handler for `file-name-completion'. (tramp-completion-handle-file-name-completion): New function. 2002-08-18 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-parse-rhosts) (tramp-parse-rhosts-group) (tramp-parse-shosts) (tramp-parse-shosts-group): New functions. 2002-08-17 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-completion-dissect-file-name) (tramp-completion-dissect-file-name1): New functions. 2002-08-16 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-get-completion-function) (tramp-get-completion-rsh) (tramp-get-completion-ssh) (tramp-get-completion-telnet): New functions. (tramp-methods): Add `tramp-completion-function' for all methods. 2002-08-15 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-get-completion-methods): New function. (tramp-find-default-method): Allow host to be nil (like user). 2002-08-14 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-completion-file-name-regexp-unified) (tramp-completion-file-name-regexp-separate) (tramp-completion-file-name-regexp) (tramp-completion-file-name-handler-alist): New defcustoms. (tramp-completion-file-name-handler): New function. Add `tramp-completion-file-name-handler' to `file-name-handler-alist'. (tramp-run-real-handler): Add `tramp-completion-file-name-handler' to `inhibit-file-name-handlers'. (tramp-completion-handle-file-name-all-completions) (tramp-completion-handle-file-name-completion): New functions. 2002-08-12 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-invoke-ange-ftp): `tramp-disable-ange-ftp' must be called again after activating `ange-ftp'. (tramp-ange-ftp-file-name-p): Check for Xemacs. 2002-08-08 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-do-copy-or-rename-file): Don't pass KEEP-DATE to tramp-invoke-ange-ftp 'rename. (tramp-handle-write-region): Don't pass LOCKNAME and CONFIRM to tramp-invoke-ange-ftp 'write-region. (tramp-handle-set-file-modes): Change order of FILENAME and MODE passing to tramp-invoke-ange-ftp 'set-file-modes. (tramp-flatten-list): New function. Maybe this functionality does exist already elsewhere in the libraries. (tramp-invoke-ange-ftp): Apply `tramp-flatten-list' to parameter list in order to avoid nested lists, f.e. when invoked from `tramp-handle-dired-call-process'. 2002-09-05 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-chunksize): New kluge variable. (tramp-send-region): If tramp-chunksize is non-nil, send region in parts and sleep 0.1 seconds between chunks. 2002-09-03 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-handle-insert-directory): Use `insert-buffer-substring' instead of `insert-buffer', which is not supposed to be used from Lisp. Remember old point in a variable instead of using `mark'. Suggestion from Stefan Monnier. (tramp-unified-filenames): New variable. Use it in default value of other filename variables. (file-expand-wildcards): Don't advise unless "[" and "]" are used in the filename format. 2002-09-01 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-methods): Remove duplicate definition of ssh1-old and ssh2-old.
author Kai Großjohann <kgrossjo@eu.uu.net>
date Sun, 22 Sep 2002 13:23:36 +0000
parents d7ff55da60cd
children 01727f34cb9d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
46068
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1 ;;; ido.el --- interactively do things with buffers and files.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3 ;; Copyright (C) 1996-2002 Free Software Foundation, Inc.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
4
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
5 ;; Author: Kim F. Storm <storm@cua.dk>
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
6 ;; Based on: iswitchb by Stephen Eglen <stephen@cns.ed.ac.uk>
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
7 ;; Keywords: extensions convenience
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
8
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
10
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
14 ;; any later version.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
15
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
19 ;; GNU General Public License for more details.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
20
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
24 ;; Boston, MA 02111-1307, USA.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
25
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
26 ;;; Acknowledgements
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
27
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
28 ;; Infinite amounts of gratitude goes to Stephen Eglen <stephen@cns.ed.ac.uk>
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
29 ;; who wrote iswitch-buffer mode - from which I ripped off 99% of the code
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
30 ;; for ido-switch-buffer and found the inspiration for ido-find-file.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
31 ;; The ido package would never have existed without his work.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
32
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
33 ;; Also thanks to Klaus Berndl, Rohit Namjoshi, Robert Fenk, Alex Schroeder,
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
34 ;; Bill Benedetto, and Stephen Eglen for bug fixes and improvements.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
35
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
36 ;;; History
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
37
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
38 ;; Since I discovered Stephen Eglen's excellent iswitchb package, I just
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
39 ;; couldn't live without it, but once being addicted to switching buffers
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
40 ;; with a minimum of keystrokes, I soon found that opening files in the
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
41 ;; old-fashioned way was just too slow - so I decided to write a package
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
42 ;; which could open files with the same speed and ease as iswitchb could
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
43 ;; switch buffers.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
44
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
45 ;; I originally wrote a separate ifindf.el package based on a copy of
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
46 ;; iswitchb.el, which did for opening files what iswitchb did for
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
47 ;; switching buffers. Along the way, I corrected a few errors in
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
48 ;; ifindf which could have found its way back into iswitchb, but since
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
49 ;; most of the functionality of the two package was practically
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
50 ;; identical, I decided that the proper thing to do was to merge my
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
51 ;; ifindf package back into iswitchb.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
52 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
53 ;; This is basically what ido (interactively do) is all about; but I
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
54 ;; found it ackward to merge my changes into the "iswitchb-" namespace,
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
55 ;; so I invented a common "ido-" namespace for the merged packages.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
56 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
57 ;; This version is based on ido.el version 1.57 released on
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
58 ;; gnu.emacs.sources adapted for emacs 21.4 to use command remapping
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
59 ;; and optionally hooking the read-buffer and read-file-name functions.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
60 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
61 ;; Prefix matching was added by Klaus Berndl <klaus.berndl@sdm.de> based on
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
62 ;; an idea of Yuji Minejima <ggb01164@nifty.ne.jp> and his mcomplete-package.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
63
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
64
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
65 ;;; Commentary:
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
66
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
67 ;; Ido - interactive do - switches between buffers and opens files and
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
68 ;; directories with a minimum of keystrokes. It is a superset of
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
69 ;; iswitchb, the interactive buffer switching package by Stephen Eglen.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
70
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
71 ;; Interactive substring matching
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
72 ;; ------------------------------
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
73 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
74 ;; As you type in a substring, the list of buffers or files currently
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
75 ;; matching the substring are displayed as you type. The list is
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
76 ;; ordered so that the most recent buffers or files visited come at
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
77 ;; the start of the list.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
78 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
79 ;; The buffer or file at the start of the list will be the one visited
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
80 ;; when you press RETURN. By typing more of the substring, the list is
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
81 ;; narrowed down so that gradually the buffer or file you want will be
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
82 ;; at the top of the list. Alternatively, you can use C-s and C-r (or
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
83 ;; the right and left arrow keys) to rotate buffer or file names in the
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
84 ;; list until the one you want is at the top of the list.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
85 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
86 ;; Completion is also available so that you can see what is common to
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
87 ;; all of the matching buffers or files as you type.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
88 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
89 ;; Example:
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
90 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
91 ;; If I have two buffers called "123456" and "123", with "123456" the
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
92 ;; most recent, when I use ido-switch-buffer, I first of all get
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
93 ;; presented with the list of all the buffers
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
94 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
95 ;; Buffer: {123456,123}
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
96 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
97 ;; If I then press 2:
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
98 ;; Buffer: 2[3]{123456,123}
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
99 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
100 ;; The list in {...} are the matching buffers, most recent first
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
101 ;; (buffers visible in the current frame are put at the end of the
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
102 ;; list by default). At any time I can select the item at the head of
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
103 ;; the list by pressing RET. I can also bring the put the first
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
104 ;; element at the end of the list by pressing C-s or [right], or put
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
105 ;; the last element at the head of the list by pressing C-r or [left].
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
106 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
107 ;; The item in [...] indicates what can be added to my input by
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
108 ;; pressing TAB. In this case, I will get "3" added to my input.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
109
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
110 ;; So, I press TAB:
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
111 ;; Buffer: 23{123456,123}
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
112 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
113 ;; At this point, I still have two matching buffers.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
114 ;; If I want the first buffer in the list, I simply press RET. If I
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
115 ;; wanted the second in the list, I could press C-s to move it to the
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
116 ;; top of the list and then RET to select it.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
117 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
118 ;; However, if I type 4, I only have one match left:
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
119 ;; Buffer: 234[123456] [Matched]
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
120 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
121 ;; Since there is only one matching buffer left, it is given in [] and we
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
122 ;; see the text [Matched] afterwards. I can now press TAB or RET to go
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
123 ;; to that buffer.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
124 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
125 ;; If however, I now type "a":
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
126 ;; Buffer: 234a [No match]
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
127 ;; There are no matching buffers. If I press RET or TAB, I can be
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
128 ;; prompted to create a new buffer called "234a".
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
129 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
130 ;; Of course, where this function comes in really useful is when you
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
131 ;; can specify the buffer using only a few keystrokes. In the above
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
132 ;; example, the quickest way to get to the "123456" file would be
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
133 ;; just to type 4 and then RET (assuming there isn't any newer buffer
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
134 ;; with 4 in its name).
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
135
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
136 ;; Likewise, if you use C-x C-f (ido-find-file), the list of files and
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
137 ;; directories in the current directory is provided in the same
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
138 ;; fashion as the buffers above. The files and directories are
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
139 ;; normally sorted in alphabetical order, but the most recently
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
140 ;; visited directory is placed first to speed up navigating to
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
141 ;; directories that you have visited recently.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
142 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
143 ;; In addition to scrolling through the list using [right] and [left],
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
144 ;; you can use [up] and [down] to quickly scroll the list to the next
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
145 ;; or previous subdirectory.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
146 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
147 ;; To go down into a subdirectory, and continue the file selection on
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
148 ;; the files in that directory, simply move the directory to the head
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
149 ;; of the list and hit RET.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
150 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
151 ;; To go up to the parent directory, delete any partial file name
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
152 ;; already specified (e.g. using [backspace]) and hit [backspace].
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
153 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
154 ;; To go to the root directory (on the current drive), enter two
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
155 ;; slashes. On MS-DOS or Windows, to select the root of another
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
156 ;; drive, enter X:/ where X is the drive letter. You can also visit
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
157 ;; files on other hosts using the ange-ftp notations `/host:' and
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
158 ;; `/user@host:'. See the variable `ido-slow-ftp-hosts' if you want
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
159 ;; to inhibit the ido substring matching for ftp access.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
160 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
161 ;; If for some reason you cannot specify the proper file using
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
162 ;; ido-find-file, you can press C-f to enter the normal find-file.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
163 ;; You can also press C-b to drop into ido-switch-buffer.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
164
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
165 ;; See the doc string of ido-switch-buffer and ido-find-file for full
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
166 ;; keybindings and features.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
167 ;; (describe-function 'ido-find-file)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
168
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
169 ;; Hidden buffers and files
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
170 ;; ------------------------
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
171 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
172 ;; Normally, ido does not include hidden buffers (whose name starts
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
173 ;; with a space) and hidden files and directories (whose name starts
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
174 ;; with `.') in the list of possible completions. However, if the
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
175 ;; substring you enter does not match any of the visible buffers or
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
176 ;; files, ido will automatically look for completions among the hidden
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
177 ;; buffers or files.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
178 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
179 ;; You can toggle display of the hidden buffers and files with C-a.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
180
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
181 ;; Additional functionality
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
182 ;; ------------------------
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
183 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
184 ;; After C-x b, the buffer at the head of the list can be killed by
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
185 ;; pressing C-k. If the buffer needs saving, you will be queried
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
186 ;; before the buffer is killed.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
187 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
188 ;; Likewise, after C-x C-f, you can delete (i.e. physically remove)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
189 ;; the file at the head of the list with C-k. You will always be
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
190 ;; asked for confirmation before the file is deleted.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
191 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
192 ;; If you enter C-x b to switch to a buffer visiting a given file, and
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
193 ;; you find that the file you are after is not in any buffer, you can
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
194 ;; press C-f to immediately drop into ido-find-file. And you can
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
195 ;; switch back to buffer selection with C-b.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
196
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
197 ;; Prefix matching
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
198 ;; ---------------
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
199 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
200 ;; The standard way of completion with Unix-shells and Emacs is to insert a
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
201 ;; PREFIX and then hitting TAB (or another completion key). Cause of this
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
202 ;; behavior has become second nature to a lot of emacs users `ido' offers in
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
203 ;; addition to the default substring-matching-method (look above) also the
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
204 ;; prefix-matching-method. The kind of matching is the only difference to
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
205 ;; the description of the substring-matching above.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
206 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
207 ;; You can toggle prefix matching with C-p.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
208 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
209 ;; Example:
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
210 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
211 ;; If you have again two Buffers "123456" and "123" then hitting "2" does
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
212 ;; not match because "2" is not a PREFIX in any of the buffer-names. This
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
213 ;; is the only difference between the substring and prefix matching.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
214
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
215 ;; Flexible matching
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
216 ;; -----------------
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
217 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
218 ;; If you set ido-enable-flex-matching, ido will do a more flexible
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
219 ;; matching (unless regexp matching is active) to find possible matches
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
220 ;; among the available buffer or file names if no matches are found using
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
221 ;; the normal prefix or substring matching.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
222 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
223 ;; The flexible matching implies that any item which simply contains all
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
224 ;; of the entered characters in the specified sequence will match.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
225 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
226 ;; Example:
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
227 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
228 ;; If you have four files "alpha", "beta", "gamma", and "delta",
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
229 ;; entering "aa" will match "alpha" and "gamma", while "ea" matches
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
230 ;; "beta" and "delta". If prefix matching is also active, "aa" only
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
231 ;; matches "alpha", while "ea" does not match any files.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
232
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
233 ;; Regexp matching
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
234 ;; ---------------
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
235 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
236 ;; There is limited provision for regexp matching within ido,
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
237 ;; enabled through `ido-enable-regexp' (toggle with C-t).
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
238 ;; This allows you to type `c$' for example and see all file names
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
239 ;; ending in `c'. This facility is quite limited though in two
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
240 ;; respects. First, you can't currently type in expressions like
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
241 ;; `[0-9]' directly -- you have to type them in when ido-enable-regexp
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
242 ;; is nil and then toggle on the regexp functionality. Likewise,
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
243 ;; don't enter an expression containing `\' in regexp mode. If you
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
244 ;; try, ido gets confused, so just hit C-g and try again. Secondly,
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
245 ;; no completion mechanism is currently offered with regexp searching.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
246
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
247
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
248 ;; Customization
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
249 ;; -------------
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
250 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
251 ;; Customize the `ido' group to change the `ido' functionality.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
252 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
253 ;; To modify the keybindings, use the hook provided. For example:
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
254 ;;(add-hook 'ido-define-mode-map-hook 'ido-my-keys)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
255 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
256 ;;(defun ido-my-keys ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
257 ;; "Add my keybindings for ido."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
258 ;; (define-key ido-mode-map " " 'ido-next-match)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
259 ;; )
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
260
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
261 ;; Seeing all the matching buffers or files
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
262 ;; ----------------------------------------
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
263 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
264 ;; If you have many matching files, they may not all fit onto one
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
265 ;; line of the minibuffer. Normally, the minibuffer window will grow
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
266 ;; to show you more of the matching files (depending on the setting
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
267 ;; of the variables `resize-mini-windows' and `max-mini-window-height').
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
268 ;; If you want ido to behave differently from the default minibuffer
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
269 ;; resizing behaviour, set the variable `ido-max-window-height'.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
270 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
271 ;; Also, to improve the responsiveness of ido, the maximum number of
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
272 ;; matching items is limited to 12, but you can increase or removed
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
273 ;; this limit via the `ido-max-prospects' variable.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
274
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
275 ;; To see a full list of all matching buffers in a separate buffer,
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
276 ;; hit ? or press TAB when there are no further completions to the
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
277 ;; substring. Repeated TAB presses will scroll you through this
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
278 ;; separate buffer.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
279
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
280 ;; Changing the list of files
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
281 ;; --------------------------
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
282
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
283 ;; By default, the list of current files is most recent first,
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
284 ;; oldest last, with the exception that the files visible in the
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
285 ;; current frame are put at the end of the list. A hook exists to
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
286 ;; allow other functions to order the list. For example, if you add:
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
287 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
288 ;; (add-hook 'ido-make-buffer-list-hook 'ido-summary-buffers-to-end)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
289 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
290 ;; then all files matching "Summary" are moved to the end of the
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
291 ;; list. (I find this handy for keeping the INBOX Summary and so on
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
292 ;; out of the way.) It also moves files matching "output\*$" to the
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
293 ;; end of the list (these are created by AUC TeX when compiling.)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
294 ;; Other functions could be made available which alter the list of
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
295 ;; matching files (either deleting or rearranging elements.)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
296
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
297 ;; Highlighting
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
298 ;; ------------
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
299
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
300 ;; The highlighting of matching items is controlled via ido-use-faces.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
301 ;; The faces used are ido-first-match-face, ido-only-match-face and
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
302 ;; ido-subdir-face.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
303 ;; Colouring of the matching item was suggested by
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
304 ;; Carsten Dominik (dominik@strw.leidenuniv.nl).
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
305
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
306 ;; Replacement for read-buffer and read-file-name
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
307 ;; ----------------------------------------------
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
308
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
309 ;; ido-read-buffer and ido-read-file-name have been written to be drop
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
310 ;; in replacements for the normal buffer and file name reading
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
311 ;; functions `read-buffer' and `read-file-name'.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
312
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
313 ;; To use ido for all buffer and file selections in Emacs, customize the
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
314 ;; variable `ido-everywhere'.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
315
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
316 ;; Using ido-like behaviour in other lisp packages
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
317 ;; -----------------------------------------------
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
318
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
319 ;; If you don't want to rely on the `ido-everywhere' functionality,
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
320 ;; ido-read-buffer, ido-read-file-name, and ido-read-directory-name
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
321 ;; can be used by other packages to read a buffer name, a file name,
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
322 ;; or a directory name in the `ido' way.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
323
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
324
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
325 ;;; Code:
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
326
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
327 (provide 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
328
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
329 ;;; User Variables
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
330 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
331 ;; These are some things you might want to change.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
332
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
333 (defun ido-fractionp (n)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
334 (and (numberp n) (> n 0.0) (<= n 1.0)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
335
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
336 (defgroup ido nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
337 "Switch between files using substrings."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
338 :group 'extensions
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
339 :group 'convenience
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
340 :link '(emacs-commentary-link :tag "Commentary" "ido.el")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
341 :link '(emacs-library-link :tag "Lisp File" "ido.el"))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
342
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
343 ;;;###autoload
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
344 (defcustom ido-mode nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
345 "Determines for which functional group \(buffer and files) ido behavior
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
346 should be enabled. The following values are possible:
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
347 - 'buffer: Turn only on ido buffer behavior \(switching, killing,
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
348 displaying...)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
349 - 'file: Turn only on ido file behavior \(finding, writing, inserting...)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
350 - 'both: Turn on ido buffer and file behavior.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
351 - nil: Turn off any ido switching.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
352
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
353 Setting this variable directly does not take effect;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
354 use either \\[customize] or the function `ido-mode'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
355 :set #'(lambda (symbol value)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
356 (ido-mode value))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
357 :initialize 'custom-initialize-default
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
358 :require 'ido
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
359 :link '(emacs-commentary-link "ido.el")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
360 :set-after '(ido-save-directory-list-file)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
361 :version "21.4"
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
362 :type '(choice (const :tag "Turn on only buffer" buffer)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
363 (const :tag "Turn on only file" file)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
364 (const :tag "Turn on both buffer and file" both)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
365 (const :tag "Switch off all" nil))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
366 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
367
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
368 (defcustom ido-everywhere nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
369 "Use ido everywhere for reading file names and directories.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
370 Setting this variable directly does not work. Use `customize' or
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
371 call the function `ido-everywhere'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
372 :set #'(lambda (symbol value)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
373 (ido-everywhere value))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
374 :initialize 'custom-initialize-default
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
375 :type 'boolean
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
376 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
377
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
378 (defcustom ido-case-fold case-fold-search
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
379 "*Non-nil if searching of buffer and file names should ignore case."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
380 :type 'boolean
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
381 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
382
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
383 (defcustom ido-ignore-buffers
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
384 '("\\` ")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
385 "*List of regexps or functions matching buffer names to ignore.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
386 For example, traditional behavior is not to list buffers whose names begin
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
387 with a space, for which the regexp is `\\` '. See the source file for
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
388 example functions that filter buffernames."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
389 :type '(repeat (choice regexp function))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
390 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
391
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
392 (defcustom ido-ignore-files
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
393 '("\\`CVS/" "\\`#" "\\`.#" "\\`\\.\\./" "\\`\\./")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
394 "*List of regexps or functions matching file names to ignore.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
395 For example, traditional behavior is not to list files whose names begin
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
396 with a #, for which the regexp is `\\`#'. See the source file for
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
397 example functions that filter filenames."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
398 :type '(repeat (choice regexp function))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
399 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
400
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
401 (defcustom ido-ignore-extensions t
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
402 "*Non-nil means ignore files in completion-ignored-extensions list."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
403 :type 'boolean
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
404 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
405
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
406 (defcustom ido-show-dot-for-dired nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
407 "*Non-nil means to always put . as the first item in file name lists.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
408 This allows the current directory to be opened immediate with `dired'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
409 :type 'boolean
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
410 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
411
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
412 (defcustom ido-ignore-directories
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
413 '("\\`CVS/" "\\`\\.\\./" "\\`\\./")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
414 "*List of regexps or functions matching sub-directory names to ignore."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
415 :type '(repeat (choice regexp function))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
416 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
417
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
418 (defcustom ido-ignore-directories-merge nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
419 "*List of regexps or functions matching directory path names to ignore during merge.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
420 Directory paths matched by one of the regexps in this list are not inserted
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
421 in merged file and directory lists."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
422 :type '(repeat (choice regexp function))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
423 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
424
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
425 ;;; Examples for setting the value of ido-ignore-buffers
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
426 ;(defun ido-ignore-c-mode (name)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
427 ; "Ignore all c mode buffers -- example function for ido."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
428 ; (save-excursion
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
429 ; (set-buffer name)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
430 ; (string-match "^C$" mode-name)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
431 ;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
432 ;(setq ido-ignore-buffers '("^ " ido-ignore-c-mode))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
433
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
434 ;;; Examples for setting the value of ido-ignore-files
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
435 ;(setq ido-ignore-files '("^ " "\\.c$" "\\.h$"))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
436
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
437 (defcustom ido-default-file-method 'always-frame
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
438 "*How to switch to new file when using `ido-find-file'.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
439 Possible values:
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
440 `samewindow' Show new file in same window
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
441 `otherwindow' Show new file in another window (same frame)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
442 `display' Display file in another window without switching to it
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
443 `otherframe' Show new file in another frame
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
444 `maybe-frame' If a file is visible in another frame, prompt to ask if you
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
445 you want to see the file in the same window of the current
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
446 frame or in the other frame.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
447 `always-frame' If a file is visible in another frame, raise that
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
448 frame. Otherwise, visit the file in the same window."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
449 :type '(choice (const samewindow)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
450 (const otherwindow)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
451 (const display)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
452 (const otherframe)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
453 (const maybe-frame)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
454 (const always-frame))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
455 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
456
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
457 (defcustom ido-default-buffer-method 'always-frame
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
458 "*How to switch to new buffer when using `ido-switch-buffer'.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
459 See ido-default-file-method for details."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
460 :type '(choice (const samewindow)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
461 (const otherwindow)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
462 (const display)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
463 (const otherframe)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
464 (const maybe-frame)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
465 (const always-frame))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
466 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
467
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
468 (defcustom ido-enable-flex-matching nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
469 "*Non-nil means that `ido' will do flexible string matching.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
470 Flexible matching means that if the entered string does not
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
471 match any item, any item containing the entered characters
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
472 in the given sequence will match."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
473 :type 'boolean
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
474 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
475
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
476
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
477 (defcustom ido-enable-regexp nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
478 "*Non-nil means that `ido' will do regexp matching.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
479 Value can be toggled within `ido' using `ido-toggle-regexp'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
480 :type 'boolean
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
481 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
482
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
483 (defcustom ido-enable-prefix nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
484 "*Nil means that `ido' will match if the inserted text is an
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
485 arbitrary substring (default). If non-nil `ido' will only match if the inserted
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
486 text is a prefix \(this behavior is like the standard unix- or
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
487 emacs-completion works).
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
488 Value can be toggled within `ido' using `ido-toggle-prefix'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
489 :type 'boolean
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
490 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
491
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
492 (defcustom ido-record-commands t
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
493 "*Non-nil means that `ido' will record commands in command history.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
494 Note that the non-ido equivalent command is recorded."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
495 :type 'boolean
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
496 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
497
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
498 (defcustom ido-max-prospects 12
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
499 "*Non-zero means that the prospect list will be limited to than number of items.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
500 For a long list of prospects, building the full list for the minibuffer can take a
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
501 non-negletable amount of time; setting this variable reduces that time."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
502 :type 'integer
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
503 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
504
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
505 (defcustom ido-max-prompt-path 0.35
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
506 "*Non-zero means that the prompt string be limited to than number of characters.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
507 If value is a floating point number, it specifies a fraction of the frame width."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
508 :type '(choice
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
509 (integer :tag "Characters" :value 20)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
510 (restricted-sexp :tag "Fraction of frame width"
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
511 :value 0.35
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
512 :match-alternatives (ido-fractionp)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
513 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
514
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
515 (defcustom ido-max-window-height nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
516 "*Non-nil specifies a value to override `max-mini-window-height'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
517 :type '(choice
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
518 (const :tag "Don't override" nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
519 (integer :tag "Number of lines" :value 1)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
520 (restricted-sexp
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
521 :tag "Fraction of window height"
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
522 :value 0.25
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
523 :match-alternatives (ido-fractionp)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
524 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
525
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
526 (defcustom ido-enable-last-directory-history t
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
527 "*Non-nil means that `ido' will remember latest selected directory paths.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
528 See `ido-last-directory-list' and `ido-save-directory-list-file'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
529 :type 'boolean
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
530 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
531
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
532 (defcustom ido-max-work-directory-list 50
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
533 "*Maximum number of working directories to record.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
534 This is the list of directories where files have most recently been opened.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
535 See `ido-work-directory-list' and `ido-save-directory-list-file'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
536 :type 'integer
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
537 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
538
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
539 (defcustom ido-work-directory-list-ignore-regexps nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
540 "*List of regexps matching directories which should not be recorded.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
541 Directory paths matched by one of the regexps in this list are not inserted in
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
542 the `ido-work-directory-list' list."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
543 :type '(repeat regexp)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
544 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
545
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
546 (defcustom ido-record-ftp-work-directories t
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
547 "*Non-nil means that ftp paths are recorded in work directory list."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
548 :type 'boolean
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
549 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
550
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
551 (defcustom ido-merge-ftp-work-directories nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
552 "*Nil means that ftp paths in work directory list are ignored during merge."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
553 :type 'boolean
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
554 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
555
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
556 (defcustom ido-cache-ftp-work-directory-time 1.0
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
557 "*Maximum time to cache contents of an ftp directory (in hours).
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
558 If zero, ftp directories are not cached."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
559 :type 'number
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
560 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
561
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
562 (defcustom ido-slow-ftp-hosts nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
563 "*List of slow ftp hosts where ido prompting should not be used.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
564 If an ftp host is on this list, ido automatically switches to the non-ido
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
565 equivalent function, e.g. find-file rather than ido-find-file."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
566 :type '(repeat string)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
567 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
568
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
569 (defcustom ido-slow-ftp-host-regexps nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
570 "*List of regexps matching slow ftp hosts (see `ido-slow-ftp-hosts')."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
571 :type '(repeat regexp)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
572 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
573
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
574 (defcustom ido-max-work-file-list 10
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
575 "*Maximum number of names of recently opened files to record.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
576 This is the list the file names (sans directory) which have most recently
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
577 been opened. See `ido-work-file-list' and `ido-save-directory-list-file'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
578 :type 'integer
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
579 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
580
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
581 (defcustom ido-work-directory-match-only t
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
582 "*Non-nil means to skip non-matching directories in the directory history.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
583 When some text is already entered at the `ido-find-file' prompt, using
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
584 \\[ido-prev-work-directory] or \\[ido-next-work-directory] will skip directories
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
585 without any matching entries."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
586 :type 'boolean
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
587 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
588
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
589 (defcustom ido-auto-merge-work-directories-length 0
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
590 "*Automatically switch to merged work directories during file name input.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
591 The value is number of characters to type before switching to merged mode.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
592 If zero, the switch happens when no matches are found in the current directory.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
593 Automatic merging is disabled if the value is negative."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
594 :type 'integer
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
595 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
596
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
597 (defcustom ido-auto-merge-delay-time 0.70
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
598 "*Delay in seconds to wait for more input before doing auto merge."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
599 :type 'number
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
600 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
601
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
602 (defcustom ido-auto-merge-inhibit-characters-regexp "[][*?~]"
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
603 "*Regexp matching characters which should inhibit automatic merging.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
604 When a (partial) file name matches this regexp, merging is inhibited."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
605 :type 'regexp
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
606 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
607
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
608 (defcustom ido-merged-indicator "^"
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
609 "The string appended to first choice if it has multiple directory choices."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
610 :type 'string
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
611 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
612
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
613 (defcustom ido-max-dir-file-cache 100
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
614 "*Maximum number of working directories to be cached.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
615 This is the size of the cache of file-name-all-completions results.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
616 Each cache entry is time stamped with the modification time of the
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
617 directory. Some systems, like Windows, have unreliable directory
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
618 modification times, so you may choose to disable caching on such
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
619 systems, or explicitly refresh the cache contents using the command
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
620 `ido-reread-directory' command (C-l) in the minibuffer.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
621 See also `ido-dir-file-cache' and `ido-save-directory-list-file'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
622 :type 'integer
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
623 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
624
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
625 (defcustom ido-rotate-file-list-default nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
626 "*Non-nil means that `ido' will always rotate file list to get default in front."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
627 :type 'boolean
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
628 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
629
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
630 (defcustom ido-enter-single-matching-directory nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
631 "*Automatically enter sub-directory if it is the only matching item, if non-nil.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
632 If value is 'slash, only enter if typing final slash, else do it always."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
633 :type '(choice (const :tag "Never" nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
634 (const :tag "When typing /" slash)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
635 (other :tag "Always" t))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
636 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
637
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
638 (defcustom ido-create-new-buffer 'prompt
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
639 "*Specify whether a new buffer is created if no buffer matches substring.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
640 Choices are 'always to create new buffers unconditionally, 'prompt to
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
641 ask user whether to create buffer, or 'never to never create new buffer."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
642 :type '(choice (const always)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
643 (const prompt)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
644 (const never))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
645 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
646
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
647 (defcustom ido-define-mode-map-hook nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
648 "*Hook to define keys in `ido-mode-map' for extra keybindings."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
649 :type 'hook
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
650 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
651
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
652 (defcustom ido-separator nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
653 "*String used by ido to separate the alternatives in the minibuffer.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
654 Obsolete. Set 3rd element of `ido-decorations' instead."
46631
527b6139edd2 (ido-separator): Fix type.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 46333
diff changeset
655 :type '(choice string (const nil))
46068
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
656 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
657
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
658 (defcustom ido-decorations '( "{" "}" " | " " | ..." "[" "]" " [No match]" " [Matched]")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
659 "*List of strings used by ido to display the alternatives in the minibuffer.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
660 There are 8 elements in this list, each is a pair of strings:
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
661 1st and 2nd elements are used as brackets around the prospect list,
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
662 3rd element is the separator between prospects (ignored if ido-separator is set),
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
663 4th element is the string inserted at the end of a truncated list of prospects,
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
664 5th and 6th elements are used as brackets around the common match string which
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
665 can be completed using TAB,
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
666 7th element is the string displayed when there are a no matches, and
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
667 8th element displayed if there is a single match (and faces are not used)."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
668 :type '(repeat string)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
669 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
670
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
671 (defcustom ido-use-faces t
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
672 "*Non-nil means use ido faces to highlighting first match, only match and
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
673 subdirs in the alternatives."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
674 :type 'boolean
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
675 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
676
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
677 (defface ido-first-match-face '((t (:bold t)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
678 "*Font used by ido for highlighting first match."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
679 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
680
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
681 (defface ido-only-match-face '((((class color))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
682 (:foreground "ForestGreen"))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
683 (t (:italic t)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
684 "*Font used by ido for highlighting only match."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
685 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
686
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
687 (defface ido-subdir-face '((((class color))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
688 (:foreground "red"))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
689 (t (:underline t)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
690 "*Font used by ido for highlighting subdirs in the alternatives."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
691 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
692
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
693 (defface ido-indicator-face '((((class color))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
694 (:foreground "yellow"
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
695 :background "red"
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
696 :width condensed))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
697 (t (:inverse-video t)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
698 "*Font used by ido for highlighting its indicators."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
699 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
700
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
701 (defcustom ido-make-file-list-hook nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
702 "*List of functions to run when the list of matching files is created.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
703 Each function on the list may modify the dynamically bound variable
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
704 `ido-temp-list' which contains the current list of matching files."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
705 :type 'hook
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
706 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
707
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
708 (defcustom ido-make-dir-list-hook nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
709 "*List of functions to run when the list of matching directories is created.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
710 Each function on the list may modify the dynamically bound variable
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
711 `ido-temp-list' which contains the current list of matching directories."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
712 :type 'hook
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
713 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
714
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
715 (defcustom ido-make-buffer-list-hook nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
716 "*List of functions to run when the list of matching buffers is created.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
717 Each function on the list may modify the dynamically bound variable
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
718 `ido-temp-list' which contains the current list of matching buffer names."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
719 :type 'hook
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
720 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
721
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
722 (defcustom ido-make-file-prompt-hook nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
723 "*List of functions to run when the find-file prompt is created.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
724 Each function on the list may modify the following dynamically bound
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
725 variables:
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
726 path - the (abbreviated) directory path
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
727 max-width - the max width of the path; set to nil to inhibit truncation
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
728 prompt - the basic prompt (e.g. \"Find File: \")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
729 literal - the string shown if doing `literal' find; set to nil to omit
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
730 vc-off - the string shown if version control is inhibited; set to nit to omit
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
731 prefix - normally nil, but may be set to a fixed prefix for the path
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
732 The following variables are available, but should not be changed:
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
733 ido-current-directory - the unabbreviated directory path
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
734 item - equals 'file or 'dir depending on the current mode."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
735 :type 'hook
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
736 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
737
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
738 (defvar ido-rewrite-prompt-path-rules nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
739 "*Alist of rewriting rules for file paths.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
740 A list of elements of the form (FROM . TO) or (FROM . FUNC),
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
741 each meaning to rewrite the path if matched by FROM by either
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
742 substituting the matched string by TO or calling the function
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
743 FUNC with the current path as its only argument and using the
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
744 return value as the new path. In addition, each FUNC may
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
745 also modify the dynamic variables described for the
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
746 variable `ido-make-file-prompt-hook'.")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
747
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
748 (defcustom ido-completion-buffer "*Ido Completions*"
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
749 "*Name of completion buffer used by ido.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
750 Set to nil to disable completion buffers popping up."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
751 :type 'string
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
752 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
753
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
754 (defcustom ido-completion-buffer-all-completions nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
755 "*Non-nil means to show all completions in completion buffer.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
756 Otherwise, only the current list of matches is shown."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
757 :type 'boolean
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
758 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
759
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
760 (defvar ido-all-frames 'visible
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
761 "*Argument to pass to `walk-windows' when finding visible files.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
762 See documentation of `walk-windows' for useful values.")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
763
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
764 (defcustom ido-minibuffer-setup-hook nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
765 "*Ido-specific customization of minibuffer setup.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
766
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
767 This hook is run during minibuffer setup iff `ido' will be active.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
768 It is intended for use in customizing ido for interoperation
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
769 with other packages. For instance:
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
770
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
771 \(add-hook 'ido-minibuffer-setup-hook
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
772 \(function
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
773 \(lambda ()
46118
5631b19e689c (ido-minibuffer-setup-hook): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 46068
diff changeset
774 \(make-local-variable 'max-mini-window-height)
5631b19e689c (ido-minibuffer-setup-hook): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 46068
diff changeset
775 \(setq max-mini-window-height 3))))
5631b19e689c (ido-minibuffer-setup-hook): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 46068
diff changeset
776
5631b19e689c (ido-minibuffer-setup-hook): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 46068
diff changeset
777 will constrain Emacs to a maximum minibuffer height of 3 lines when
46068
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
778 ido is running. Copied from `icomplete-minibuffer-setup-hook'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
779 :type 'hook
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
780 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
781
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
782 (defcustom ido-save-directory-list-file "~/.ido.last"
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
783 "File in which the ido state is saved between invocations.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
784 Variables stored are: `ido-last-directory-list', `ido-work-directory-list',
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
785 `ido-work-file-list', and `ido-dir-file-cache'.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
786 Must be set before enabling ido mode."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
787 :type 'string
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
788 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
789
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
790 (defcustom ido-read-file-name-as-directory-commands '()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
791 "List of commands which uses read-file-name to read a directory path.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
792 When `ido-everywhere' is non-nil, the commands in this list will read
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
793 the directory using ido-read-directory-name."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
794 :type '(repeat symbol)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
795 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
796
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
797 (defcustom ido-read-file-name-non-ido '()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
798 "List of commands which shall not read file names the ido way.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
799 When `ido-everywhere' is non-nil, the commands in this list will read
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
800 the file name using normal read-file-name style."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
801 :type '(repeat symbol)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
802 :group 'ido)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
803
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
804 ;;; Internal Variables
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
805
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
806 ;; Persistent variables
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
807
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
808 (defvar ido-mode-map nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
809 "Keymap for `ido-find-file' and `ido-switch-buffer'.")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
810
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
811 (defvar ido-file-history nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
812 "History of files selected using `ido-find-file'.")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
813
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
814 (defvar ido-buffer-history nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
815 "History of buffers selected using `ido-switch-buffer'.")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
816
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
817 (defvar ido-xemacs (string-match "XEmacs" (emacs-version))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
818 "Non-nil if we are running XEmacs. Otherwise, assume we are running Emacs.")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
819
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
820 (defvar ido-last-directory-list nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
821 "List of last selected directory paths.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
822 See `ido-enable-last-directory-history' for details.")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
823
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
824 (defvar ido-work-directory-list nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
825 "List of actual working directory paths.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
826 The current directory is inserted at the front of this list whenever a
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
827 file is opened with ido-find-file and family.")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
828
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
829 (defvar ido-work-file-list nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
830 "List of actual work file names.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
831 The current file name (sans path) is inserted at the front of this list
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
832 whenever a file is opened with ido-find-file and family.")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
833
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
834 (defvar ido-dir-file-cache nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
835 "List of file-name-all-completions results.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
836 Each element in the list is of the form (dir (mtime) file...).")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
837
47203
d7ff55da60cd (ido-ignore-item-temp-list): New variable.
Kim F. Storm <storm@cua.dk>
parents: 46631
diff changeset
838 (defvar ido-ignore-item-temp-list nil
d7ff55da60cd (ido-ignore-item-temp-list): New variable.
Kim F. Storm <storm@cua.dk>
parents: 46631
diff changeset
839 "List of items to ignore in current ido invocation.
d7ff55da60cd (ido-ignore-item-temp-list): New variable.
Kim F. Storm <storm@cua.dk>
parents: 46631
diff changeset
840 Intended to be let-bound by functions which calls ido repeatedly.
d7ff55da60cd (ido-ignore-item-temp-list): New variable.
Kim F. Storm <storm@cua.dk>
parents: 46631
diff changeset
841 Should never be set permanently.")
d7ff55da60cd (ido-ignore-item-temp-list): New variable.
Kim F. Storm <storm@cua.dk>
parents: 46631
diff changeset
842
46068
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
843 ;; Temporary storage
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
844
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
845 (defvar ido-eoinput 1
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
846 "Point where minibuffer input ends and completion info begins.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
847 Copied from `icomplete-eoinput'.")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
848 (make-variable-buffer-local 'ido-eoinput)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
849
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
850 (defvar ido-common-match-string nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
851 "Stores the string that is common to all matching files.")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
852
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
853 (defvar ido-rescan nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
854 "Non-nil means we need to regenerate the list of matching items.")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
855
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
856 (defvar ido-rotate nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
857 "Non-nil means we are rotating list of matches.")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
858
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
859 (defvar ido-text nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
860 "Stores the users string as it is typed in.")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
861
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
862 (defvar ido-text-init nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
863 "The initial string for the users string it is typed in.")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
864
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
865 (defvar ido-matches nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
866 "List of files currently matching `ido-text'.")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
867
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
868 (defvar ido-report-no-match t
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
869 "Report [No Match] when no completions matches ido-text.")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
870
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
871 (defvar ido-exit nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
872 "Flag to monitor how `ido-find-file' exits.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
873 If equal to `takeprompt', we use the prompt as the file name to be
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
874 selected.")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
875
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
876 (defvar ido-current-directory nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
877 "Current directory for ido-find-file.")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
878
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
879 (defvar ido-auto-merge-timer nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
880 "Delay timer for auto merge.")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
881
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
882 (defvar ido-use-mycompletion-depth 0
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
883 "Non-nil means use `ido' completion feedback.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
884 Is set by ido functions to the current minibuffer-depth, so that
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
885 it doesn't interfere with other minibuffer usage.")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
886
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
887
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
888 ;;; Variables with dynamic bindings.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
889 ;;; Declared here to keep the byte compiler quiet.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
890
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
891 ;; Stores the current ido item type ('file, 'dir or 'buffer).
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
892 (defvar ido-cur-item)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
893
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
894 ;; Stores the current list of items that will be searched through.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
895 ;; The list is ordered, so that the most interesting item comes first,
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
896 ;; although by default, the files visible in the current frame are put
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
897 ;; at the end of the list. Created by `ido-make-item-list'.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
898 (defvar ido-cur-list)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
899
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
900 ;; Stores the list of items which are ignored when building
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
901 ;; `ido-cur-list'. It is in no specific order.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
902 (defvar ido-ignored-list)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
903
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
904 ;; Keep current item list if non-nil.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
905 (defvar ido-keep-item-list)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
906
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
907 ;; Process ido-ignore-* lists.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
908 (defvar ido-process-ignore-lists)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
909
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
910 ;; Don't process ido-ignore- lists once.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
911 (defvar ido-process-ignore-lists-inhibit)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
912
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
913 ;; Buffer from which ido was entered.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
914 (defvar ido-entry-buffer)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
915
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
916 ;; Non-nil if matching file must be selected.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
917 (defvar ido-require-match)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
918
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
919 ;; Stores a temporary version of the file list being created.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
920 (defvar ido-temp-list)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
921
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
922 ;; Non-nil if default list element should be rotated into place.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
923 (defvar ido-rotate-temp)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
924
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
925 ;; Stores current index in ido-work-directory-list.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
926 (defvar ido-work-directory-index)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
927
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
928 ;; Stores current index in ido-work-file-list.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
929 (defvar ido-work-file-index)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
930
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
931 ;; Set when merged work directory list is in use.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
932 (defvar ido-use-merged-list)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
933
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
934 ;; Set when merged work directory list not yet built.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
935 (defvar ido-try-merged-list)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
936
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
937 ;; Saved state prior to last work directory merge.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
938 ;; Value is a list (ido-text dir cur-list ignored-list matches).
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
939 (defvar ido-pre-merge-state)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
940
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
941 ;; Original value of vc-master-templates for use in ido-toggle-vc.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
942 (defvar ido-saved-vc-mt)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
943
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
944 ;; Stores temporary state of literal find file.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
945 (defvar ido-find-literal)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
946
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
947
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
948 ;;; FUNCTIONS
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
949
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
950 (defun ido-active (&optional merge)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
951 (if merge
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
952 ido-use-merged-list
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
953 (and (boundp 'ido-completing-read) (= ido-use-mycompletion-depth (minibuffer-depth)))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
954
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
955 (defvar ido-trace-enable nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
956
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
957 (defun ido-trace (p &optional s retval)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
958 (if ido-trace-enable
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
959 (let ((b (get-buffer-create " *IDO Trace*"))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
960 (deactivate-mark deactivate-mark))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
961 (save-excursion
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
962 (save-restriction
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
963 (set-buffer b)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
964 (insert p ": " (if (stringp s) s (format "%S" s)) "\n")))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
965 retval)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
966
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
967 (defun ido-toggle-trace (arg)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
968 (interactive "P")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
969 (setq ido-trace-enable (or arg (not ido-trace-enable)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
970 (let ((b (get-buffer " *IDO Trace*")))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
971 (if b
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
972 (if ido-trace-enable
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
973 (kill-buffer b)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
974 (pop-to-buffer b t t)))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
975
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
976 (defun ido-is-root-directory (&optional dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
977 (setq dir (or dir ido-current-directory))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
978 (if (memq system-type '(windows-nt ms-dos))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
979 (string-match "\\`[a-zA-Z]:[/\\]\\'" dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
980 (string-equal "/" dir)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
981
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
982 (defun ido-is-ftp-directory (&optional dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
983 (string-match "\\`/[^/:][^/:]+:/" (or dir ido-current-directory)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
984
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
985 (defun ido-is-slow-ftp-host (&optional dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
986 (and (or ido-slow-ftp-hosts ido-slow-ftp-host-regexps)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
987 (setq dir (or dir ido-current-directory))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
988 ;; (featurep 'ange-ftp)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
989 ;; (ange-ftp-ftp-name dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
990 (string-match "\\`/\\([^/:]*@\\)?\\([^@/:][^@/:]+\\):/" dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
991 (let ((host (substring dir (match-beginning 2) (match-end 2))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
992 (or (member host ido-slow-ftp-hosts)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
993 (let ((re ido-slow-ftp-host-regexps))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
994 (while (and re (not (string-match (car re) host)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
995 (setq re (cdr re)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
996 re)))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
997
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
998 (defun ido-time-stamp (&optional time)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
999 ;; Time is a floating point number (fractions of 1 hour)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1000 (setq time (or time (current-time)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1001 (/ (+ (* (car time) 65536.0) (car (cdr time))) 3600.0))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1002
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1003 (defun ido-cache-ftp-valid (&optional time)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1004 (and (numberp ido-cache-ftp-work-directory-time)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1005 (> ido-cache-ftp-work-directory-time 0)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1006 (or (not time)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1007 (< (- (ido-time-stamp) time) ido-cache-ftp-work-directory-time))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1008
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1009 (defun ido-may-cache-directory (&optional dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1010 (setq dir (or dir ido-current-directory))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1011 (if (and (memq system-type '(windows-nt ms-dos))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1012 (string-match "\\`[a-zA-Z]:[/\\]\\'" dir))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1013 nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1014 (or (not (ido-is-ftp-directory dir))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1015 (ido-cache-ftp-valid))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1016
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1017 (defun ido-pp (list &optional sep)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1018 (let ((print-level nil) (eval-expression-print-level nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1019 (print-length nil) (eval-expression-print-length nil))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1020 (insert "\n;; ----- " (symbol-name list) " -----\n(\n ")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1021 (setq list (symbol-value list))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1022 (while list
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1023 (let* ((elt (car list))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1024 (s (if (consp elt) (car elt) elt)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1025 (if (and (stringp s) (= (length s) 0))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1026 (setq s nil))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1027 (if s
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1028 (prin1 elt (current-buffer)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1029 (if (and (setq list (cdr list)) s)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1030 (insert (or sep "\n ")))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1031 (insert "\n)\n")))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1032
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1033 (defun ido-save-history ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1034 "Save ido history and cache information between sessions."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1035 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1036 (if (and ido-last-directory-list ido-save-directory-list-file)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1037 (save-excursion
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1038 (save-window-excursion
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1039 (if (find-buffer-visiting ido-save-directory-list-file)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1040 (kill-buffer (find-buffer-visiting ido-save-directory-list-file)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1041 (if (file-exists-p ido-save-directory-list-file)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1042 (delete-file ido-save-directory-list-file))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1043 (set-buffer (let ((enable-local-variables nil))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1044 (find-file-noselect ido-save-directory-list-file t)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1045 (goto-char (point-min))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1046 (delete-region (point-min) (point-max))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1047 (ido-pp 'ido-last-directory-list)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1048 (ido-pp 'ido-work-directory-list)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1049 (ido-pp 'ido-work-file-list)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1050 (ido-pp 'ido-dir-file-cache "\n\n ")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1051 (insert "\n")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1052 (let ((version-control 'never))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1053 (write-file ido-save-directory-list-file nil))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1054 (kill-buffer (current-buffer))))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1055
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1056 (defun ido-load-history (&optional arg)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1057 "Load ido history and cache information from previous session.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1058 With prefix argument, reload history unconditionally."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1059 (interactive "P")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1060 (if (or arg (and ido-save-directory-list-file (not ido-last-directory-list)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1061 (let ((file (expand-file-name ido-save-directory-list-file))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1062 buf)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1063 (when (file-readable-p file)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1064 (save-excursion
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1065 (save-window-excursion
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1066 (setq buf (set-buffer (let ((enable-local-variables nil))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1067 (find-file-noselect file))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1068 (goto-char (point-min))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1069 (condition-case nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1070 (setq ido-last-directory-list (read (current-buffer))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1071 ido-work-directory-list (read (current-buffer))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1072 ido-work-file-list (read (current-buffer))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1073 ido-dir-file-cache (read (current-buffer)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1074 (error nil))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1075 (kill-buffer buf))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1076 (ido-wash-history))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1077
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1078 (defun ido-wash-history ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1079 "Clean-up ido history and cache information.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1080 Removes badly formatted data and ignored directories."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1081 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1082 ;; Check format of each of our lists, discard bogus elements
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1083 (setq ido-last-directory-list
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1084 (and (listp ido-last-directory-list)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1085 (let ((l ido-last-directory-list) r)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1086 (while l
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1087 (if (and (consp (car l))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1088 (stringp (car (car l)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1089 (stringp (cdr (car l))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1090 (setq r (cons (car l) r)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1091 (setq l (cdr l)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1092 (nreverse r))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1093 (setq ido-work-directory-list
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1094 (and (listp ido-work-directory-list)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1095 (let ((l ido-work-directory-list) r)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1096 (while l
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1097 (if (and (stringp (car l))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1098 (or ido-record-ftp-work-directories
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1099 (not (ido-is-ftp-directory (car l)))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1100 (setq r (cons (car l) r)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1101 (setq l (cdr l)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1102 (nreverse r))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1103 (setq ido-work-file-list
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1104 (and (listp ido-work-file-list)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1105 (let ((l ido-work-file-list) r)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1106 (while l
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1107 (if (stringp (car l))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1108 (setq r (cons (car l) r)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1109 (setq l (cdr l)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1110 (nreverse r))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1111 (setq ido-dir-file-cache
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1112 (and (listp ido-dir-file-cache)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1113 (let ((l ido-dir-file-cache) r)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1114 (while l
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1115 (if (and (listp (car l))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1116 (> (length (car l)) 2)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1117 (let ((dir (car (car l)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1118 (time (car (cdr (car l))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1119 (files (cdr (cdr (car l)))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1120 (and
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1121 (stringp dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1122 (consp time)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1123 (if (integerp (car time))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1124 (and (/= (car time) 0)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1125 (integerp (car (cdr time)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1126 (/= (car (cdr time)) 0)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1127 (ido-may-cache-directory dir))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1128 (and (eq (car time) 'ftp)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1129 (numberp (cdr time))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1130 (ido-is-ftp-directory dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1131 (ido-cache-ftp-valid (cdr time))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1132 (let ((s files) (ok t))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1133 (while s
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1134 (if (stringp (car s))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1135 (setq s (cdr s))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1136 (setq s nil ok nil)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1137 ok))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1138 (setq r (cons (car l) r)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1139 (setq l (cdr l)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1140 (nreverse r))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1141
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1142 ;; Remove ignored directories from work directory list
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1143 ;; according to ido-work-directory-list-ignore-regexps
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1144 (if ido-work-directory-list
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1145 (let ((dirs (reverse ido-work-directory-list)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1146 (setq ido-work-directory-list nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1147 (while dirs
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1148 (ido-record-work-directory (car dirs))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1149 (setq dirs (cdr dirs)))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1150 ;; Get rid of text properties
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1151 (let ((l ido-last-directory-list) e)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1152 (while l
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1153 (setq e (car l) l (cdr l))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1154 (set-text-properties 0 (length (car e)) nil (car e))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1155 (set-text-properties 0 (length (cdr e)) nil (cdr e))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1156 (let ((l ido-work-directory-list) e)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1157 (while l
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1158 (setq e (car l) l (cdr l))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1159 (set-text-properties 0 (length e) nil e)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1160 (let ((l ido-work-file-list) e)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1161 (while l
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1162 (setq e (car l) l (cdr l))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1163 (set-text-properties 0 (length e) nil e)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1164 (let ((l ido-dir-file-cache) e d)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1165 (while l
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1166 (setq e (car l) l (cdr l))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1167 (if (listp e)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1168 (while e
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1169 (setq d (car e) e (cdr e))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1170 (if (not (consp d))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1171 (set-text-properties 0 (length d) nil d))))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1172 )
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1173
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1174
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1175 (defun ido-kill-emacs-hook ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1176 ;; ido kill emacs hook
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1177 (ido-save-history))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1178
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1179 (defvar ido-minor-mode-map-entry nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1180
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1181 ;;;###autoload
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1182 (defun ido-mode (&optional arg nobind)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1183 "Toggle ido speed-ups on or off.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1184 With ARG, turn ido speed-up on if arg is positive, off otherwise.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1185 If second argument NOBIND is non-nil, no keys are rebound; otherwise,
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1186 turning on ido-mode will modify the default keybindings for the
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1187 find-file and switch-to-buffer families of commands to the ido
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1188 versions of these functions.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1189 However, if second arg equals 'files, bind only for files, or if it
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1190 equals 'buffers, bind only for buffers.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1191 This function also adds a hook to the minibuffer."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1192 (interactive "P")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1193 (setq ido-mode
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1194 (cond
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1195 ((null arg) (if ido-mode nil 'both))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1196 ((eq arg t) 'both)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1197 ((eq arg 'files) 'file)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1198 ((eq arg 'buffers) 'buffer)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1199 ((memq arg '(file buffer both)) arg)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1200 ((> (prefix-numeric-value arg) 0) 'both)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1201 (t nil)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1202
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1203 (ido-everywhere (if ido-everywhere 1 -1))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1204
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1205 (when ido-mode
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1206 (add-hook 'minibuffer-setup-hook 'ido-minibuffer-setup)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1207 (add-hook 'choose-completion-string-functions 'ido-choose-completion-string)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1208 (ido-load-history)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1209
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1210 (add-hook 'kill-emacs-hook 'ido-kill-emacs-hook)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1211
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1212 (unless ido-minor-mode-map-entry
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1213 (setq ido-minor-mode-map-entry (cons 'ido-mode (make-sparse-keymap)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1214 (add-to-list 'minor-mode-map-alist ido-minor-mode-map-entry))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1215
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1216 (let ((map (cdr ido-minor-mode-map-entry)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1217 (when (memq ido-mode '(file both))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1218 (define-key map [remap find-file] 'ido-find-file)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1219 (define-key map [remap find-file-read-only] 'ido-find-file-read-only)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1220 (define-key map [remap find-alternate-file] 'ido-find-alternate-file)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1221 (define-key map [remap write-file] 'ido-write-file)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1222 (define-key map [remap insert-file] 'ido-insert-file)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1223 (define-key map [remap list-directory] 'ido-list-directory)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1224 (define-key map [remap dired] 'ido-dired)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1225 (define-key map [remap find-file-other-window] 'ido-find-file-other-window)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1226 (define-key map [remap find-file-read-only-other-window] 'ido-find-file-read-only-other-window)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1227 (define-key map [remap find-file-other-frame] 'ido-find-file-other-frame)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1228 (define-key map [remap find-file-read-only-other-frame] 'ido-find-file-read-only-other-frame))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1229
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1230 (when (memq ido-mode '(buffer both))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1231 (define-key map [remap switch-to-buffer] 'ido-switch-buffer)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1232 (define-key map [remap switch-to-buffer-other-window] 'ido-switch-buffer-other-window)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1233 (define-key map [remap switch-to-buffer-other-frame] 'ido-switch-buffer-other-frame)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1234 (define-key map [remap insert-buffer] 'ido-insert-buffer)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1235 (define-key map [remap kill-buffer] 'ido-kill-buffer)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1236 (define-key map [remap display-buffer] 'ido-display-buffer)))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1237
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1238 (defun ido-everywhere (arg)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1239 "Enable ido everywhere file and directory names are read."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1240 (interactive "P")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1241 (setq ido-everywhere (if arg
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1242 (> (prefix-numeric-value arg) 0)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1243 (not ido-everywhere)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1244 (setq read-file-name-function
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1245 (and ido-everywhere (memq ido-mode '(both file))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1246 'ido-read-file-name))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1247 (setq read-buffer-function
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1248 (and ido-everywhere (memq ido-mode '(both buffer))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1249 'ido-read-buffer)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1250
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1251
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1252 ;;; IDO KEYMAP
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1253 (defun ido-define-mode-map ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1254 "Set up the keymap for `ido'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1255 (let (map)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1256 ;; generated every time so that it can inherit new functions.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1257
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1258 (setq map (copy-keymap minibuffer-local-map))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1259 (define-key map "\C-a" 'ido-toggle-ignore)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1260 (define-key map "\C-c" 'ido-toggle-case)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1261 (define-key map "\C-e" 'ido-edit-input)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1262 (define-key map "\t" 'ido-complete)
46231
794e46e1c313 (ido-set-matches1): Use regexp-quote instead of identity.
Kim F. Storm <storm@cua.dk>
parents: 46225
diff changeset
1263 (define-key map " " 'ido-complete-space)
46068
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1264 (define-key map "\C-j" 'ido-select-text)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1265 (define-key map "\C-m" 'ido-exit-minibuffer)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1266 (define-key map "\C-p" 'ido-toggle-prefix)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1267 (define-key map "\C-r" 'ido-prev-match)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1268 (define-key map "\C-s" 'ido-next-match)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1269 (define-key map "\C-t" 'ido-toggle-regexp)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1270 (define-key map "\C-z" 'ido-undo-merge-work-directory)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1271 (define-key map [right] 'ido-next-match)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1272 (define-key map [left] 'ido-prev-match)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1273 (define-key map "?" 'ido-completion-help)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1274
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1275 (when (memq ido-cur-item '(file dir))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1276 (define-key map "\C-b" 'ido-enter-switch-buffer)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1277 (define-key map "\C-d" 'ido-enter-dired)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1278 (define-key map "\C-f" 'ido-fallback-command)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1279 (define-key map [down] 'ido-next-match-dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1280 (define-key map [up] 'ido-prev-match-dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1281 (define-key map [(meta up)] 'ido-prev-work-directory)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1282 (define-key map [(meta down)] 'ido-next-work-directory)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1283 (define-key map [backspace] 'ido-delete-backward-updir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1284 (define-key map "\d" 'ido-delete-backward-updir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1285 (define-key map [(meta backspace)] 'ido-delete-backward-word-updir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1286 (define-key map [(control backspace)] 'ido-up-directory)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1287 (define-key map [(meta ?b)] 'ido-next-work-file)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1288 (define-key map [(meta ?d)] 'ido-wide-find-dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1289 (define-key map [(meta ?f)] 'ido-wide-find-file)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1290 (define-key map [(meta ?k)] 'ido-forget-work-directory)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1291 (define-key map [(meta ?m)] 'ido-make-directory)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1292 (define-key map [(meta ?n)] 'ido-next-work-directory)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1293 (define-key map [(meta ?o)] 'ido-prev-work-file)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1294 (define-key map [(meta ?p)] 'ido-prev-work-directory)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1295 (define-key map [(meta ?s)] 'ido-merge-work-directories)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1296 )
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1297
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1298 (when (eq ido-cur-item 'file)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1299 (define-key map "\C-k" 'ido-delete-file-at-head)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1300 (define-key map "\C-o" 'ido-copy-current-word)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1301 (define-key map "\C-l" 'ido-reread-directory)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1302 (define-key map "\C-w" 'ido-copy-current-file-name)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1303 (define-key map [(meta ?l)] 'ido-toggle-literal)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1304 (define-key map "\C-v" 'ido-toggle-vc)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1305 )
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1306
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1307 (when (eq ido-cur-item 'buffer)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1308 (define-key map "\C-b" 'ido-fallback-command)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1309 (define-key map "\C-f" 'ido-enter-find-file)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1310 (define-key map "\C-k" 'ido-kill-buffer-at-head)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1311 )
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1312
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1313 (setq ido-mode-map map)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1314 (run-hooks 'ido-define-mode-map-hook)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1315
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1316 (defun ido-final-slash (dir &optional fix-it)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1317 ;; return DIR if DIR has final slash.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1318 ;; else if FIX-IT is non-nil, return DIR/
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1319 ;; else return nil.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1320 (setq dir (ido-name dir))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1321 (cond
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1322 ((string-match "/\\'" dir) dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1323 (fix-it (concat dir "/"))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1324 (t nil)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1325
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1326 (defun ido-set-current-directory (dir &optional subdir no-merge)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1327 ;; Set ido's current directory to DIR or DIR/SUBDIR
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1328 (setq dir (ido-final-slash dir t))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1329 (setq ido-use-merged-list nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1330 ido-try-merged-list (not no-merge))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1331 (if subdir
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1332 (setq dir (ido-final-slash (concat dir subdir) t)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1333 (if (equal dir ido-current-directory)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1334 nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1335 (ido-trace "cd" dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1336 (setq ido-current-directory dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1337 (if (get-buffer ido-completion-buffer)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1338 (kill-buffer ido-completion-buffer))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1339 t))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1340
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1341 (defun ido-set-current-home (&optional dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1342 ;; Set ido's current directory to user's home directory
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1343 (ido-set-current-directory (expand-file-name (or dir "~/"))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1344
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1345 (defun ido-record-command (command arg)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1346 ;; Add (command arg) to command-history if ido-record-commands is t
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1347 (if ido-record-commands
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1348 (let ((cmd (list command arg)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1349 (if (or (not command-history)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1350 (not (equal cmd (car command-history))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1351 (setq command-history (cons cmd command-history))))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1352
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1353 (defun ido-make-prompt (item prompt)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1354 ;; Make the prompt for ido-read-internal
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1355 (cond
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1356 ((and (memq item '(file dir)) ido-current-directory)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1357 (let ((path (abbreviate-file-name ido-current-directory))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1358 (max-width (if (and ido-max-prompt-path (floatp ido-max-prompt-path))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1359 (floor (* (frame-width) ido-max-prompt-path))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1360 ido-max-prompt-path))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1361 (literal (and (boundp 'ido-find-literal) ido-find-literal "(literal) "))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1362 (vc-off (and ido-saved-vc-mt (not vc-master-templates) "[-VC] "))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1363 (prefix nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1364 (rule ido-rewrite-prompt-path-rules))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1365 (let ((case-fold-search nil))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1366 (while rule
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1367 (if (and (consp (car rule))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1368 (string-match (car (car rule)) path))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1369 (setq path
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1370 (if (stringp (cdr (car rule)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1371 (replace-match (cdr (car rule)) t nil path)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1372 (funcall (cdr (car rule)) path))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1373 (setq rule (cdr rule))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1374 (run-hooks 'ido-make-file-prompt-hook)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1375 (concat prompt
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1376 ; (if ido-process-ignore-lists "" "&")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1377 (or literal "")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1378 (or vc-off "")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1379 (or prefix "")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1380 (let ((l (length path)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1381 (if (and max-width (> max-width 0) (> l max-width))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1382 (let* ((s (substring path (- max-width)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1383 (i (string-match "/" s)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1384 (concat "..." (if i (substring s i) s)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1385 path)))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1386 (t prompt)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1387
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1388 ;; Here is very briefly how ido-find-file works:
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1389 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1390 ;; (ido-find-file)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1391 ;; (ido-file-internal method)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1392 ;; set ido-current-directory
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1393 ;; (ido-read-internal 'file ...)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1394 ;; (while ...
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1395 ;; (ido-make-item-list ...)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1396 ;; (ido-set-matches)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1397 ;; (completing-read ... ido-text-init ...)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1398 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1399 ;; ... here user is allowed to type characters and commands
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1400 ;; a command may set ido-exit and call (exit-minibuffer)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1401 ;; to make ido-read-internal do advanced tasks (or return)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1402 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1403 ;; ... ido-tidy and ido-exhibit are pre- and post-hooks
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1404 ;; which are run before and after each user command.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1405 ;;
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1406 ;; return value from completing-read is stored in ido-final-text
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1407 ;; - ido-exit may cause further actions to be taken:
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1408 ;; 'refresh - repeat loop (make-item-list, set-matches)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1409 ;; 'edit - edit the prompt string, then repeat loop
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1410 ;; 'keep - repeat loop but don't (re)make-item-list
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1411 ;; 'updir - go up one directory, repeat loop
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1412 ;; else set ido-selected based on ido-final-text,
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1413 ;; optionally update ido-current-directory and repeat loop, or
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1414 ;; exit with the return value of ido-selected (file name)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1415 ;; selected file name is returned from ido-read-internal,
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1416 ;; ido-exit and method determines what action is taken
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1417 ;; e.g. the file name may be ignored or joined with ido-current-directory, and
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1418 ;; the relevant function is called (find-file, write-file, etc).
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1419
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1420 (defun ido-read-internal (item prompt history &optional default require-match initial)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1421 "Perform the ido-read-buffer and ido-read-file-name functions.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1422 Return the name of a buffer or file selected.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1423 PROMPT is the prompt to give to the user.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1424 DEFAULT if given is the default directory to start with.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1425 If REQUIRE-MATCH is non-nil, an existing file must be selected.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1426 If INITIAL is non-nil, it specifies the initial input string."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1427 (let
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1428 ((ido-cur-item item)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1429 (ido-entry-buffer (current-buffer))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1430 (ido-process-ignore-lists t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1431 (ido-process-ignore-lists-inhibit nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1432 (ido-set-default-item t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1433 ido-default-item
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1434 ido-selected
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1435 ido-final-text
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1436 (done nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1437 (icomplete-mode nil) ;; prevent icomplete starting up
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1438 ;; Exported dynamic variables:
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1439 ido-cur-list
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1440 ido-ignored-list
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1441 (ido-rotate-temp nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1442 (ido-keep-item-list nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1443 (ido-use-merged-list nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1444 (ido-try-merged-list t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1445 (ido-pre-merge-state nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1446 (ido-case-fold ido-case-fold)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1447 (ido-enable-prefix ido-enable-prefix)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1448 (ido-enable-regexp ido-enable-regexp)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1449 )
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1450
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1451 (ido-define-mode-map)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1452 (setq ido-text-init initial)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1453 (while (not done)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1454 (ido-trace "\n_LOOP_")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1455 (setq ido-exit nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1456 (setq ido-rescan t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1457 (setq ido-rotate nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1458 (setq ido-text "")
47203
d7ff55da60cd (ido-ignore-item-temp-list): New variable.
Kim F. Storm <storm@cua.dk>
parents: 46631
diff changeset
1459 (when ido-set-default-item
d7ff55da60cd (ido-ignore-item-temp-list): New variable.
Kim F. Storm <storm@cua.dk>
parents: 46631
diff changeset
1460 (setq ido-default-item
d7ff55da60cd (ido-ignore-item-temp-list): New variable.
Kim F. Storm <storm@cua.dk>
parents: 46631
diff changeset
1461 (cond
d7ff55da60cd (ido-ignore-item-temp-list): New variable.
Kim F. Storm <storm@cua.dk>
parents: 46631
diff changeset
1462 ((eq item 'buffer)
d7ff55da60cd (ido-ignore-item-temp-list): New variable.
Kim F. Storm <storm@cua.dk>
parents: 46631
diff changeset
1463 (if (bufferp default) (buffer-name default) default))
d7ff55da60cd (ido-ignore-item-temp-list): New variable.
Kim F. Storm <storm@cua.dk>
parents: 46631
diff changeset
1464 ((stringp default) default)
d7ff55da60cd (ido-ignore-item-temp-list): New variable.
Kim F. Storm <storm@cua.dk>
parents: 46631
diff changeset
1465 ((eq item 'file)
d7ff55da60cd (ido-ignore-item-temp-list): New variable.
Kim F. Storm <storm@cua.dk>
parents: 46631
diff changeset
1466 (and ido-enable-last-directory-history
d7ff55da60cd (ido-ignore-item-temp-list): New variable.
Kim F. Storm <storm@cua.dk>
parents: 46631
diff changeset
1467 (let ((d (assoc ido-current-directory ido-last-directory-list)))
d7ff55da60cd (ido-ignore-item-temp-list): New variable.
Kim F. Storm <storm@cua.dk>
parents: 46631
diff changeset
1468 (and d (cdr d)))))))
d7ff55da60cd (ido-ignore-item-temp-list): New variable.
Kim F. Storm <storm@cua.dk>
parents: 46631
diff changeset
1469 (if (member ido-default-item ido-ignore-item-temp-list)
d7ff55da60cd (ido-ignore-item-temp-list): New variable.
Kim F. Storm <storm@cua.dk>
parents: 46631
diff changeset
1470 (setq ido-default-item nil))
d7ff55da60cd (ido-ignore-item-temp-list): New variable.
Kim F. Storm <storm@cua.dk>
parents: 46631
diff changeset
1471 (setq ido-set-default-item nil))
46068
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1472
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1473 (if ido-process-ignore-lists-inhibit
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1474 (setq ido-process-ignore-lists nil))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1475
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1476 (if (and ido-use-merged-list (memq ido-try-merged-list '(t wide)) (not ido-keep-item-list))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1477 (let ((olist ido-cur-list)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1478 (oign ido-ignored-list)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1479 (omat ido-matches)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1480 (l (ido-make-merged-file-list ido-text-init
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1481 (eq ido-use-merged-list 'auto)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1482 (eq ido-try-merged-list 'wide))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1483 (cond
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1484 ((not l)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1485 (if (eq ido-try-merged-list 'wide)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1486 (setq ido-pre-merge-state
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1487 (list "" ido-current-directory olist oign omat)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1488 ido-cur-list nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1489 ido-ignored-list nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1490 ido-matches nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1491 ido-keep-item-list t
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1492 ido-try-merged-list (if (eq ido-use-merged-list 'auto) 'auto nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1493 ido-use-merged-list nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1494 (setq ido-cur-list olist
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1495 ido-ignored-list oign
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1496 ido-matches omat
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1497 ido-keep-item-list t
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1498 ido-try-merged-list (if (eq ido-use-merged-list 'auto) 'auto nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1499 ido-use-merged-list nil)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1500 ((eq l t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1501 (setq ido-use-merged-list nil))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1502 (t
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1503 (setq ido-pre-merge-state
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1504 (list ido-text-init ido-current-directory olist oign omat))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1505 (ido-set-current-directory (car (cdr (car l))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1506 (if (ido-final-slash ido-text-init)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1507 (setq ido-text-init ""))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1508 (setq ido-cur-list l
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1509 ido-ignored-list nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1510 ido-matches l
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1511 ido-rescan nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1512 ido-keep-item-list t
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1513 ido-use-merged-list t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1514 (ido-trace "Merged" t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1515 ))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1516
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1517 (cond
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1518 (ido-keep-item-list
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1519 (setq ido-keep-item-list nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1520 ido-rescan nil))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1521 ((eq ido-cur-item 'file)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1522 (setq ido-ignored-list nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1523 ido-cur-list (ido-make-file-list ido-default-item)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1524 ((eq ido-cur-item 'dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1525 (setq ido-ignored-list nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1526 ido-cur-list (ido-make-dir-list ido-default-item)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1527 ((eq ido-cur-item 'buffer)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1528 (setq ido-ignored-list nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1529 ido-cur-list (ido-make-buffer-list ido-default-item)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1530 (t nil))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1531 (setq ido-rotate-temp nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1532
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1533 (if ido-process-ignore-lists-inhibit
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1534 (setq ido-process-ignore-lists t
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1535 ido-process-ignore-lists-inhibit nil))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1536
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1537 (ido-set-matches)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1538 (if (and ido-matches (eq ido-try-merged-list 'auto))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1539 (setq ido-try-merged-list t))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1540 (let
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1541 ((minibuffer-local-completion-map ido-mode-map)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1542 (max-mini-window-height (or ido-max-window-height
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1543 (and (boundp 'max-mini-window-height) max-mini-window-height)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1544 (ido-completing-read t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1545 (ido-require-match require-match)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1546 (ido-use-mycompletion-depth (1+ (minibuffer-depth)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1547 (show-paren-mode nil))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1548 ;; prompt the user for the file name
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1549 (setq ido-exit nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1550 (setq ido-final-text
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1551 (catch 'ido
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1552 (completing-read
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1553 (ido-make-prompt item prompt)
46256
88bc5ce0674c (ido-find-common-substring): Return substring instead of t.
Kim F. Storm <storm@cua.dk>
parents: 46231
diff changeset
1554 '(("dummy" . 1)) nil nil ; table predicate require-match
46068
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1555 (prog1 ido-text-init (setq ido-text-init nil)) ;initial-contents
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1556 history))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1557 (ido-trace "completing-read" ido-final-text)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1558 (if (get-buffer ido-completion-buffer)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1559 (kill-buffer ido-completion-buffer))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1560
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1561 (ido-trace "\n_EXIT_" ido-exit)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1562
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1563 (cond
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1564 ((eq ido-exit 'refresh)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1565 (if (and (eq ido-use-merged-list 'auto)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1566 (or (input-pending-p)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1567 (setq ido-use-merged-list nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1568 ido-keep-item-list t))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1569 nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1570
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1571 ((eq ido-exit 'done)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1572 (setq done t
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1573 ido-selected ido-text
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1574 ido-exit nil))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1575
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1576 ((memq ido-exit '(edit chdir))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1577 (cond
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1578 ((memq ido-cur-item '(file dir))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1579 (let* ((process-environment (cons "HOME=/" process-environment)) ;; cheat read-file-name
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1580 (read-file-name-function nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1581 (edit (eq ido-exit 'edit))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1582 (d ido-current-directory)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1583 (f ido-text-init)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1584 (path t))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1585 (setq ido-text-init "")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1586 (while path
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1587 (setq path (if edit
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1588 (read-file-name (concat prompt "[EDIT] ") d (concat d f) nil f)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1589 f)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1590 d (or (file-name-directory path) "/")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1591 f (file-name-nondirectory path)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1592 edit t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1593 (if (or
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1594 (file-directory-p d)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1595 (and (yes-or-no-p (format "Create directory %s? " d))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1596 (condition-case nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1597 (progn (make-directory d t) t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1598 (error
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1599 (message "Could not create directory")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1600 (sit-for 1)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1601 nil))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1602 (progn
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1603 (ido-set-current-directory d nil (eq ido-exit 'chdir))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1604 (setq ido-text-init f
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1605 path nil))))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1606 (t
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1607 (setq ido-text-init nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1608 (setq ido-text-init (read-string (concat prompt "[EDIT] ") ido-final-text))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1609 nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1610
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1611 ((eq ido-exit 'keep)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1612 (setq ido-keep-item-list t))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1613
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1614 ((memq ido-exit '(dired fallback findfile findbuffer))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1615 (setq done t))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1616
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1617 ((eq ido-exit 'updir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1618 ;; cannot go up if already at the root-dir (Unix) or at the
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1619 ;; root-dir of a certain drive (Windows or MS-DOS).
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1620 (or (ido-is-root-directory)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1621 (ido-set-current-directory (file-name-directory (substring ido-current-directory 0 -1))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1622 (setq ido-set-default-item t))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1623
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1624 ;; Handling the require-match must be done in a better way.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1625 ((and require-match (not (ido-existing-item-p)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1626 (error "must specify valid item"))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1627
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1628 (t
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1629 (setq ido-selected
47203
d7ff55da60cd (ido-ignore-item-temp-list): New variable.
Kim F. Storm <storm@cua.dk>
parents: 46631
diff changeset
1630 (if (or (eq ido-exit 'takeprompt)
d7ff55da60cd (ido-ignore-item-temp-list): New variable.
Kim F. Storm <storm@cua.dk>
parents: 46631
diff changeset
1631 (null ido-matches))
d7ff55da60cd (ido-ignore-item-temp-list): New variable.
Kim F. Storm <storm@cua.dk>
parents: 46631
diff changeset
1632 ido-final-text
d7ff55da60cd (ido-ignore-item-temp-list): New variable.
Kim F. Storm <storm@cua.dk>
parents: 46631
diff changeset
1633 ;; else take head of list
d7ff55da60cd (ido-ignore-item-temp-list): New variable.
Kim F. Storm <storm@cua.dk>
parents: 46631
diff changeset
1634 (ido-name (car ido-matches))))
46068
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1635
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1636 (cond
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1637 ((eq item 'buffer)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1638 (setq done t))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1639
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1640 ((string-equal "./" ido-selected)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1641 nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1642
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1643 ((string-equal "../" ido-selected)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1644 ;; cannot go up if already at the root-dir (Unix) or at the
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1645 ;; root-dir of a certain drive (Windows or MS-DOS).
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1646 (or (ido-is-root-directory)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1647 (ido-set-current-directory (file-name-directory (substring ido-current-directory 0 -1))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1648 (setq ido-set-default-item t))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1649 ((and (string-equal ido-current-directory "/")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1650 (string-match "..:\\'" ido-selected)) ;; Ange-ftp
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1651 (ido-set-current-directory "/" ido-selected)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1652 (if (ido-is-slow-ftp-host)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1653 (setq ido-exit 'fallback
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1654 done t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1655 (setq ido-set-default-item t)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1656
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1657 ((or (string-match "[/\\][^/\\]" ido-selected)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1658 (and (memq system-type '(windows-nt ms-dos))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1659 (string-match "\\`.:" ido-selected)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1660 (ido-set-current-directory (file-name-directory ido-selected))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1661 (setq ido-set-default-item t))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1662
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1663 ((string-match "\\`~" ido-selected)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1664 (ido-set-current-home ido-selected))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1665
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1666 ((ido-final-slash ido-selected)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1667 (if ido-enable-last-directory-history
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1668 (let ((x (assoc ido-current-directory ido-last-directory-list)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1669 (if x
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1670 (setcdr x ido-selected)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1671 (setq ido-last-directory-list
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1672 (cons (cons ido-current-directory ido-selected) ido-last-directory-list)))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1673 (ido-set-current-directory ido-current-directory ido-selected)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1674 (setq ido-set-default-item t))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1675
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1676 (t
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1677 (setq done t))))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1678 ido-selected))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1679
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1680 (defun ido-edit-input ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1681 "Edit ido path and input string. Terminate by RET."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1682 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1683 (setq ido-text-init ido-text)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1684 (setq ido-exit 'edit)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1685 (exit-minibuffer))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1686
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1687 ;;; MAIN FUNCTIONS
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1688 (defun ido-buffer-internal (method &optional fallback prompt default initial)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1689 ;; Internal function for ido-switch-buffer and friends
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1690 (if (not ido-mode)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1691 (call-interactively (or fallback 'switch-to-buffer))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1692 (let ((buf (ido-read-buffer (or prompt "Buffer: ") default nil initial)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1693
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1694 ;; Choose the buffer name: either the text typed in, or the head
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1695 ;; of the list of matches
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1696
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1697 (cond
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1698 ((eq ido-exit 'findfile)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1699 (ido-file-internal ido-default-file-method nil nil nil nil ido-text))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1700
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1701 ((eq ido-exit 'fallback)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1702 (let ((read-buffer-function nil))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1703 (call-interactively (or fallback 'switch-to-buffer))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1704
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1705 ;; Check buf is non-nil.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1706 ((not buf) nil)
47203
d7ff55da60cd (ido-ignore-item-temp-list): New variable.
Kim F. Storm <storm@cua.dk>
parents: 46631
diff changeset
1707 ((= (length buf) 0) nil)
46068
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1708
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1709 ;; View buffer if it exists
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1710 ((get-buffer buf)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1711 (if (eq method 'insert)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1712 (progn
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1713 (ido-record-command 'insert-buffer buf)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1714 (insert-buffer buf))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1715 (ido-visit-buffer buf method t)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1716
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1717 ;; buffer doesn't exist
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1718 ((eq ido-create-new-buffer 'never)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1719 (message "no buffer matching `%s'" buf))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1720
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1721 ((and (eq ido-create-new-buffer 'prompt)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1722 (not (y-or-n-p (format "No buffer matching `%s', create one? " buf))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1723 nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1724
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1725 ;; create a new buffer
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1726 (t
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1727 (setq buf (get-buffer-create buf))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1728 (if (fboundp 'set-buffer-major-mode)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1729 (set-buffer-major-mode buf))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1730 (ido-visit-buffer buf method t))))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1731
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1732 ;;;###autoload
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1733 (defun ido-read-buffer (prompt &optional default require-match initial)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1734 "Replacement for the built-in `read-buffer'.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1735 Return the name of a buffer selected.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1736 PROMPT is the prompt to give to the user. DEFAULT if given is the default
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1737 buffer to be selected, which will go to the front of the list.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1738 If REQUIRE-MATCH is non-nil, an existing-buffer must be selected.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1739 If INITIAL is non-nil, it specifies the initial input string."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1740 (let ((ido-current-directory nil))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1741 (ido-read-internal 'buffer prompt 'ido-buffer-history default require-match initial)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1742
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1743 (defun ido-record-work-directory (&optional dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1744 (when (and (numberp ido-max-work-directory-list) (> ido-max-work-directory-list 0))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1745 (if (and (setq dir (or dir ido-current-directory)) (> (length dir) 0))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1746 (let ((items ido-work-directory-list-ignore-regexps)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1747 (case-fold-search nil))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1748 (while (and items dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1749 (if (string-match (car items) dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1750 (setq dir nil))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1751 (setq items (cdr items)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1752 (if dir
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1753 (setq ido-work-directory-list (cons dir (delete dir ido-work-directory-list))))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1754 (if (> (length ido-work-directory-list) ido-max-work-directory-list)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1755 (setcdr (nthcdr (1- ido-max-work-directory-list) ido-work-directory-list) nil))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1756
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1757 (defun ido-forget-work-directory ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1758 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1759 (when (and ido-current-directory ido-work-directory-list)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1760 (setq ido-work-directory-list (delete ido-current-directory ido-work-directory-list))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1761 (when ido-use-merged-list
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1762 (ido-undo-merge-work-directory)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1763 (setq ido-exit 'refresh
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1764 ido-try-merged-list t
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1765 ido-use-merged-list t
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1766 ido-text-init ido-text
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1767 ido-rotate-temp t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1768 (exit-minibuffer))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1769
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1770 (defun ido-record-work-file (name)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1771 ;; Save NAME in ido-work-file-list
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1772 (when (and (numberp ido-max-work-file-list) (> ido-max-work-file-list 0))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1773 (or
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1774 (and ido-work-file-list (equal (car ido-work-file-list) name))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1775 (setq ido-work-file-list (cons name (delete name ido-work-file-list))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1776 (if (> (length ido-work-file-list) ido-max-work-file-list)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1777 (setcdr (nthcdr (1- ido-max-work-file-list) ido-work-file-list) nil))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1778
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1779 (defun ido-file-internal (method &optional fallback default prompt item initial)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1780 ;; Internal function for ido-find-file and friends
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1781 (let ((ido-current-directory (expand-file-name (or default default-directory)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1782 filename)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1783
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1784 (if (or (not ido-mode) (ido-is-slow-ftp-host))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1785 (setq filename t
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1786 ido-exit 'fallback))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1787
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1788 (let (ido-saved-vc-mt
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1789 (vc-master-templates (and (boundp 'vc-master-templates) vc-master-templates))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1790 (ido-work-directory-index -1)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1791 (ido-work-file-index -1)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1792 (ido-find-literal nil))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1793
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1794 (unless filename
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1795 (setq ido-saved-vc-mt vc-master-templates)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1796 (setq filename (ido-read-internal (or item 'file)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1797 (or prompt "Find file: ")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1798 'ido-file-history nil nil initial)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1799
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1800 ;; Choose the file name: either the text typed in, or the head
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1801 ;; of the list of matches
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1802
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1803 (cond
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1804 ((eq ido-exit 'fallback)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1805 ;; Need to guard setting of default-directory here, since
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1806 ;; we don't want to change directory of current buffer.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1807 (let ((default-directory ido-current-directory)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1808 (read-file-name-function nil))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1809 (call-interactively (or fallback 'find-file))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1810
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1811 ((eq ido-exit 'findbuffer)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1812 (ido-buffer-internal ido-default-buffer-method nil nil nil ido-text))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1813
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1814 ((eq ido-exit 'dired)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1815 (dired (concat ido-current-directory (or ido-text ""))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1816
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1817 ((eq method 'alt-file)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1818 (ido-record-work-file filename)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1819 (setq default-directory ido-current-directory)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1820 (ido-record-work-directory)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1821 (find-alternate-file filename))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1822
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1823 ((memq method '(dired list-directory))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1824 (if (equal filename ".")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1825 (setq filename ""))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1826 (let* ((path (ido-final-slash (concat ido-current-directory filename) t))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1827 (file (substring path 0 -1)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1828 (cond
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1829 ((file-directory-p path)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1830 (ido-record-command method path)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1831 (ido-record-work-directory path)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1832 (funcall method path))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1833 ((file-directory-p ido-current-directory)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1834 (cond
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1835 ((file-exists-p file)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1836 (ido-record-command method ido-current-directory)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1837 (ido-record-work-directory)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1838 (funcall method ido-current-directory)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1839 (if (eq method 'dired)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1840 (dired-goto-file (expand-file-name file))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1841 ((string-match "[[*?]" filename)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1842 (setq path (concat ido-current-directory filename))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1843 (ido-record-command method path)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1844 (ido-record-work-directory)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1845 (funcall method path))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1846 ((y-or-n-p (format "Directory %s does not exist. Create it " filename))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1847 (ido-record-command method path)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1848 (ido-record-work-directory path)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1849 (make-directory-internal path)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1850 (funcall method path))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1851 (t
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1852 ;; put make-directory command on history
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1853 (ido-record-command 'make-directory path))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1854 (t (error "No such directory")))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1855
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1856 ((eq method 'write)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1857 (ido-record-work-file filename)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1858 (setq default-directory ido-current-directory)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1859 (ido-record-command 'write-file (concat ido-current-directory filename))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1860 (ido-record-work-directory)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1861 (write-file filename))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1862
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1863 ((eq method 'read-only)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1864 (ido-record-work-file filename)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1865 (setq filename (concat ido-current-directory filename))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1866 (ido-record-command fallback filename)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1867 (ido-record-work-directory)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1868 (funcall fallback filename))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1869
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1870 ((eq method 'insert)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1871 (ido-record-work-file filename)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1872 (setq filename (concat ido-current-directory filename))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1873 (ido-record-command
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1874 (if ido-find-literal 'insert-file-literally 'insert-file)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1875 filename)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1876 (ido-record-work-directory)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1877 (if ido-find-literal
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1878 (insert-file-contents-literally filename)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1879 (insert-file-contents filename)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1880
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1881 (filename
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1882 (ido-record-work-file filename)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1883 (setq filename (concat ido-current-directory filename))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1884 (ido-record-command 'find-file filename)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1885 (ido-record-work-directory)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1886 (ido-visit-buffer (find-file-noselect filename nil ido-find-literal) method))))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1887
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1888 (defun ido-existing-item-p ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1889 ;; Return non-nil if there is a matching item
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1890 (not (null ido-matches)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1891
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1892 ;;; COMPLETION CODE
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1893
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1894 (defun ido-set-common-completion ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1895 ;; Find common completion of `ido-text' in `ido-matches'
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1896 ;; The result is stored in `ido-common-match-string'
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1897 (let* (val)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1898 (setq ido-common-match-string nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1899 (if (and ido-matches
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1900 (not ido-enable-regexp) ;; testing
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1901 (stringp ido-text)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1902 (> (length ido-text) 0))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1903 (if (setq val (ido-find-common-substring ido-matches ido-text))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1904 (setq ido-common-match-string val)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1905 val))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1906
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1907 (defun ido-complete ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1908 "Try and complete the current pattern amongst the file names."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1909 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1910 (let (res)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1911 (cond
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1912 ((and (memq ido-cur-item '(file dir))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1913 (string-match "[$]" ido-text))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1914 (let ((evar (substitute-in-file-name (concat ido-current-directory ido-text))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1915 (if (not (file-exists-p (file-name-directory evar)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1916 (message "Expansion generates non-existing directory path")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1917 (if (file-directory-p evar)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1918 (ido-set-current-directory evar)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1919 (let ((d (or (file-name-directory evar) "/"))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1920 (f (file-name-nondirectory evar)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1921 (when (file-directory-p d)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1922 (ido-set-current-directory d)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1923 (setq ido-text-init f))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1924 (setq ido-exit 'refresh)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1925 (exit-minibuffer))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1926
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1927 ((not ido-matches)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1928 (when ido-completion-buffer
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1929 (setq this-command 'ido-completion-help)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1930 (ido-completion-help)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1931
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1932 ((= 1 (length ido-matches))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1933 ;; only one choice, so select it.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1934 (exit-minibuffer))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1935
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1936 (t ;; else there could be some completions
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1937 (setq res ido-common-match-string)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1938 (if (and (not (memq res '(t nil)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1939 (not (equal res ido-text)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1940 ;; found something to complete, so put it in the minibuffer.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1941 (progn
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1942 ;; move exact match to front if not in prefix mode
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1943 (setq ido-rescan (not ido-enable-prefix))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1944 (delete-region (minibuffer-prompt-end) (point))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1945 (insert res))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1946 ;; else nothing to complete
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1947 (ido-completion-help)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1948 )))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1949
46231
794e46e1c313 (ido-set-matches1): Use regexp-quote instead of identity.
Kim F. Storm <storm@cua.dk>
parents: 46225
diff changeset
1950 (defun ido-complete-space ()
794e46e1c313 (ido-set-matches1): Use regexp-quote instead of identity.
Kim F. Storm <storm@cua.dk>
parents: 46225
diff changeset
1951 "Try completion unless inserting the space makes sense."
794e46e1c313 (ido-set-matches1): Use regexp-quote instead of identity.
Kim F. Storm <storm@cua.dk>
parents: 46225
diff changeset
1952 (interactive)
794e46e1c313 (ido-set-matches1): Use regexp-quote instead of identity.
Kim F. Storm <storm@cua.dk>
parents: 46225
diff changeset
1953 (if (and (stringp ido-common-match-string)
794e46e1c313 (ido-set-matches1): Use regexp-quote instead of identity.
Kim F. Storm <storm@cua.dk>
parents: 46225
diff changeset
1954 (stringp ido-text)
794e46e1c313 (ido-set-matches1): Use regexp-quote instead of identity.
Kim F. Storm <storm@cua.dk>
parents: 46225
diff changeset
1955 (cond
794e46e1c313 (ido-set-matches1): Use regexp-quote instead of identity.
Kim F. Storm <storm@cua.dk>
parents: 46225
diff changeset
1956 ((> (length ido-common-match-string) (length ido-text))
794e46e1c313 (ido-set-matches1): Use regexp-quote instead of identity.
Kim F. Storm <storm@cua.dk>
parents: 46225
diff changeset
1957 (= (aref ido-common-match-string (length ido-text)) ? ))
794e46e1c313 (ido-set-matches1): Use regexp-quote instead of identity.
Kim F. Storm <storm@cua.dk>
parents: 46225
diff changeset
1958 (ido-matches
794e46e1c313 (ido-set-matches1): Use regexp-quote instead of identity.
Kim F. Storm <storm@cua.dk>
parents: 46225
diff changeset
1959 (let (insert-space
794e46e1c313 (ido-set-matches1): Use regexp-quote instead of identity.
Kim F. Storm <storm@cua.dk>
parents: 46225
diff changeset
1960 (re (concat (regexp-quote ido-text) " "))
794e46e1c313 (ido-set-matches1): Use regexp-quote instead of identity.
Kim F. Storm <storm@cua.dk>
parents: 46225
diff changeset
1961 (comp ido-matches))
794e46e1c313 (ido-set-matches1): Use regexp-quote instead of identity.
Kim F. Storm <storm@cua.dk>
parents: 46225
diff changeset
1962 (while comp
794e46e1c313 (ido-set-matches1): Use regexp-quote instead of identity.
Kim F. Storm <storm@cua.dk>
parents: 46225
diff changeset
1963 (if (string-match re (ido-name (car comp)))
794e46e1c313 (ido-set-matches1): Use regexp-quote instead of identity.
Kim F. Storm <storm@cua.dk>
parents: 46225
diff changeset
1964 (setq comp nil insert-space t)
794e46e1c313 (ido-set-matches1): Use regexp-quote instead of identity.
Kim F. Storm <storm@cua.dk>
parents: 46225
diff changeset
1965 (setq comp (cdr comp))))
794e46e1c313 (ido-set-matches1): Use regexp-quote instead of identity.
Kim F. Storm <storm@cua.dk>
parents: 46225
diff changeset
1966 insert-space))
794e46e1c313 (ido-set-matches1): Use regexp-quote instead of identity.
Kim F. Storm <storm@cua.dk>
parents: 46225
diff changeset
1967 (t nil)))
794e46e1c313 (ido-set-matches1): Use regexp-quote instead of identity.
Kim F. Storm <storm@cua.dk>
parents: 46225
diff changeset
1968 (insert " ")
794e46e1c313 (ido-set-matches1): Use regexp-quote instead of identity.
Kim F. Storm <storm@cua.dk>
parents: 46225
diff changeset
1969 (ido-complete)))
794e46e1c313 (ido-set-matches1): Use regexp-quote instead of identity.
Kim F. Storm <storm@cua.dk>
parents: 46225
diff changeset
1970
46068
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1971 (defun ido-undo-merge-work-directory (&optional text try refresh)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1972 "Undo or redo last ido directory merge operation.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1973 If no merge has yet taken place, toggle automatic merging option."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1974 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1975 (cond
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1976 (ido-pre-merge-state
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1977 (ido-set-current-directory (nth 1 ido-pre-merge-state))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1978 (setq ido-text-init (or text (car ido-pre-merge-state))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1979 ido-cur-list (nth 2 ido-pre-merge-state)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1980 ido-ignored-list (nth 3 ido-pre-merge-state)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1981 ido-matches (nth 4 ido-pre-merge-state)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1982 ido-use-merged-list nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1983 ido-try-merged-list try
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1984 ido-keep-item-list (not refresh)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1985 ido-rescan nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1986 ido-exit 'refresh
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1987 ido-pre-merge-state nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1988 (exit-minibuffer))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1989 (text
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1990 nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1991 (ido-try-merged-list
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1992 (setq ido-try-merged-list nil))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1993 (ido-matches
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1994 (setq ido-try-merged-list t))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1995 ((not ido-use-merged-list)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1996 (ido-merge-work-directories))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1997
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1998 ;;; TOGGLE FUNCTIONS
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1999
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2000 (defun ido-toggle-case ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2001 "Toggle the value of `ido-case-fold'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2002 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2003 (setq ido-case-fold (not ido-case-fold))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2004 ;; ask for list to be regenerated.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2005 (setq ido-rescan t))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2006
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2007 (defun ido-toggle-regexp ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2008 "Toggle the value of `ido-enable-regexp'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2009 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2010 (setq ido-enable-regexp (not ido-enable-regexp))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2011 ;; ask for list to be regenerated.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2012 (setq ido-rescan t))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2013
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2014 (defun ido-toggle-prefix ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2015 "Toggle the value of `ido-enable-prefix'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2016 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2017 (setq ido-enable-prefix (not ido-enable-prefix))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2018 ;; ask for list to be regenerated.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2019 (setq ido-rescan t))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2020
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2021 (defun ido-toggle-ignore ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2022 "Toggle ignoring files specified with `ido-ignore-files'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2023 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2024 (setq ido-process-ignore-lists (not ido-process-ignore-lists))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2025 (setq ido-text-init ido-text)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2026 (setq ido-exit 'refresh)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2027 (exit-minibuffer))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2028
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2029 (defun ido-toggle-vc ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2030 "Disable version control for this file."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2031 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2032 (if (and ido-mode (eq ido-cur-item 'file))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2033 (progn
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2034 (setq vc-master-templates
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2035 (if vc-master-templates nil ido-saved-vc-mt))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2036 (setq ido-text-init ido-text)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2037 (setq ido-exit 'keep)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2038 (exit-minibuffer))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2039
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2040 (defun ido-toggle-literal ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2041 "Toggle literal reading of this file."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2042 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2043 (if (and ido-mode (eq ido-cur-item 'file))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2044 (progn
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2045 (setq ido-find-literal (not ido-find-literal))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2046 (setq ido-text-init ido-text)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2047 (setq ido-exit 'keep)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2048 (exit-minibuffer))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2049
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2050 (defun ido-reread-directory ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2051 "Read current directory again.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2052 May be useful if cached version is no longer valid, but directory
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2053 timestamp has not changed (e.g. with ftp or on Windows)."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2054 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2055 (if (and ido-mode (eq ido-cur-item 'file))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2056 (progn
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2057 (ido-remove-cached-dir ido-current-directory)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2058 (setq ido-text-init ido-text)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2059 (setq ido-rotate-temp t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2060 (setq ido-exit 'refresh)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2061 (exit-minibuffer))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2062
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2063 (defun ido-exit-minibuffer ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2064 "Exit minibuffer, but make sure we have a match if one is needed."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2065 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2066 (if (or (not ido-require-match)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2067 (ido-existing-item-p))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2068 (throw 'exit nil)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2069
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2070 (defun ido-select-text ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2071 "Select the buffer or file named by the prompt.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2072 If no buffer or file exactly matching the prompt exists, maybe create a new one."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2073 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2074 (setq ido-exit 'takeprompt)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2075 (exit-minibuffer))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2076
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2077 (defun ido-fallback-command ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2078 "Fallback to non-ido version of current command."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2079 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2080 (setq ido-exit 'fallback)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2081 (exit-minibuffer))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2082
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2083 (defun ido-enter-find-file ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2084 "Drop into find-file from buffer switching."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2085 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2086 (setq ido-exit 'findfile)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2087 (exit-minibuffer))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2088
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2089 (defun ido-enter-switch-buffer ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2090 "Drop into ido-switch-buffer from file switching."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2091 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2092 (setq ido-exit 'findbuffer)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2093 (exit-minibuffer))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2094
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2095 (defun ido-enter-dired ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2096 "Drop into dired from file switching."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2097 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2098 (setq ido-exit 'dired)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2099 (exit-minibuffer))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2100
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2101
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2102 (defun ido-up-directory (&optional clear)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2103 "Go up one directory level."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2104 (interactive "P")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2105 (setq ido-text-init (if clear nil ido-text))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2106 (setq ido-exit 'updir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2107 (setq ido-rotate-temp t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2108 (exit-minibuffer))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2109
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2110 (defun ido-delete-backward-updir (count)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2111 "Delete char backwards, or at beginning of buffer, go up one level."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2112 (interactive "P")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2113 (cond
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2114 ((= (minibuffer-prompt-end) (point))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2115 (if (not count)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2116 (ido-up-directory t)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2117 ((and ido-pre-merge-state (string-equal (car ido-pre-merge-state) ido-text))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2118 (ido-undo-merge-work-directory (substring ido-text 0 -1) t t))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2119 (t
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2120 (delete-backward-char (prefix-numeric-value count)))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2121
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2122 (defun ido-delete-backward-word-updir (count)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2123 "Delete all chars backwards, or at beginning of buffer, go up one level."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2124 (interactive "P")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2125 (if (= (minibuffer-prompt-end) (point))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2126 (if (not count)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2127 (ido-up-directory t))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2128 (backward-kill-word (prefix-numeric-value count))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2129
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2130 (defun ido-get-work-directory (&optional incr must-match)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2131 (let ((n (length ido-work-directory-list))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2132 (i ido-work-directory-index)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2133 (j 0)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2134 dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2135 (if (or (not ido-text) (= (length ido-text) 0))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2136 (setq must-match nil))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2137 (while (< j n)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2138 (setq i (+ i incr)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2139 j (1+ j))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2140 (if (> incr 0)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2141 (if (>= i n) (setq i 0))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2142 (if (< i 0) (setq i (1- n))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2143 (setq dir (nth i ido-work-directory-list))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2144 (if (and dir
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2145 (not (equal dir ido-current-directory))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2146 (file-directory-p dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2147 (or (not must-match)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2148 (ido-set-matches1
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2149 (if (eq ido-cur-item 'file)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2150 (ido-make-file-list1 dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2151 (ido-make-dir-list1 dir)))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2152 (setq j n)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2153 (setq dir nil)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2154 (if dir
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2155 (setq ido-work-directory-index i))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2156 dir))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2157
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2158 (defun ido-prev-work-directory ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2159 "Change to next working directory in list."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2160 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2161 (let ((dir (ido-get-work-directory 1 ido-work-directory-match-only)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2162 (when dir
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2163 (ido-set-current-directory dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2164 (setq ido-exit 'refresh)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2165 (setq ido-text-init ido-text)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2166 (setq ido-rotate-temp t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2167 (exit-minibuffer))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2168
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2169 (defun ido-next-work-directory ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2170 "Change to previous working directory in list."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2171 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2172 (let ((dir (ido-get-work-directory -1 ido-work-directory-match-only)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2173 (when dir
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2174 (ido-set-current-directory dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2175 (setq ido-exit 'refresh)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2176 (setq ido-text-init ido-text)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2177 (setq ido-rotate-temp t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2178 (exit-minibuffer))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2179
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2180 (defun ido-merge-work-directories ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2181 "Search (and merge) work directories for files matching the current input string."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2182 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2183 (setq ido-use-merged-list t ido-try-merged-list t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2184 (setq ido-exit 'refresh)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2185 (setq ido-text-init ido-text)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2186 (setq ido-rotate-temp t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2187 (exit-minibuffer))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2188
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2189 (defun ido-wide-find-file (&optional file)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2190 "Prompt for FILE to search for using find, starting from current directory."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2191 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2192 (unless file
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2193 (setq file (read-string (concat "Wide find file: " ido-current-directory) ido-text)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2194 (when (> (length file) 0)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2195 (setq ido-use-merged-list t ido-try-merged-list 'wide)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2196 (setq ido-exit 'refresh)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2197 (setq ido-text-init file)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2198 (setq ido-rotate-temp t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2199 (exit-minibuffer)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2200
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2201 (defun ido-wide-find-dir (&optional dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2202 "Prompt for DIR to search for using find, starting from current directory."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2203 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2204 (unless dir
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2205 (setq dir (read-string (concat "Wide find directory: " ido-current-directory) ido-text)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2206 (when (> (length dir) 0)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2207 (setq ido-use-merged-list t ido-try-merged-list 'wide)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2208 (setq ido-exit 'refresh)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2209 (setq ido-text-init (ido-final-slash dir t))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2210 (setq ido-rotate-temp t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2211 (exit-minibuffer)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2212
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2213 (defun ido-make-directory (&optional dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2214 "Prompt for DIR to create in current directory."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2215 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2216 (unless dir
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2217 (setq dir (read-string (concat "Make directory: " ido-current-directory) ido-text)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2218 (when (> (length dir) 0)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2219 (setq dir (concat ido-current-directory dir))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2220 (unless (file-exists-p dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2221 (make-directory dir t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2222 (ido-set-current-directory dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2223 (setq ido-exit 'refresh)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2224 (setq ido-text-init nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2225 (setq ido-rotate-temp t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2226 (exit-minibuffer))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2227
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2228 (defun ido-get-work-file (incr)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2229 (let ((n (length ido-work-file-list))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2230 (i (+ ido-work-file-index incr))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2231 name)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2232 (if (> incr 0)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2233 (if (>= i n) (setq i 0))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2234 (if (< i 0) (setq i (1- n))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2235 (setq name (nth i ido-work-file-list))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2236 (setq ido-work-file-index i)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2237 name))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2238
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2239 (defun ido-prev-work-file ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2240 "Change to next working file name in list."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2241 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2242 (let ((name (ido-get-work-file 1)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2243 (when name
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2244 (setq ido-text-init name)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2245 (setq ido-exit 'refresh)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2246 (exit-minibuffer))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2247
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2248 (defun ido-next-work-file ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2249 "Change to previous working file name in list."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2250 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2251 (let ((name (ido-get-work-file -1)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2252 (when name
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2253 (setq ido-text-init name)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2254 (setq ido-exit 'refresh)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2255 (exit-minibuffer))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2256
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2257 (defun ido-copy-current-file-name (all)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2258 "Insert file name of current buffer.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2259 If repeated, insert text from buffer instead."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2260 (interactive "P")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2261 (let* ((path (buffer-file-name ido-entry-buffer))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2262 (name (and path (file-name-nondirectory path))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2263 (when name
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2264 (setq ido-text-init
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2265 (if (or all
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2266 (not (equal (file-name-directory path) ido-current-directory))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2267 (not (string-match "\\.[^.]*\\'" name)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2268 name
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2269 (substring name 0 (1+ (match-beginning 0)))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2270 (setq ido-exit 'refresh
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2271 ido-try-merged-list nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2272 (exit-minibuffer))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2273
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2274 (defun ido-copy-current-word (all)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2275 "Insert current word (file name or path) from current buffer."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2276 (interactive "P")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2277 (let ((word (save-excursion
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2278 (set-buffer ido-entry-buffer)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2279 (let ((p (point)) start-line end-line start-name name)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2280 (beginning-of-line)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2281 (setq start-line (point))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2282 (end-of-line)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2283 (setq end-line (point))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2284 (goto-char p)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2285 (if (re-search-backward "[^-_a-zA-Z0-9:./\\~@]" start-line 1)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2286 (forward-char 1))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2287 (setq start-name (point))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2288 (re-search-forward "[-_a-zA-Z0-9:./\\~@]*" end-line 1)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2289 (if (= start-name (point))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2290 nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2291 (buffer-substring-no-properties start-name (point)))))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2292 (if (cond
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2293 ((not word) nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2294 ((string-match "\\`[~/]" word)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2295 (setq ido-text-init word
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2296 ido-try-merged-list nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2297 ido-exit 'chdir))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2298 ((string-match "/" word)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2299 (setq ido-text-init (concat ido-current-directory word)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2300 ido-try-merged-list nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2301 ido-exit 'chdir))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2302 (t
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2303 (setq ido-text-init word
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2304 ido-try-merged-list nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2305 ido-exit 'refresh)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2306 (exit-minibuffer))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2307
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2308 (defun ido-next-match ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2309 "Put first element of `ido-matches' at the end of the list."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2310 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2311 (if ido-matches
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2312 (let ((next (cadr ido-matches)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2313 (setq ido-cur-list (ido-chop ido-cur-list next))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2314 (setq ido-rescan t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2315 (setq ido-rotate t))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2316
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2317 (defun ido-prev-match ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2318 "Put last element of `ido-matches' at the front of the list."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2319 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2320 (if ido-matches
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2321 (let ((prev (car (last ido-matches))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2322 (setq ido-cur-list (ido-chop ido-cur-list prev))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2323 (setq ido-rescan t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2324 (setq ido-rotate t))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2325
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2326 (defun ido-next-match-dir ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2327 "Find next directory in match list.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2328 If work directories have been merged, cycle through directories for
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2329 first matching file."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2330 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2331 (if ido-use-merged-list
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2332 (if ido-matches
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2333 (let* ((elt (car ido-matches))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2334 (dirs (cdr elt)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2335 (when (> (length dirs) 1)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2336 (setcdr elt (ido-chop dirs (cadr dirs))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2337 (setq ido-rescan nil)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2338 (let ((cnt (length ido-matches))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2339 (i 1))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2340 (while (and (< i cnt) (not (ido-final-slash (nth i ido-matches))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2341 (setq i (1+ i)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2342 (if (< i cnt)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2343 (setq ido-cur-list (ido-chop ido-cur-list (nth i ido-matches)))))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2344
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2345 (defun ido-prev-match-dir ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2346 "Find previous directory in match list.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2347 If work directories have been merged, cycle through directories
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2348 for first matching file."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2349 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2350 (if ido-use-merged-list
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2351 (if ido-matches
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2352 (let* ((elt (car ido-matches))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2353 (dirs (cdr elt)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2354 (when (> (length dirs) 1)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2355 (setcdr elt (ido-chop dirs (car (last dirs)))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2356 (setq ido-rescan nil)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2357 (let* ((cnt (length ido-matches))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2358 (i (1- cnt)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2359 (while (and (> i 0) (not (ido-final-slash (nth i ido-matches))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2360 (setq i (1- i)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2361 (if (> i 0)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2362 (setq ido-cur-list (ido-chop ido-cur-list (nth i ido-matches)))))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2363
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2364 (defun ido-chop (items elem)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2365 "Remove all elements before ELEM and put them at the end of ITEMS."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2366 (let ((ret nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2367 (next nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2368 (sofar nil))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2369 (while (not ret)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2370 (setq next (car items))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2371 (if (equal next elem)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2372 (setq ret (append items (nreverse sofar)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2373 ;; else
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2374 (progn
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2375 (setq items (cdr items))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2376 (setq sofar (cons next sofar)))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2377 ret))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2378
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2379 (defun ido-name (item)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2380 ;; Return file name for current item, whether in a normal list
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2381 ;; or a merged work directory list.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2382 (if (consp item) (car item) item))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2383
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2384
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2385 ;;; CREATE LIST OF ALL CURRENT FILES
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2386
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2387 (defun ido-all-completions ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2388 ;; Return unsorted list of all competions.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2389 (let ((ido-process-ignore-lists nil))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2390 (cond
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2391 ((eq ido-cur-item 'file)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2392 (ido-make-file-list1 ido-current-directory))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2393 ((eq ido-cur-item 'dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2394 (ido-make-dir-list1 ido-current-directory))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2395 ((eq ido-cur-item 'buffer)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2396 (ido-make-buffer-list1))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2397 (t nil))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2398
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2399
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2400 (defun ido-sort-list (items)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2401 ;; Simple list of file or buffer names
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2402 (sort items (lambda (a b) (string-lessp a b))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2403
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2404 (defun ido-sort-merged-list (items promote)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2405 ;; Input is list of ("file" . "dir") cons cells.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2406 ;; Output is sorted list of ("file "dir" ...) lists
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2407 (let ((l (sort items (lambda (a b) (string-lessp (car b) (car a)))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2408 res a cur dirs)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2409 (while l
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2410 (setq a (car l)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2411 l (cdr l))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2412 (if (and res (string-equal (car (car res)) (car a)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2413 (progn
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2414 (setcdr (car (if cur (cdr res) res)) (cons (cdr a) (cdr (car res))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2415 (if (and promote (string-equal ido-current-directory (cdr a)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2416 (setq cur t)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2417 (setq res (cons (list (car a) (cdr a)) res)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2418 cur nil)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2419 res))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2420
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2421 (defun ido-wide-find-dirs-or-files (dir file &optional prefix finddir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2422 ;; As ido-run-find-command, but returns a list of cons pairs ("file" . "dir")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2423 (let ((paths
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2424 (split-string
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2425 (shell-command-to-string
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2426 (concat "find " dir " -name \"" (if prefix "" "*") file "*\" -type " (if finddir "d" "f") " -print"))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2427 path d f
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2428 res)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2429 (while paths
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2430 (setq path (car paths)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2431 paths (cdr paths)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2432 paths (cdr paths))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2433 (if (and (string-match "^/" path)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2434 (file-exists-p path))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2435 (setq d (file-name-directory path)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2436 f (file-name-nondirectory path)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2437 res (cons (cons (if finddir (ido-final-slash f t) f) d) res))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2438 res))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2439
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2440 (defun ido-flatten-merged-list (items)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2441 ;; Create a list of path names based on a merged directory list.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2442 (let (res)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2443 (while items
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2444 (let* ((item (car items))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2445 (file (car item))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2446 (dirs (cdr item)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2447 (while dirs
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2448 (setq res (cons (concat (car dirs) file) res)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2449 dirs (cdr dirs))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2450 (setq items (cdr items)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2451 res))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2452
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2453 (defun ido-make-merged-file-list (text auto wide)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2454 (let (res)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2455 (message "Searching for `%s'...." text)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2456 (if (and (ido-final-slash text) ido-dir-file-cache)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2457 (if wide
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2458 (setq res (ido-wide-find-dirs-or-files
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2459 ido-current-directory (substring text 0 -1) ido-enable-prefix t))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2460 ;; Use list of cached directories
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2461 (let ((re (concat (regexp-quote (substring text 0 -1)) "[^/:]*/\\'"))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2462 (dirs ido-dir-file-cache)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2463 dir b d f)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2464 (if nil ;; simple
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2465 (while dirs
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2466 (setq dir (car (car dirs))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2467 dirs (cdr dirs))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2468 (when (and (string-match re dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2469 (not (ido-ignore-item-p dir ido-ignore-directories-merge))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2470 (file-directory-p dir))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2471 (setq b (substring dir 0 -1)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2472 f (concat (file-name-nondirectory b) "/")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2473 d (file-name-directory b)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2474 res (cons (cons f d) res))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2475 (while dirs
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2476 (setq dir (car dirs)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2477 d (car dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2478 dirs (cdr dirs))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2479 (when (not (ido-ignore-item-p d ido-ignore-directories-merge))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2480 (setq dir (cdr (cdr dir)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2481 (while dir
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2482 (setq f (car dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2483 dir (cdr dir))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2484 (if (and (string-match re f)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2485 (not (ido-ignore-item-p f ido-ignore-directories)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2486 (setq res (cons (cons f d) res)))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2487 (if (and auto (input-pending-p))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2488 (setq dirs nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2489 res t))))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2490 (if wide
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2491 (setq res (ido-wide-find-dirs-or-files
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2492 ido-current-directory text ido-enable-prefix nil))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2493 (let ((ido-text text)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2494 (dirs ido-work-directory-list)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2495 (must-match (and text (> (length text) 0)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2496 dir fl)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2497 (if (and auto (not (member ido-current-directory dirs)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2498 (setq dirs (cons ido-current-directory dirs)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2499 (while dirs
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2500 (setq dir (car dirs)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2501 dirs (cdr dirs))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2502 (when (and dir (stringp dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2503 (or ido-merge-ftp-work-directories
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2504 (not (ido-is-ftp-directory dir)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2505 (file-directory-p dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2506 (setq fl (if (eq ido-cur-item 'file)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2507 (ido-make-file-list1 dir t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2508 (ido-make-dir-list1 dir t))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2509 (if must-match
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2510 (setq fl (ido-set-matches1 fl)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2511 (if fl
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2512 (setq res (nconc fl res))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2513 (if (and auto (input-pending-p))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2514 (setq dirs nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2515 res t))))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2516 (if (and res (not (eq res t)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2517 (setq res (ido-sort-merged-list res auto)))
46257
66e7966b0b91 (ido-make-merged-file-list): Move fully matching item to head of list.
Kim F. Storm <storm@cua.dk>
parents: 46256
diff changeset
2518 (when (and (or ido-rotate-temp ido-rotate-file-list-default)
46292
712d0161e499 (ido-make-merged-file-list): Fix last change again.
Kim F. Storm <storm@cua.dk>
parents: 46280
diff changeset
2519 (listp res)
46257
66e7966b0b91 (ido-make-merged-file-list): Move fully matching item to head of list.
Kim F. Storm <storm@cua.dk>
parents: 46256
diff changeset
2520 (> (length text) 0))
66e7966b0b91 (ido-make-merged-file-list): Move fully matching item to head of list.
Kim F. Storm <storm@cua.dk>
parents: 46256
diff changeset
2521 (let ((elt (assoc text res)))
46270
c64c46b334d7 (ido-make-merged-file-list): Fix last change.
Kim F. Storm <storm@cua.dk>
parents: 46257
diff changeset
2522 (when (and elt (not (eq elt (car res))))
46257
66e7966b0b91 (ido-make-merged-file-list): Move fully matching item to head of list.
Kim F. Storm <storm@cua.dk>
parents: 46256
diff changeset
2523 (setq res (delq elt res))
66e7966b0b91 (ido-make-merged-file-list): Move fully matching item to head of list.
Kim F. Storm <storm@cua.dk>
parents: 46256
diff changeset
2524 (setq res (cons elt res)))))
46068
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2525 (message nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2526 res))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2527
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2528 (defun ido-make-buffer-list1 (&optional frame visible)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2529 ;; Return list of non-ignored buffer names
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2530 (delq nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2531 (mapcar
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2532 (lambda (x)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2533 (let ((name (buffer-name x)))
47203
d7ff55da60cd (ido-ignore-item-temp-list): New variable.
Kim F. Storm <storm@cua.dk>
parents: 46631
diff changeset
2534 (if (not (or (ido-ignore-item-p name ido-ignore-buffers) (member name visible)))
46068
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2535 name)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2536 (buffer-list frame))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2537
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2538 (defun ido-make-buffer-list (default)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2539 ;; Return the current list of buffers.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2540 ;; Currently visible buffers are put at the end of the list.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2541 ;; The hook `ido-make-buflist-hook' is run after the list has been
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2542 ;; created to allow the user to further modify the order of the buffer names
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2543 ;; in this list. If DEFAULT is non-nil, and corresponds to an existing buffer,
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2544 ;; it is put to the start of the list.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2545 (let* ((ido-current-buffers (ido-get-buffers-in-frames 'current))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2546 (ido-temp-list (ido-make-buffer-list1 (selected-frame) ido-current-buffers)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2547 (if ido-temp-list
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2548 (nconc ido-temp-list ido-current-buffers)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2549 (setq ido-temp-list ido-current-buffers))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2550 (if default
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2551 (progn
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2552 (setq ido-temp-list
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2553 (delete default ido-temp-list))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2554 (setq ido-temp-list
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2555 (cons default ido-temp-list))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2556 (run-hooks 'ido-make-buffer-list-hook)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2557 ido-temp-list))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2558
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2559 (defun ido-to-end (items)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2560 ;; Move the elements from ITEMS to the end of `ido-temp-list'
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2561 (mapcar
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2562 (lambda (elem)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2563 (setq ido-temp-list (delq elem ido-temp-list)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2564 items)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2565 (if ido-temp-list
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2566 (nconc ido-temp-list items)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2567 (setq ido-temp-list items)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2568
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2569 (defun ido-file-name-all-completions (dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2570 ;; Return name of all files in DIR
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2571 ;; Uses and updates ido-dir-file-cache
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2572 (if (and (numberp ido-max-dir-file-cache) (> ido-max-dir-file-cache 0)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2573 (stringp dir) (> (length dir) 0)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2574 (ido-may-cache-directory dir))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2575 (let* ((cached (assoc dir ido-dir-file-cache))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2576 (ctime (nth 1 cached))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2577 (ftp (ido-is-ftp-directory dir))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2578 (attr (if ftp nil (file-attributes dir)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2579 (mtime (nth 5 attr))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2580 valid)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2581 (when cached ; should we use the cached entry ?
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2582 (if ftp
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2583 (setq valid (and (eq (car ctime) 'ftp)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2584 (ido-cache-ftp-valid (cdr ctime))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2585 (if attr
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2586 (setq valid (and (= (car ctime) (car mtime))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2587 (= (car (cdr ctime)) (car (cdr mtime)))))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2588 (if (not valid)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2589 (setq ido-dir-file-cache (delq cached ido-dir-file-cache)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2590 cached nil)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2591 (unless cached
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2592 (if (and ftp (file-readable-p dir))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2593 (setq mtime (cons 'ftp (ido-time-stamp))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2594 (if mtime
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2595 (setq cached (cons dir (cons mtime (file-name-all-completions "" dir)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2596 ido-dir-file-cache (cons cached ido-dir-file-cache)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2597 (if (> (length ido-dir-file-cache) ido-max-dir-file-cache)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2598 (setcdr (nthcdr (1- ido-max-dir-file-cache) ido-dir-file-cache) nil)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2599 (and cached
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2600 (cdr (cdr cached))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2601 (file-name-all-completions "" dir)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2602
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2603 (defun ido-remove-cached-dir (dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2604 ;; Remove dir from ido-dir-file-cache
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2605 (if (and ido-dir-file-cache
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2606 (stringp dir) (> (length dir) 0))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2607 (let ((cached (assoc dir ido-dir-file-cache)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2608 (if cached
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2609 (setq ido-dir-file-cache (delq cached ido-dir-file-cache))))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2610
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2611
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2612 (defun ido-make-file-list1 (dir &optional merged)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2613 ;; Return list of non-ignored files in DIR
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2614 ;; If MERGED is non-nil, each file is cons'ed with DIR
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2615 (and (file-directory-p dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2616 (delq nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2617 (mapcar
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2618 (lambda (name)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2619 (if (not (ido-ignore-item-p name ido-ignore-files t))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2620 (if merged (cons name dir) name)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2621 (ido-file-name-all-completions dir)))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2622
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2623 (defun ido-make-file-list (default)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2624 ;; Return the current list of files.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2625 ;; Currently visible files are put at the end of the list.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2626 ;; The hook `ido-make-file-list-hook' is run after the list has been
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2627 ;; created to allow the user to further modify the order of the file names
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2628 ;; in this list.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2629 (let ((ido-temp-list (ido-make-file-list1 ido-current-directory)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2630 (setq ido-temp-list (ido-sort-list ido-temp-list))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2631 (let ((default-directory ido-current-directory))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2632 (ido-to-end ;; move ftp hosts and visited files to end
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2633 (delq nil (mapcar
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2634 (lambda (x) (if (or (string-match "..:\\'" x) (get-file-buffer x)) x))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2635 ido-temp-list))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2636 (ido-to-end ;; move . files to end
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2637 (delq nil (mapcar
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2638 (lambda (x) (if (string-equal (substring x 0 1) ".") x))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2639 ido-temp-list)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2640 (if (and default (member default ido-temp-list))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2641 (if (or ido-rotate-temp ido-rotate-file-list-default)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2642 (unless (equal default (car ido-temp-list))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2643 (let ((l ido-temp-list) k)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2644 (while (and l (cdr l) (not (equal default (car (cdr l)))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2645 (setq l (cdr l)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2646 (setq k (cdr l))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2647 (setcdr l nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2648 (nconc k ido-temp-list)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2649 (setq ido-temp-list k)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2650 (setq ido-temp-list
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2651 (delete default ido-temp-list))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2652 (setq ido-temp-list
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2653 (cons default ido-temp-list))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2654 (when ido-show-dot-for-dired
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2655 (setq ido-temp-list (delete "." ido-temp-list))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2656 (setq ido-temp-list (cons "." ido-temp-list)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2657 (run-hooks 'ido-make-file-list-hook)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2658 ido-temp-list))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2659
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2660 (defun ido-make-dir-list1 (dir &optional merged)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2661 ;; Return list of non-ignored subdirs in DIR
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2662 ;; If MERGED is non-nil, each subdir is cons'ed with DIR
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2663 (and (file-directory-p dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2664 (delq nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2665 (mapcar
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2666 (lambda (name)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2667 (and (ido-final-slash name) (not (ido-ignore-item-p name ido-ignore-directories))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2668 (if merged (cons name dir) name)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2669 (ido-file-name-all-completions dir)))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2670
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2671 (defun ido-make-dir-list (default)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2672 ;; Return the current list of directories.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2673 ;; The hook `ido-make-dir-list-hook' is run after the list has been
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2674 ;; created to allow the user to further modify the order of the
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2675 ;; directory names in this list.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2676 (let ((ido-temp-list (ido-make-dir-list1 ido-current-directory)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2677 (setq ido-temp-list (ido-sort-list ido-temp-list))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2678 (let ((default-directory ido-current-directory))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2679 (ido-to-end ;; move visited files to end
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2680 (delq nil (mapcar
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2681 (lambda (x) (if (get-file-buffer x) x))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2682 ido-temp-list))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2683 (ido-to-end ;; move . files to end
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2684 (delq nil (mapcar
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2685 (lambda (x) (if (string-equal (substring x 0 1) ".") x))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2686 ido-temp-list)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2687 (if (and default (member default ido-temp-list))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2688 (if (or ido-rotate-temp ido-rotate-file-list-default)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2689 (unless (equal default (car ido-temp-list))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2690 (let ((l ido-temp-list) k)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2691 (while (and l (cdr l) (not (equal default (car (cdr l)))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2692 (setq l (cdr l)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2693 (setq k (cdr l))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2694 (setcdr l nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2695 (nconc k ido-temp-list)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2696 (setq ido-temp-list k)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2697 (setq ido-temp-list
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2698 (delete default ido-temp-list))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2699 (setq ido-temp-list
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2700 (cons default ido-temp-list))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2701 (setq ido-temp-list (delete "." ido-temp-list))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2702 (setq ido-temp-list (cons "." ido-temp-list))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2703 (run-hooks 'ido-make-dir-list-hook)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2704 ido-temp-list))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2705
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2706 ;; List of the files visible in the current frame.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2707 (defvar ido-bufs-in-frame)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2708
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2709 (defun ido-get-buffers-in-frames (&optional current)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2710 ;; Return the list of buffers that are visible in the current frame.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2711 ;; If optional argument `current' is given, restrict searching to the
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2712 ;; current frame, rather than all frames, regardless of value of
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2713 ;; `ido-all-frames'.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2714 (let ((ido-bufs-in-frame nil))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2715 (walk-windows 'ido-get-bufname nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2716 (if current
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2717 nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2718 ido-all-frames))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2719 ido-bufs-in-frame))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2720
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2721 (defun ido-get-bufname (win)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2722 ;; Used by `ido-get-buffers-in-frames' to walk through all windows
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2723 (let ((buf (buffer-name (window-buffer win))))
47203
d7ff55da60cd (ido-ignore-item-temp-list): New variable.
Kim F. Storm <storm@cua.dk>
parents: 46631
diff changeset
2724 (unless (or (member buf ido-bufs-in-frame)
d7ff55da60cd (ido-ignore-item-temp-list): New variable.
Kim F. Storm <storm@cua.dk>
parents: 46631
diff changeset
2725 (member buf ido-ignore-item-temp-list))
d7ff55da60cd (ido-ignore-item-temp-list): New variable.
Kim F. Storm <storm@cua.dk>
parents: 46631
diff changeset
2726 ;; Only add buf if it is not already in list.
d7ff55da60cd (ido-ignore-item-temp-list): New variable.
Kim F. Storm <storm@cua.dk>
parents: 46631
diff changeset
2727 ;; This prevents same buf in two different windows being
d7ff55da60cd (ido-ignore-item-temp-list): New variable.
Kim F. Storm <storm@cua.dk>
parents: 46631
diff changeset
2728 ;; put into the list twice.
d7ff55da60cd (ido-ignore-item-temp-list): New variable.
Kim F. Storm <storm@cua.dk>
parents: 46631
diff changeset
2729 (setq ido-bufs-in-frame
d7ff55da60cd (ido-ignore-item-temp-list): New variable.
Kim F. Storm <storm@cua.dk>
parents: 46631
diff changeset
2730 (cons buf ido-bufs-in-frame)))))
46068
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2731
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2732 ;;; FIND MATCHING ITEMS
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2733
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2734 (defun ido-set-matches1 (items &optional do-full)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2735 ;; Return list of matches in items
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2736 (let* ((case-fold-search ido-case-fold)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2737 (rexq (if ido-enable-regexp ido-text (regexp-quote ido-text)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2738 (re (if ido-enable-prefix (concat "\\`" rexq) rexq))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2739 (full-re (and do-full (not ido-enable-regexp) (not (string-match "\$\\'" re))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2740 (concat "\\`" re "\\'")))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2741 (prefix-re (and full-re (not ido-enable-prefix)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2742 (concat "\\`" rexq)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2743 full-matches
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2744 prefix-matches
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2745 matches)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2746 (mapcar
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2747 (lambda (item)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2748 (let ((name (ido-name item)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2749 (if (string-match re name)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2750 (cond
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2751 ((and full-re (string-match full-re name))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2752 (setq full-matches (cons item full-matches)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2753 ((and prefix-re (string-match prefix-re name))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2754 (setq prefix-matches (cons item prefix-matches)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2755 (t (setq matches (cons item matches))))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2756 t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2757 items)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2758 (if prefix-matches
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2759 (setq matches (nconc prefix-matches matches)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2760 (if full-matches
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2761 (setq matches (nconc full-matches matches)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2762 (when (and (null matches)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2763 ido-enable-flex-matching
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2764 (> (length ido-text) 1)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2765 (not ido-enable-regexp))
46256
88bc5ce0674c (ido-find-common-substring): Return substring instead of t.
Kim F. Storm <storm@cua.dk>
parents: 46231
diff changeset
2766 (setq re (mapconcat #'regexp-quote (split-string ido-text "") ".*"))
46068
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2767 (if ido-enable-prefix
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2768 (setq re (concat "\\`" re)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2769 (mapcar
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2770 (lambda (item)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2771 (let ((name (ido-name item)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2772 (if (string-match re name)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2773 (setq matches (cons item matches)))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2774 items))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2775 matches))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2776
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2777
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2778 (defun ido-set-matches ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2779 ;; Set `ido-matches' to the list of items matching prompt
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2780 (when ido-rescan
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2781 (setq ido-matches (ido-set-matches1 (reverse ido-cur-list) (not ido-rotate))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2782 ido-rotate nil)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2783
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2784 (defun ido-ignore-item-p (name re-list &optional ignore-ext)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2785 ;; Return t if the buffer or file NAME should be ignored.
47203
d7ff55da60cd (ido-ignore-item-temp-list): New variable.
Kim F. Storm <storm@cua.dk>
parents: 46631
diff changeset
2786 (or (member name ido-ignore-item-temp-list)
d7ff55da60cd (ido-ignore-item-temp-list): New variable.
Kim F. Storm <storm@cua.dk>
parents: 46631
diff changeset
2787 (and
d7ff55da60cd (ido-ignore-item-temp-list): New variable.
Kim F. Storm <storm@cua.dk>
parents: 46631
diff changeset
2788 ido-process-ignore-lists re-list
46068
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2789 (let ((data (match-data))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2790 (ext-list (and ignore-ext ido-ignore-extensions
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2791 completion-ignored-extensions))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2792 ignorep nextstr
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2793 (flen (length name)) slen)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2794 (while ext-list
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2795 (setq nextstr (car ext-list))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2796 (if (cond
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2797 ((stringp nextstr)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2798 (and (>= flen (setq slen (length nextstr)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2799 (string-equal (substring name (- flen slen)) nextstr)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2800 ((fboundp nextstr) (funcall nextstr name))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2801 (t nil))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2802 (setq ignorep t
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2803 ext-list nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2804 re-list nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2805 (setq ext-list (cdr ext-list))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2806 (while re-list
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2807 (setq nextstr (car re-list))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2808 (if (cond
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2809 ((stringp nextstr) (string-match nextstr name))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2810 ((fboundp nextstr) (funcall nextstr name))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2811 (t nil))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2812 (setq ignorep t
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2813 re-list nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2814 (setq re-list (cdr re-list))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2815 ;; return the result
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2816 (if ignorep
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2817 (setq ido-ignored-list (cons name ido-ignored-list)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2818 (set-match-data data)
47203
d7ff55da60cd (ido-ignore-item-temp-list): New variable.
Kim F. Storm <storm@cua.dk>
parents: 46631
diff changeset
2819 ignorep))))
46068
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2820
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2821
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2822 ;; Private variable used by `ido-word-matching-substring'.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2823 (defvar ido-change-word-sub)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2824
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2825 (defun ido-find-common-substring (items subs)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2826 ;; Return common string following SUBS in each element of ITEMS.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2827 (let (res
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2828 alist
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2829 ido-change-word-sub)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2830 (setq ido-change-word-sub
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2831 (if ido-enable-regexp
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2832 subs
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2833 (regexp-quote subs)))
46256
88bc5ce0674c (ido-find-common-substring): Return substring instead of t.
Kim F. Storm <storm@cua.dk>
parents: 46231
diff changeset
2834 (setq res (mapcar #'ido-word-matching-substring items))
46068
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2835 (setq res (delq nil res)) ;; remove any nil elements (shouldn't happen)
46256
88bc5ce0674c (ido-find-common-substring): Return substring instead of t.
Kim F. Storm <storm@cua.dk>
parents: 46231
diff changeset
2836 (setq alist (mapcar #'ido-makealist res)) ;; could use an OBARRAY
46068
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2837
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2838 ;; try-completion returns t if there is an exact match.
46256
88bc5ce0674c (ido-find-common-substring): Return substring instead of t.
Kim F. Storm <storm@cua.dk>
parents: 46231
diff changeset
2839 (let* ((completion-ignore-case ido-case-fold)
88bc5ce0674c (ido-find-common-substring): Return substring instead of t.
Kim F. Storm <storm@cua.dk>
parents: 46231
diff changeset
2840 (comp (try-completion subs alist)))
88bc5ce0674c (ido-find-common-substring): Return substring instead of t.
Kim F. Storm <storm@cua.dk>
parents: 46231
diff changeset
2841 (if (eq comp t)
88bc5ce0674c (ido-find-common-substring): Return substring instead of t.
Kim F. Storm <storm@cua.dk>
parents: 46231
diff changeset
2842 subs
88bc5ce0674c (ido-find-common-substring): Return substring instead of t.
Kim F. Storm <storm@cua.dk>
parents: 46231
diff changeset
2843 comp))))
46068
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2844
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2845 (defun ido-word-matching-substring (word)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2846 ;; Return part of WORD before 1st match to `ido-change-word-sub'.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2847 ;; If `ido-change-word-sub' cannot be found in WORD, return nil.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2848 (let ((case-fold-search ido-case-fold))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2849 (let ((m (string-match ido-change-word-sub (ido-name word))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2850 (if m
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2851 (substring (ido-name word) m)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2852 ;; else no match
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2853 nil))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2854
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2855 (defun ido-makealist (res)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2856 ;; Return dotted pair (RES . 1).
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2857 (cons res 1))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2858
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2859 (defun ido-choose-completion-string (choice buffer mini-p base-size)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2860 (when (ido-active)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2861 ;; Insert the completion into the buffer where completion was requested.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2862 (if (get-buffer ido-completion-buffer)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2863 (kill-buffer ido-completion-buffer))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2864 (cond
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2865 ((ido-active t) ;; ido-use-merged-list
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2866 (setq ido-current-directory ""
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2867 ido-text choice
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2868 ido-exit 'done))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2869 ((not (ido-final-slash choice))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2870 (setq ido-text choice
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2871 ido-exit 'done))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2872 (t
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2873 (ido-set-current-directory ido-current-directory choice)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2874 (setq ido-exit 'refresh)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2875 (exit-minibuffer)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2876 t))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2877
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2878 (defun ido-completion-help ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2879 "Show possible completions in a *File Completions* buffer."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2880 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2881 (setq ido-rescan nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2882 (let ((temp-buf (get-buffer ido-completion-buffer))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2883 display-it full-list)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2884 (if (and (eq last-command this-command) temp-buf)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2885 ;; scroll buffer
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2886 (let (win (buf (current-buffer)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2887 (display-buffer temp-buf nil nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2888 (set-buffer temp-buf)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2889 (setq win (get-buffer-window temp-buf))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2890 (if (pos-visible-in-window-p (point-max) win)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2891 (if (or ido-completion-buffer-all-completions (boundp 'ido-completion-buffer-full))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2892 (set-window-start win (point-min))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2893 (set (make-local-variable 'ido-completion-buffer-full) t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2894 (setq full-list t
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2895 display-it t))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2896 (scroll-other-window))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2897 (set-buffer buf))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2898 (setq display-it t))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2899 (if display-it
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2900 (with-output-to-temp-buffer ido-completion-buffer
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2901 (let ((completion-list (ido-sort-list
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2902 (cond
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2903 (ido-use-merged-list
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2904 (ido-flatten-merged-list (or ido-matches ido-cur-list)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2905 ((or full-list ido-completion-buffer-all-completions)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2906 (ido-all-completions))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2907 (t
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2908 (copy-sequence (or ido-matches ido-cur-list)))))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2909 (if ido-xemacs
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2910 ;; XEmacs extents are put on by default, doesn't seem to be
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2911 ;; any way of switching them off.
46333
a86a0859521a Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 46292
diff changeset
2912 ;; This obscure code avoids a byte compiler warning in Emacs.
46225
172a10dd044b Changed xemacs specific code to avoid byte compiler warning in GNU
Kim F. Storm <storm@cua.dk>
parents: 46118
diff changeset
2913 (let ((f 'display-completion-list))
172a10dd044b Changed xemacs specific code to avoid byte compiler warning in GNU
Kim F. Storm <storm@cua.dk>
parents: 46118
diff changeset
2914 (funcall f completion-list
172a10dd044b Changed xemacs specific code to avoid byte compiler warning in GNU
Kim F. Storm <storm@cua.dk>
parents: 46118
diff changeset
2915 :help-string "ido "
172a10dd044b Changed xemacs specific code to avoid byte compiler warning in GNU
Kim F. Storm <storm@cua.dk>
parents: 46118
diff changeset
2916 :activate-callback
172a10dd044b Changed xemacs specific code to avoid byte compiler warning in GNU
Kim F. Storm <storm@cua.dk>
parents: 46118
diff changeset
2917 '(lambda (x y z) (message "doesn't work yet, sorry!"))))
46068
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2918 ;; else running Emacs
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2919 ;;(add-hook 'completion-setup-hook 'completion-setup-function)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2920 (display-completion-list completion-list)))))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2921
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2922 ;;; KILL CURRENT BUFFER
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2923 (defun ido-kill-buffer-at-head ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2924 "Kill the buffer at the head of `ido-matches'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2925 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2926 (let ((enable-recursive-minibuffers t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2927 (buf (car ido-matches)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2928 (when buf
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2929 (kill-buffer buf)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2930 ;; Check if buffer still exists.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2931 (if (get-buffer buf)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2932 ;; buffer couldn't be killed.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2933 (setq ido-rescan t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2934 ;; else buffer was killed so remove name from list.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2935 (setq ido-cur-list (delq buf ido-cur-list))))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2936
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2937 ;;; DELETE CURRENT FILE
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2938 (defun ido-delete-file-at-head ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2939 "Delete the file at the head of `ido-matches'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2940 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2941 (let ((enable-recursive-minibuffers t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2942 (file (car ido-matches)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2943 (if file
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2944 (setq file (concat ido-current-directory file)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2945 (when (and file
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2946 (file-exists-p file)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2947 (not (file-directory-p file))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2948 (file-writable-p ido-current-directory)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2949 (yes-or-no-p (concat "Delete " file " ")))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2950 (delete-file file)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2951 ;; Check if file still exists.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2952 (if (file-exists-p file)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2953 ;; file could not be deleted
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2954 (setq ido-rescan t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2955 ;; else file was killed so remove name from list.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2956 (setq ido-cur-list (delq (car ido-matches) ido-cur-list))))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2957
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2958
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2959 ;;; VISIT CHOSEN BUFFER
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2960 (defun ido-visit-buffer (buffer method &optional record)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2961 "Visit file named FILE according to METHOD.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2962 Record command in command-history if optional RECORD is non-nil."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2963
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2964 (let (win newframe)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2965 (cond
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2966 ((eq method 'kill)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2967 (if record
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2968 (ido-record-command 'kill-buffer buffer))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2969 (kill-buffer buffer))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2970
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2971 ((eq method 'samewindow)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2972 (if record
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2973 (ido-record-command 'switch-to-buffer buffer))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2974 (switch-to-buffer buffer))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2975
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2976 ((memq method '(always-frame maybe-frame))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2977 (cond
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2978 ((and window-system
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2979 (setq win (ido-window-buffer-p buffer))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2980 (or (eq method 'always-frame)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2981 (y-or-n-p "Jump to frame? ")))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2982 (setq newframe (window-frame win))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2983 (if (fboundp 'select-frame-set-input-focus)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2984 (select-frame-set-input-focus newframe)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2985 (raise-frame newframe)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2986 (select-frame newframe)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2987 (if (not ido-xemacs)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2988 (set-mouse-position (selected-frame) (1- (frame-width)) 0)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2989 (select-window win))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2990 (t
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2991 ;; No buffer in other frames...
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2992 (if record
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2993 (ido-record-command 'switch-to-buffer buffer))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2994 (switch-to-buffer buffer)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2995 )))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2996
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2997 ((eq method 'otherwindow)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2998 (if record
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2999 (ido-record-command 'switch-to-buffer buffer))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3000 (switch-to-buffer-other-window buffer))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3001
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3002 ((eq method 'display)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3003 (display-buffer buffer))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3004
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3005 ((eq method 'otherframe)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3006 (progn
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3007 (switch-to-buffer-other-frame buffer)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3008 (if (not ido-xemacs)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3009 (if (fboundp 'select-frame-set-input-focus)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3010 (select-frame-set-input-focus (selected-frame))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3011 (set-mouse-position (selected-frame) (1- (frame-width)) 0)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3012 )))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3013
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3014
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3015 (defun ido-window-buffer-p (buffer)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3016 ;; Return window pointer if BUFFER is visible in another frame.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3017 ;; If BUFFER is visible in the current frame, return nil.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3018 (let ((blist (ido-get-buffers-in-frames 'current)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3019 ;;If the buffer is visible in current frame, return nil
47203
d7ff55da60cd (ido-ignore-item-temp-list): New variable.
Kim F. Storm <storm@cua.dk>
parents: 46631
diff changeset
3020 (if (member buffer blist)
46068
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3021 nil
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3022 ;; maybe in other frame or icon
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3023 (get-buffer-window buffer 0) ; better than 'visible
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3024 )))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3025
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3026
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3027 ;;; ----------- IDONIZED FUNCTIONS ------------
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3028
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3029 ;;;###autoload
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3030 (defun ido-switch-buffer ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3031 "Switch to another buffer.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3032 The buffer is displayed according to `ido-default-buffer-method' -- the
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3033 default is to show it in the same window, unless it is already visible
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3034 in another frame.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3035
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3036 As you type in a string, all of the buffers matching the string are
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3037 displayed if substring-matching is used \(default). Look at
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3038 `ido-enable-prefix' and `ido-toggle-prefix'. When you have found the
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3039 buffer you want, it can then be selected. As you type, most keys have their
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3040 normal keybindings, except for the following: \\<ido-mode-map>
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3041
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3042 RET Select the buffer at the front of the list of matches. If the
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3043 list is empty, possibly prompt to create new buffer.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3044
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3045 \\[ido-select-text] Select the current prompt as the buffer.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3046 If no buffer is found, prompt for a new one.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3047
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3048 \\[ido-next-match] Put the first element at the end of the list.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3049 \\[ido-prev-match] Put the last element at the start of the list.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3050 \\[ido-complete] Complete a common suffix to the current string that
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3051 matches all buffers. If there is only one match, select that buffer.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3052 If there is no common suffix, show a list of all matching buffers
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3053 in a separate window.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3054 \\[ido-edit-input] Edit input string.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3055 \\[ido-fallback-command] Fallback to non-ido version of current command.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3056 \\[ido-toggle-regexp] Toggle regexp searching.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3057 \\[ido-toggle-prefix] Toggle between substring and prefix matching.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3058 \\[ido-toggle-case] Toggle case-sensitive searching of buffer names.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3059 \\[ido-completion-help] Show list of matching buffers in separate window.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3060 \\[ido-enter-find-file] Drop into ido-find-file.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3061 \\[ido-kill-buffer-at-head] Kill buffer at head of buffer list.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3062 \\[ido-toggle-ignore] Toggle ignoring buffers listed in `ido-ignore-buffers'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3063 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3064 (ido-buffer-internal ido-default-buffer-method))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3065
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3066 ;;;###autoload
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3067 (defun ido-switch-buffer-other-window ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3068 "Switch to another buffer and show it in another window.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3069 The buffer name is selected interactively by typing a substring.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3070 For details of keybindings, do `\\[describe-function] ido'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3071 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3072 (ido-buffer-internal 'otherwindow 'switch-to-buffer-other-window))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3073
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3074 ;;;###autoload
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3075 (defun ido-display-buffer ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3076 "Display a buffer in another window but don't select it.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3077 The buffer name is selected interactively by typing a substring.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3078 For details of keybindings, do `\\[describe-function] ido'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3079 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3080 (ido-buffer-internal 'display 'display-buffer))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3081
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3082 ;;;###autoload
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3083 (defun ido-kill-buffer ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3084 "Kill a buffer.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3085 The buffer name is selected interactively by typing a substring.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3086 For details of keybindings, do `\\[describe-function] ido'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3087 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3088 (ido-buffer-internal 'kill 'kill-buffer "Kill buffer: " (buffer-name (current-buffer))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3089
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3090 ;;;###autoload
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3091 (defun ido-insert-buffer ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3092 "Insert contents of a buffer in current buffer after point.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3093 The buffer name is selected interactively by typing a substring.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3094 For details of keybindings, do `\\[describe-function] ido'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3095 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3096 (ido-buffer-internal 'insert 'insert-buffer "Insert buffer: "))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3097
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3098 ;;;###autoload
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3099 (defun ido-switch-buffer-other-frame ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3100 "Switch to another buffer and show it in another frame.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3101 The buffer name is selected interactively by typing a substring.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3102 For details of keybindings, do `\\[describe-function] ido'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3103 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3104 (if ido-mode
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3105 (ido-buffer-internal 'otherframe)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3106 (call-interactively 'switch-to-buffer-other-frame)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3107
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3108 ;;;###autoload
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3109 (defun ido-find-file-in-dir (dir)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3110 "Switch to another file starting from DIR."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3111 (interactive "DDir: ")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3112 (if (not (equal (substring dir -1) "/"))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3113 (setq dir (concat dir "/")))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3114 (ido-file-internal ido-default-file-method nil dir))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3115
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3116 ;;;###autoload
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3117 (defun ido-find-file ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3118 "Edit file with name obtained via minibuffer.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3119 The file is displayed according to `ido-default-file-method' -- the
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3120 default is to show it in the same window, unless it is already
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3121 visible in another frame.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3122
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3123 The file name is selected interactively by typing a substring. As you type
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3124 in a string, all of the filenames matching the string are displayed if
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3125 substring-matching is used \(default). Look at `ido-enable-prefix' and
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3126 `ido-toggle-prefix'. When you have found the filename you want, it can
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3127 then be selected. As you type, most keys have their normal keybindings,
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3128 except for the following: \\<ido-mode-map>
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3129
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3130 RET Select the file at the front of the list of matches. If the
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3131 list is empty, possibly prompt to create new file.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3132
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3133 \\[ido-select-text] Select the current prompt as the buffer or file.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3134 If no buffer or file is found, prompt for a new one.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3135
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3136 \\[ido-next-match] Put the first element at the end of the list.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3137 \\[ido-prev-match] Put the last element at the start of the list.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3138 \\[ido-complete] Complete a common suffix to the current string that
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3139 matches all files. If there is only one match, select that file.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3140 If there is no common suffix, show a list of all matching files
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3141 in a separate window.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3142 \\[ido-edit-input] Edit input string (including path).
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3143 \\[ido-prev-work-directory] or \\[ido-next-work-directory] go to previous/next directory in work directory history.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3144 \\[ido-merge-work-directories] search for file in the work directory history.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3145 \\[ido-forget-work-directory] removes current directory from the work directory history.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3146 \\[ido-prev-work-file] or \\[ido-next-work-file] cycle through the work file history.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3147 \\[ido-wide-find-file] and \\[ido-wide-find-dir] prompts and uses find to locate files or directories.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3148 \\[ido-make-directory] prompts for a directory to create in current directory.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3149 \\[ido-fallback-command] Fallback to non-ido version of current command.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3150 \\[ido-toggle-regexp] Toggle regexp searching.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3151 \\[ido-toggle-prefix] Toggle between substring and prefix matching.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3152 \\[ido-toggle-case] Toggle case-sensitive searching of file names.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3153 \\[ido-toggle-vc] Toggle version control for this file.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3154 \\[ido-toggle-literal] Toggle literal reading of this file.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3155 \\[ido-completion-help] Show list of matching files in separate window.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3156 \\[ido-toggle-ignore] Toggle ignoring files listed in `ido-ignore-files'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3157
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3158 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3159 (ido-file-internal ido-default-file-method))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3160
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3161 ;;;###autoload
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3162 (defun ido-find-file-other-window ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3163 "Switch to another file and show it in another window.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3164 The file name is selected interactively by typing a substring.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3165 For details of keybindings, do `\\[describe-function] ido-find-file'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3166 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3167 (ido-file-internal 'otherwindow 'find-file-other-window))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3168
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3169 ;;;###autoload
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3170 (defun ido-find-alternate-file ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3171 "Switch to another file and show it in another window.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3172 The file name is selected interactively by typing a substring.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3173 For details of keybindings, do `\\[describe-function] ido-find-file'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3174 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3175 (ido-file-internal 'alt-file 'find-alternate-file nil "Find alternate file: "))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3176
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3177 ;;;###autoload
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3178 (defun ido-find-file-read-only ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3179 "Edit file read-only with name obtained via minibuffer.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3180 The file name is selected interactively by typing a substring.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3181 For details of keybindings, do `\\[describe-function] ido-find-file'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3182 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3183 (ido-file-internal 'read-only 'find-file-read-only nil "Find file read-only: "))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3184
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3185 ;;;###autoload
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3186 (defun ido-find-file-read-only-other-window ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3187 "Edit file read-only in other window with name obtained via minibuffer.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3188 The file name is selected interactively by typing a substring.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3189 For details of keybindings, do `\\[describe-function] ido-find-file'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3190 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3191 (ido-file-internal 'read-only 'find-file-read-only-other-window nil "Find file read-only other window: "))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3192
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3193 ;;;###autoload
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3194 (defun ido-find-file-read-only-other-frame ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3195 "Edit file read-only in other frame with name obtained via minibuffer.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3196 The file name is selected interactively by typing a substring.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3197 For details of keybindings, do `\\[describe-function] ido-find-file'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3198 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3199 (ido-file-internal 'read-only 'find-file-read-only-other-frame nil "Find file read-only other frame: "))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3200
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3201 ;;;###autoload
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3202 (defun ido-display-file ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3203 "Display a file in another window but don't select it.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3204 The file name is selected interactively by typing a substring.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3205 For details of keybindings, do `\\[describe-function] ido-find-file'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3206 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3207 (ido-file-internal 'display))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3208
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3209 ;;;###autoload
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3210 (defun ido-find-file-other-frame ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3211 "Switch to another file and show it in another frame.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3212 The file name is selected interactively by typing a substring.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3213 For details of keybindings, do `\\[describe-function] ido-find-file'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3214 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3215 (ido-file-internal 'otherframe 'find-file-other-frame))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3216
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3217 ;;;###autoload
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3218 (defun ido-write-file ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3219 "Write current buffer to a file.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3220 The file name is selected interactively by typing a substring.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3221 For details of keybindings, do `\\[describe-function] ido-find-file'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3222 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3223 (let ((ido-process-ignore-lists t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3224 (ido-work-directory-match-only nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3225 (ido-ignore-files (cons "[^/]\\'" ido-ignore-files))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3226 (ido-report-no-match nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3227 (ido-auto-merge-work-directories-length -1))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3228 (ido-file-internal 'write 'write-file nil "Write file: ")))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3229
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3230 ;;;###autoload
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3231 (defun ido-insert-file ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3232 "Insert contents of file in current buffer.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3233 The file name is selected interactively by typing a substring.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3234 For details of keybindings, do `\\[describe-function] ido-find-file'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3235 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3236 (ido-file-internal 'insert 'insert-file nil "Insert file: "))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3237
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3238 ;;;###autoload
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3239 (defun ido-dired ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3240 "Call dired the ido way.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3241 The directory is selected interactively by typing a substring.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3242 For details of keybindings, do `\\[describe-function] ido-find-file'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3243 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3244 (let ((ido-report-no-match nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3245 (ido-auto-merge-work-directories-length -1))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3246 (ido-file-internal 'dired 'dired nil "Dired: " 'dir)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3247
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3248 (defun ido-list-directory ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3249 "Call list-directory the ido way.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3250 The directory is selected interactively by typing a substring.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3251 For details of keybindings, do `\\[describe-function] ido-find-file'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3252 (interactive)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3253 (let ((ido-report-no-match nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3254 (ido-auto-merge-work-directories-length -1))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3255 (ido-file-internal 'list-directory 'list-directory nil "List directory: " 'dir)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3256
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3257 ;;; XEmacs hack for showing default buffer
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3258
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3259 ;; The first time we enter the minibuffer, Emacs puts up the default
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3260 ;; buffer to switch to, but XEmacs doesn't -- presumably there is a
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3261 ;; subtle difference in the two versions of post-command-hook. The
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3262 ;; default is shown for both whenever we delete all of our text
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3263 ;; though, indicating its just a problem the first time we enter the
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3264 ;; function. To solve this, we use another entry hook for emacs to
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3265 ;; show the default the first time we enter the minibuffer.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3266
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3267
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3268 ;;; ICOMPLETE TYPE CODE
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3269
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3270 (defun ido-initiate-auto-merge (buffer)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3271 (ido-trace "\n*merge timeout*" buffer)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3272 (setq ido-auto-merge-timer nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3273 (when (and (buffer-live-p buffer)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3274 (= ido-use-mycompletion-depth (minibuffer-depth))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3275 (boundp 'ido-eoinput) ido-eoinput)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3276 (let ((contents (buffer-substring-no-properties (minibuffer-prompt-end) ido-eoinput)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3277 (ido-trace "request merge")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3278 (setq ido-use-merged-list 'auto
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3279 ido-text-init contents
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3280 ido-rotate-temp t
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3281 ido-exit 'refresh)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3282 (save-excursion
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3283 (set-buffer buffer)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3284 (ido-tidy))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3285 (throw 'ido contents))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3286
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3287 (defun ido-exhibit ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3288 "Post command hook for `ido'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3289 ;; Find matching files and display a list in the minibuffer.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3290 ;; Copied from `icomplete-exhibit' with two changes:
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3291 ;; 1. It prints a default file name when there is no text yet entered.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3292 ;; 2. It calls my completion routine rather than the standard completion.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3293
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3294 (if (= ido-use-mycompletion-depth (minibuffer-depth))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3295 (let ((contents (buffer-substring-no-properties (minibuffer-prompt-end) (point-max)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3296 (buffer-undo-list t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3297 try-single-dir-match)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3298
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3299 (ido-trace "\nexhibit" this-command)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3300 (ido-trace "dir" ido-current-directory)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3301 (ido-trace "contents" contents)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3302 (ido-trace "list" ido-cur-list)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3303 (ido-trace "matches" ido-matches)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3304 (ido-trace "rescan" ido-rescan)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3305
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3306 (save-excursion
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3307 (goto-char (point-max))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3308 ;; Register the end of input, so we know where the extra stuff (match-status info) begins:
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3309 (if (not (boundp 'ido-eoinput))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3310 ;; In case it got wiped out by major mode business:
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3311 (make-local-variable 'ido-eoinput))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3312 (setq ido-eoinput (point))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3313
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3314 ;; Handle explicit directory changes
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3315 (and
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3316 (memq ido-cur-item '(file dir))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3317 (> (length contents) 1)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3318 (cond
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3319 ((ido-final-slash contents) ;; xxx/
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3320 (ido-trace "final slash" contents)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3321 (cond
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3322 ((string-equal contents "~/")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3323 (ido-set-current-home)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3324 t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3325 ((string-equal contents "../")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3326 (ido-up-directory t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3327 t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3328 ((string-equal contents "./")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3329 t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3330 ((string-match contents "\\`~[a-zA-Z0-9]/\\'")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3331 (ido-set-current-home contents)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3332 t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3333 ((string-match "[$][A-Za-z0-9_]+/\\'" contents)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3334 (let ((exp (condition-case ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3335 (expand-file-name
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3336 (substitute-in-file-name (substring contents 0 -1))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3337 ido-current-directory)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3338 (error nil))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3339 (ido-trace contents exp)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3340 (if (and exp (file-directory-p exp))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3341 (progn
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3342 (ido-set-current-directory (file-name-directory exp))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3343 (setq ido-text-init (file-name-nondirectory exp))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3344 t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3345 nil)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3346 ((and (memq system-type '(windows-nt ms-dos))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3347 (string-equal (substring contents 1) ":/"))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3348 (ido-set-current-directory (file-name-directory contents))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3349 t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3350 ((string-equal (substring contents -2 -1) "/")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3351 (ido-set-current-directory
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3352 (if (memq system-type '(windows-nt ms-dos))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3353 (expand-file-name "/" ido-current-directory)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3354 "/"))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3355 t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3356 (t
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3357 (setq try-single-dir-match t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3358 nil)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3359
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3360 ((and (string-equal ido-current-directory "/")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3361 (string-match "..:\\'" contents)) ;; Ange-ftp
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3362 (ido-set-current-directory "/" contents)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3363 (when (ido-is-slow-ftp-host)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3364 (setq ido-exit 'fallback)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3365 (exit-minibuffer))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3366 t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3367
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3368 ((and (string-equal (substring contents -2 -1) "/")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3369 (not (string-match "[$]" contents)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3370 (ido-set-current-directory
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3371 (cond
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3372 ((= (length contents) 2)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3373 "/")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3374 (ido-matches
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3375 (concat ido-current-directory (car ido-matches)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3376 (t
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3377 (concat ido-current-directory (substring contents 0 -1)))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3378 (setq ido-text-init (substring contents -1))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3379 t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3380
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3381 ((and (not ido-use-merged-list)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3382 (not (ido-final-slash contents))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3383 (eq ido-try-merged-list t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3384 (numberp ido-auto-merge-work-directories-length)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3385 (> ido-auto-merge-work-directories-length 0)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3386 (= (length contents) ido-auto-merge-work-directories-length)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3387 (not (and ido-auto-merge-inhibit-characters-regexp
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3388 (string-match ido-auto-merge-inhibit-characters-regexp contents)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3389 (not (input-pending-p)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3390 (setq ido-use-merged-list 'auto
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3391 ido-text-init contents
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3392 ido-rotate-temp t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3393 t))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3394 (progn
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3395 (ido-trace "refresh on /" ido-text-init)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3396 (setq ido-exit 'refresh)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3397 (exit-minibuffer)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3398
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3399 ;; Update the list of matches
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3400 (setq ido-text contents)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3401 (ido-set-matches)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3402 (ido-trace "new " ido-matches)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3403
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3404 (when (and ido-enter-single-matching-directory
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3405 ido-matches
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3406 (null (cdr ido-matches))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3407 (ido-final-slash (car ido-matches))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3408 (or try-single-dir-match
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3409 (eq ido-enter-single-matching-directory t)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3410 (ido-trace "single match" (car ido-matches))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3411 (ido-set-current-directory
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3412 (concat ido-current-directory (car ido-matches)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3413 (setq ido-exit 'refresh)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3414 (exit-minibuffer))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3415
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3416 (when (and (not ido-matches)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3417 ; ido-rescan
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3418 ido-process-ignore-lists
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3419 ido-ignored-list)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3420 (let ((ido-process-ignore-lists nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3421 (ido-rotate ido-rotate)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3422 (ido-cur-list ido-ignored-list))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3423 (ido-trace "try all" ido-ignored-list)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3424 (ido-set-matches))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3425 (when ido-matches
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3426 (ido-trace "found " ido-matches)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3427 (setq ido-rescan t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3428 (setq ido-process-ignore-lists-inhibit t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3429 (setq ido-text-init ido-text)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3430 (setq ido-exit 'refresh)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3431 (exit-minibuffer)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3432
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3433 (when (and
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3434 ido-rescan
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3435 (not ido-matches)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3436 (memq ido-cur-item '(file dir))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3437 (not (ido-is-root-directory))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3438 (> (length contents) 1)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3439 (not (string-match "[$]" contents)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3440 (ido-trace "merge?")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3441 (if ido-use-merged-list
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3442 (ido-undo-merge-work-directory contents nil)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3443 (when (and (eq ido-try-merged-list t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3444 (numberp ido-auto-merge-work-directories-length)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3445 (= ido-auto-merge-work-directories-length 0)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3446 (not (and ido-auto-merge-inhibit-characters-regexp
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3447 (string-match ido-auto-merge-inhibit-characters-regexp contents)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3448 (not (input-pending-p)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3449 (ido-trace "\n*start timer*")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3450 (setq ido-auto-merge-timer
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3451 (run-with-timer ido-auto-merge-delay-time nil 'ido-initiate-auto-merge (current-buffer))))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3452
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3453 (setq ido-rescan t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3454
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3455 (if (and ido-use-merged-list
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3456 ido-matches
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3457 (not (string-equal (car (cdr (car ido-matches))) ido-current-directory)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3458 (progn
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3459 (ido-set-current-directory (car (cdr (car ido-matches))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3460 (setq ido-use-merged-list t
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3461 ido-exit 'keep
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3462 ido-text-init ido-text)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3463 (exit-minibuffer)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3464
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3465 ;; Insert the match-status information:
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3466 (ido-set-common-completion)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3467 (let ((inf (ido-completions
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3468 contents
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3469 minibuffer-completion-table
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3470 minibuffer-completion-predicate
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3471 (not minibuffer-completion-confirm))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3472 (ido-trace "inf" inf)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3473 (insert inf))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3474
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3475 ))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3476
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3477 (defun ido-completions (name candidates predicate require-match)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3478 ;; Return the string that is displayed after the user's text.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3479 ;; Modified from `icomplete-completions'.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3480
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3481 (let* ((comps ido-matches)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3482 (ind (and (consp (car comps)) (> (length (cdr (car comps))) 1)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3483 ido-merged-indicator))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3484 first)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3485
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3486 (if (and ind ido-use-faces)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3487 (put-text-property 0 1 'face 'ido-indicator-face ind))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3488
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3489 (if (and ido-use-faces comps)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3490 (let* ((fn (ido-name (car comps)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3491 (ln (length fn)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3492 (setq first (format "%s" fn))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3493 (put-text-property 0 ln 'face
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3494 (if (= (length comps) 1)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3495 'ido-only-match-face
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3496 'ido-first-match-face)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3497 first)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3498 (if ind (setq first (concat first ind)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3499 (setq comps (cons first (cdr comps)))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3500
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3501 (cond ((null comps)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3502 (if ido-report-no-match
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3503 (nth 6 ido-decorations) ;; [No Match]
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3504 ""))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3505
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3506 ((null (cdr comps)) ;one match
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3507 (concat (if (> (length (ido-name (car comps))) (length name))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3508 ;; when there is one match, show the matching file name in full
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3509 (concat (nth 4 ido-decorations) ;; [ ... ]
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3510 (ido-name (car comps))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3511 (nth 5 ido-decorations))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3512 "")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3513 (if (not ido-use-faces) (nth 7 ido-decorations)))) ;; [Matched]
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3514 (t ;multiple matches
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3515 (let* ((items (if (> ido-max-prospects 0) (1+ ido-max-prospects) 999))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3516 (alternatives
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3517 (apply
46256
88bc5ce0674c (ido-find-common-substring): Return substring instead of t.
Kim F. Storm <storm@cua.dk>
parents: 46231
diff changeset
3518 #'concat
46068
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3519 (cdr (apply
46256
88bc5ce0674c (ido-find-common-substring): Return substring instead of t.
Kim F. Storm <storm@cua.dk>
parents: 46231
diff changeset
3520 #'nconc
88bc5ce0674c (ido-find-common-substring): Return substring instead of t.
Kim F. Storm <storm@cua.dk>
parents: 46231
diff changeset
3521 (mapcar
88bc5ce0674c (ido-find-common-substring): Return substring instead of t.
Kim F. Storm <storm@cua.dk>
parents: 46231
diff changeset
3522 (lambda (com)
88bc5ce0674c (ido-find-common-substring): Return substring instead of t.
Kim F. Storm <storm@cua.dk>
parents: 46231
diff changeset
3523 (setq com (ido-name com))
88bc5ce0674c (ido-find-common-substring): Return substring instead of t.
Kim F. Storm <storm@cua.dk>
parents: 46231
diff changeset
3524 (setq items (1- items))
88bc5ce0674c (ido-find-common-substring): Return substring instead of t.
Kim F. Storm <storm@cua.dk>
parents: 46231
diff changeset
3525 (cond
88bc5ce0674c (ido-find-common-substring): Return substring instead of t.
Kim F. Storm <storm@cua.dk>
parents: 46231
diff changeset
3526 ((< items 0) ())
88bc5ce0674c (ido-find-common-substring): Return substring instead of t.
Kim F. Storm <storm@cua.dk>
parents: 46231
diff changeset
3527 ((= items 0) (list (nth 3 ido-decorations))) ; " | ..."
88bc5ce0674c (ido-find-common-substring): Return substring instead of t.
Kim F. Storm <storm@cua.dk>
parents: 46231
diff changeset
3528 (t
88bc5ce0674c (ido-find-common-substring): Return substring instead of t.
Kim F. Storm <storm@cua.dk>
parents: 46231
diff changeset
3529 (list (or ido-separator (nth 2 ido-decorations)) ; " | "
88bc5ce0674c (ido-find-common-substring): Return substring instead of t.
Kim F. Storm <storm@cua.dk>
parents: 46231
diff changeset
3530 (let ((str (substring com 0)))
88bc5ce0674c (ido-find-common-substring): Return substring instead of t.
Kim F. Storm <storm@cua.dk>
parents: 46231
diff changeset
3531 (if (and ido-use-faces
88bc5ce0674c (ido-find-common-substring): Return substring instead of t.
Kim F. Storm <storm@cua.dk>
parents: 46231
diff changeset
3532 (not (string= str first))
88bc5ce0674c (ido-find-common-substring): Return substring instead of t.
Kim F. Storm <storm@cua.dk>
parents: 46231
diff changeset
3533 (ido-final-slash str))
88bc5ce0674c (ido-find-common-substring): Return substring instead of t.
Kim F. Storm <storm@cua.dk>
parents: 46231
diff changeset
3534 (put-text-property 0 (length str) 'face 'ido-subdir-face str))
88bc5ce0674c (ido-find-common-substring): Return substring instead of t.
Kim F. Storm <storm@cua.dk>
parents: 46231
diff changeset
3535 str)))))
88bc5ce0674c (ido-find-common-substring): Return substring instead of t.
Kim F. Storm <storm@cua.dk>
parents: 46231
diff changeset
3536 comps))))))
46068
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3537
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3538 (concat
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3539 ;; put in common completion item -- what you get by pressing tab
46256
88bc5ce0674c (ido-find-common-substring): Return substring instead of t.
Kim F. Storm <storm@cua.dk>
parents: 46231
diff changeset
3540 (if (and (stringp ido-common-match-string)
88bc5ce0674c (ido-find-common-substring): Return substring instead of t.
Kim F. Storm <storm@cua.dk>
parents: 46231
diff changeset
3541 (> (length ido-common-match-string) (length name)))
46068
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3542 (concat (nth 4 ido-decorations) ;; [ ... ]
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3543 (substring ido-common-match-string (length name))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3544 (nth 5 ido-decorations)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3545 ;; list all alternatives
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3546 (nth 0 ido-decorations) ;; { ... }
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3547 alternatives
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3548 (nth 1 ido-decorations)))))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3549
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3550 (defun ido-minibuffer-setup ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3551 "Minibuffer setup hook for `ido'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3552 ;; Copied from `icomplete-minibuffer-setup-hook'.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3553 (when (and (boundp 'ido-completing-read)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3554 (or ido-xemacs (= ido-use-mycompletion-depth (minibuffer-depth))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3555 (add-hook 'pre-command-hook 'ido-tidy nil t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3556 (add-hook 'post-command-hook 'ido-exhibit nil t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3557 (setq cua-inhibit-cua-keys t)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3558 (when ido-xemacs
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3559 (ido-exhibit)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3560 (goto-char (point-min)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3561 (run-hooks 'ido-minibuffer-setup-hook)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3562
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3563 (defun ido-tidy ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3564 "Pre command hook for `ido'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3565 ;; Remove completions display, if any, prior to new user input.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3566 ;; Copied from `icomplete-tidy'."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3567
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3568 (when ido-auto-merge-timer
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3569 (ido-trace "\n*cancel timer*" this-command)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3570 (cancel-timer ido-auto-merge-timer)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3571 (setq ido-auto-merge-timer nil))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3572
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3573 (if (and (boundp 'ido-use-mycompletion-depth)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3574 (= ido-use-mycompletion-depth (minibuffer-depth)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3575 (if (and (boundp 'ido-eoinput)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3576 ido-eoinput)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3577
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3578 (if (> ido-eoinput (point-max))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3579 ;; Oops, got rug pulled out from under us - reinit:
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3580 (setq ido-eoinput (point-max))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3581 (let ((buffer-undo-list t))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3582 (delete-region ido-eoinput (point-max))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3583
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3584 ;; Reestablish the local variable 'cause minibuffer-setup is weird:
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3585 (make-local-variable 'ido-eoinput)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3586 (setq ido-eoinput 1))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3587
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3588 (defun ido-summary-buffers-to-end ()
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3589 ;; Move the summaries to the end of the buffer list.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3590 ;; This is an example function which can be hooked on to
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3591 ;; `ido-make-buffer-list-hook'. Any buffer matching the regexps
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3592 ;; `Summary' or `output\*$'are put to the end of the list.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3593 (let ((summaries (delq nil (mapcar
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3594 (lambda (x)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3595 (if (or
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3596 (string-match "Summary" x)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3597 (string-match "output\\*\\'" x))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3598 x))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3599 ido-temp-list))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3600 (ido-to-end summaries)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3601
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3602 ;;; Helper functions for other programs
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3603
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3604 ;;;###autoload
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3605 (defun ido-read-file-name (prompt &optional dir default-filename mustmatch initial predicate)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3606 "Read file name, prompting with PROMPT and completing in directory DIR.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3607 See `read-file-name' for additional parameters."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3608 (message "%S %S %S %S" this-command ido-read-file-name-non-ido
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3609 predicate (memq this-command ido-read-file-name-non-ido))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3610 (cond
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3611 ((or (eq predicate 'file-directory-p)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3612 (memq this-command ido-read-file-name-as-directory-commands))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3613 (ido-read-directory-name prompt dir default-filename mustmatch initial))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3614 ((and (not (memq this-command ido-read-file-name-non-ido))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3615 (or (null predicate) (eq predicate 'file-exists-p)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3616 (message "gotit")
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3617 (let (filename
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3618 ido-saved-vc-mt
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3619 (vc-master-templates (and (boundp 'vc-master-templates) vc-master-templates))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3620 (ido-current-directory (expand-file-name (or dir default-directory)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3621 (ido-work-directory-index -1)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3622 (ido-work-file-index -1)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3623 (ido-find-literal nil))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3624 (setq filename
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3625 (ido-read-internal 'file prompt 'ido-file-history default-filename mustmatch initial))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3626 (if filename
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3627 (concat ido-current-directory filename))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3628 (t
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3629 (let ((read-file-name-function nil))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3630 (read-file-name prompt dir default-filename mustmatch initial predicate)))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3631
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3632 ;;;###autoload
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3633 (defun ido-read-directory-name (prompt &optional dir default-dirname mustmatch initial)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3634 "Read directory name, prompting with PROMPT and completing in directory DIR.
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3635 See `read-file-name' for additional parameters."
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3636 (let (filename
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3637 ido-saved-vc-mt
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3638 (ido-current-directory (expand-file-name (or dir default-directory)))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3639 (ido-work-directory-index -1)
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3640 (ido-work-file-index -1))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3641 (setq filename
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3642 (ido-read-internal 'dir prompt 'ido-file-history default-dirname mustmatch initial))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3643 (if filename
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3644 (if (and (stringp filename) (string-equal filename "."))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3645 ido-current-directory
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3646 (concat ido-current-directory filename)))))
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3647
5769eed50ff7 New file.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
3648 ;;; ido.el ends here