X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/e290d997cdc9651538831525670b1c197b30380e..f67b40b3d890918f1e856a5052f86c3c724f0658:/lisp/ido.el diff --git a/lisp/ido.el b/lisp/ido.el index 9b1f6a634a..41761fd20e 100644 --- a/lisp/ido.el +++ b/lisp/ido.el @@ -1,7 +1,7 @@ ;;; ido.el --- interactively do things with buffers and files. ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, -;; 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +;; 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. ;; Author: Kim F. Storm ;; Based on: iswitchb by Stephen Eglen @@ -9,10 +9,10 @@ ;; This file is part of GNU Emacs. -;; GNU Emacs is free software; you can redistribute it and/or modify +;; GNU Emacs is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation; either version 3, or (at your option) -;; any later version. +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. ;; GNU Emacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -20,9 +20,7 @@ ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. +;; along with GNU Emacs. If not, see . ;;; Commentary: @@ -436,17 +434,16 @@ in merged file and directory lists." :type '(repeat (choice regexp function)) :group 'ido) -;;; Examples for setting the value of ido-ignore-buffers -;(defun ido-ignore-c-mode (name) -; "Ignore all c mode buffers -- example function for ido." -; (save-excursion -; (set-buffer name) -; (string-match "^C$" mode-name))) -; -;(setq ido-ignore-buffers '("^ " ido-ignore-c-mode)) +;; Examples for setting the value of ido-ignore-buffers +;;(defun ido-ignore-c-mode (name) +;; "Ignore all c mode buffers -- example function for ido." +;; (with-current-buffer name +;; (derived-mode-p 'c-mode))) +;; +;;(setq ido-ignore-buffers '("^ " ido-ignore-c-mode)) -;;; Examples for setting the value of ido-ignore-files -;(setq ido-ignore-files '("^ " "\\.c$" "\\.h$")) +;; Examples for setting the value of ido-ignore-files +;;(setq ido-ignore-files '("^ " "\\.c\\'" "\\.h\\'")) (defcustom ido-default-file-method 'raise-frame "*How to visit a new file when using `ido-find-file'. @@ -1309,6 +1306,7 @@ Value is an integer which is number of chars to right of prompt.") (unwind-protect (with-current-buffer buf (erase-buffer) + (insert ";;; -*- coding: utf-8 -*-\n") (setq buffer-file-coding-system 'utf-8) (ido-pp 'ido-last-directory-list) (ido-pp 'ido-work-directory-list) @@ -1317,7 +1315,7 @@ Value is an integer which is number of chars to right of prompt.") (if (listp ido-unc-hosts-cache) (ido-pp 'ido-unc-hosts-cache) (insert "\n;; ----- ido-unc-hosts-cache -----\nt\n")) - (insert "\n;; Local Variables:\n;; coding: utf-8\n;; End:\n") + (insert "\n") (write-file ido-save-directory-list-file nil)) (kill-buffer buf))))) @@ -2281,9 +2279,10 @@ If cursor is not at the end of the user input, move to end of input." filename t)) ((and ido-use-filename-at-point - (setq fn (if (eq ido-use-filename-at-point 'guess) - (with-no-warnings (ffap-guesser)) - (ffap-string-at-point))) + (setq fn (with-no-warnings + (if (eq ido-use-filename-at-point 'guess) + (ffap-guesser) + (ffap-string-at-point)))) (not (string-match "^http:/" fn)) (setq d (file-name-directory fn)) (file-directory-p d)) @@ -2536,17 +2535,18 @@ If no merge has yet taken place, toggle automatic merging option." ;;; Magic C-f -(defun ido-magic-forward-char () +(defun ido-magic-forward-char (arg) "Move forward in user input or perform magic action. If no user input is present, or at end of input, perform magic actions: C-x C-b ... C-f switch to ido-find-file. C-x C-f ... C-f fallback to non-ido find-file. C-x C-d ... C-f fallback to non-ido brief dired. C-x d ... C-f fallback to non-ido dired." - (interactive) + (interactive "P") (cond - ((not (eobp)) - (forward-char 1)) + ((or arg (not (eobp))) + (forward-char (min (prefix-numeric-value arg) + (- (point-max) (point))))) ((memq ido-cur-item '(file dir)) (ido-fallback-command)) (ido-context-switch-command @@ -2556,17 +2556,19 @@ C-x d ... C-f fallback to non-ido dired." ;;; Magic C-b -(defun ido-magic-backward-char () +(defun ido-magic-backward-char (arg) "Move backward in user input or perform magic action. If no user input is present, or at start of input, perform magic actions: C-x C-f C-b switch to `ido-switch-buffer'. C-x C-d C-b switch to `ido-switch-buffer'. C-x d C-b switch to `ido-switch-buffer'. C-x C-b C-b fallback to non-ido `switch-to-buffer'." - (interactive) + (interactive "P") (cond - ((> (point) (minibuffer-prompt-end)) - (forward-char -1)) + ((or arg (> (point) (minibuffer-prompt-end))) + (forward-char + (- (min (prefix-numeric-value arg) + (- (point) (minibuffer-prompt-end)))))) ((eq last-command this-command) (when (and (memq ido-cur-item '(file dir)) (not (bobp))) @@ -2580,14 +2582,15 @@ C-x C-b C-b fallback to non-ido `switch-to-buffer'." ;;; Magic C-d -(defun ido-magic-delete-char () +(defun ido-magic-delete-char (arg) "Delete following char in user input or perform magic action. If at end of user input, perform magic actions: C-x C-f ... C-d enter dired on current directory." - (interactive) + (interactive "P") (cond - ((not (eobp)) - (delete-char 1)) + ((or arg (not (eobp))) + (delete-char (min (prefix-numeric-value arg) + (- (point-max) (point))))) (ido-context-switch-command nil) ((memq ido-cur-item '(file dir)) @@ -3355,7 +3358,7 @@ for first matching file." (defun ido-to-end (items) ;; Move the elements from ITEMS to the end of `ido-temp-list' - (mapcar + (mapc (lambda (elem) (setq ido-temp-list (delq elem ido-temp-list))) items) @@ -3363,6 +3366,8 @@ for first matching file." (nconc ido-temp-list items) (setq ido-temp-list items))) +(declare-function tramp-tramp-file-p "tramp" (name)) + (defun ido-file-name-all-completions-1 (dir) (cond ((ido-nonreadable-directory-p dir) '()) @@ -3370,24 +3375,25 @@ for first matching file." ;; Caller must have done that if necessary. ((and ido-enable-tramp-completion - (or (fboundp 'tramp-completion-mode) + (or (fboundp 'tramp-completion-mode-p) (require 'tramp nil t)) (string-match "\\`/[^/]+[:@]\\'" dir)) ;; Strip method:user@host: part of tramp completions. ;; Tramp completions do not include leading slash. - (let ((len (1- (length dir))) - (compl - (or (file-name-all-completions "" dir) - ;; work around bug in ange-ftp. - ;; /ftp:user@host: => nil - ;; /ftp:user@host:./ => ok - (and - (not (string= "/ftp:" dir)) - (tramp-tramp-file-p dir) - (fboundp 'tramp-ftp-file-name-p) - (funcall 'tramp-ftp-file-name-p dir) - (string-match ":\\'" dir) - (file-name-all-completions "" (concat dir "./")))))) + (let* ((len (1- (length dir))) + (tramp-completion-mode t) + (compl + (or (file-name-all-completions "" dir) + ;; work around bug in ange-ftp. + ;; /ftp:user@host: => nil + ;; /ftp:user@host:./ => ok + (and + (not (string= "/ftp:" dir)) + (tramp-tramp-file-p dir) + (fboundp 'tramp-ftp-file-name-p) + (funcall 'tramp-ftp-file-name-p dir) + (string-match ":\\'" dir) + (file-name-all-completions "" (concat dir "./")))))) (if (and compl (> (length (car compl)) len) (string= (substring (car compl) 0 len) (substring dir 1))) @@ -3604,7 +3610,7 @@ for first matching file." full-matches suffix-matches prefix-matches matches) (setq ido-incomplete-regexp nil) (condition-case error - (mapcar + (mapc (lambda (item) (let ((name (ido-name item))) (if (and (or non-prefix-dot @@ -3649,7 +3655,7 @@ for first matching file." (setq re (mapconcat #'regexp-quote (split-string ido-text "") ".*")) (if ido-enable-prefix (setq re (concat "\\`" re))) - (mapcar + (mapc (lambda (item) (let ((name (ido-name item))) (if (string-match re name) @@ -4650,5 +4656,5 @@ DEF, if non-nil, is the default value." (ido-read-internal 'list prompt hist def require-match initial-input))) -;;; arch-tag: b63a3500-1735-41bd-8a01-05373f0864da +;; arch-tag: b63a3500-1735-41bd-8a01-05373f0864da ;;; ido.el ends here