emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: IDO doesn't honor confirm-nonexistent-file-or-buffer


From: Kim F. Storm
Subject: Re: IDO doesn't honor confirm-nonexistent-file-or-buffer
Date: Fri, 08 May 2009 12:25:41 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.0.92 (gnu/linux)

Tassilo Horn <address@hidden> writes:

>> Does this patch give the desired result?
>
> Basically yes, but I like the standard visual feedback and usage much
> better, e.g. no y-or-n-p but a [confirm] after the minibuffer input and
> another RET finds the nonexistent file or buffer.  This is not
> disturbing at all, while the y-or-n-p is: No matter my decision, I
> always have to move fingers to either y or n.

I see - and agree.  Try the following patch instead:

*** ido.el.~1.155.~     2009-01-05 16:30:50.000000000 +0100
--- ido.el      2009-05-08 12:22:33.000000000 +0200
***************
*** 768,774 ****
    :type '(choice string (const nil))
    :group 'ido)
  
! (defcustom ido-decorations '( "{" "}" " | " " | ..." "[" "]" " [No match]" " 
[Matched]" " [Not readable]" " [Too big]")
    "List of strings used by ido to display the alternatives in the minibuffer.
  There are 10 elements in this list:
  1st and 2nd elements are used as brackets around the prospect list,
--- 768,774 ----
    :type '(choice string (const nil))
    :group 'ido)
  
! (defcustom ido-decorations '( "{" "}" " | " " | ..." "[" "]" " [No match]" " 
[Matched]" " [Not readable]" " [Too big]" " [Confirm]")
    "List of strings used by ido to display the alternatives in the minibuffer.
  There are 10 elements in this list:
  1st and 2nd elements are used as brackets around the prospect list,
***************
*** 779,785 ****
  7th element is the string displayed when there are no matches, and
  8th element is displayed if there is a single match (and faces are not used),
  9th element is displayed when the current directory is non-readable,
! 10th element is displayed when directory exceeds `ido-max-directory-size'."
    :type '(repeat string)
    :group 'ido)
  
--- 779,786 ----
  7th element is the string displayed when there are no matches, and
  8th element is displayed if there is a single match (and faces are not used),
  9th element is displayed when the current directory is non-readable,
! 10th element is displayed when directory exceeds `ido-max-directory-size',
! 11th element is displayed to confirm creating new file or buffer."
    :type '(repeat string)
    :group 'ido)
  
***************
*** 1082,1087 ****
--- 1083,1091 ----
  ;; Non-nil if matching file must be selected.
  (defvar ido-require-match)
  
+ ;; Non-nil if we should add [confirm] to prompt
+ (defvar ido-show-confirm-message)
+ 
  ;; Stores a temporary version of the file list being created.
  (defvar ido-temp-list)
  
***************
*** 1803,1812 ****
  DEFAULT if given is the default item to start with.
  If REQUIRE-MATCH is non-nil, an existing file must be selected.
  If INITIAL is non-nil, it specifies the initial input string."
-   ;; Ido does not implement the `confirm' and
-   ;; `confirm-after-completion' values of REQUIRE-MATCH.
-   (if (memq require-match '(confirm confirm-after-completion))
-       (setq require-match nil))
    (let
        ((ido-cur-item item)
         (ido-entry-buffer (current-buffer))
--- 1807,1812 ----
***************
*** 1829,1834 ****
--- 1829,1835 ----
         (ido-case-fold ido-case-fold)
         (ido-enable-prefix ido-enable-prefix)
         (ido-enable-regexp ido-enable-regexp)
+        (ido-show-confirm-message nil)
         )
  
      (ido-setup-completion-map)
***************
*** 2067,2072 ****
--- 2068,2074 ----
  
         ;; Handling the require-match must be done in a better way.
         ((and require-match
+            (not (memq require-match '(confirm confirm-after-completion)))
             (not (if ido-directory-too-big
                      (file-exists-p (concat ido-current-directory 
ido-final-text))
                    (ido-existing-item-p))))
***************
*** 2158,2164 ****
           (ido-current-directory nil)
           (ido-directory-nonreadable nil)
           (ido-directory-too-big nil)
!          (buf (ido-read-internal 'buffer (or prompt "Buffer: ") 
'ido-buffer-history default nil initial)))
  
        ;; Choose the buffer name: either the text typed in, or the head
        ;; of the list of matches
--- 2160,2168 ----
           (ido-current-directory nil)
           (ido-directory-nonreadable nil)
           (ido-directory-too-big nil)
!          (require-match (confirm-nonexistent-file-or-buffer))
!          (buf (ido-read-internal 'buffer (or prompt "Buffer: ") 
'ido-buffer-history default
!                                  require-match initial)))
  
        ;; Choose the buffer name: either the text typed in, or the head
        ;; of the list of matches
***************
*** 2195,2204 ****
          (ido-visit-buffer buf method t)))
  
         ;; buffer doesn't exist
!        ((eq ido-create-new-buffer 'never)
        (message "No buffer matching `%s'" buf))
  
         ((and (eq ido-create-new-buffer 'prompt)
             (not (y-or-n-p (format "No buffer matching `%s', create one? " 
buf))))
        nil)
  
--- 2199,2210 ----
          (ido-visit-buffer buf method t)))
  
         ;; buffer doesn't exist
!        ((and (eq ido-create-new-buffer 'never)
!            (null require-match))
        (message "No buffer matching `%s'" buf))
  
         ((and (eq ido-create-new-buffer 'prompt)
+            (null require-match)
             (not (y-or-n-p (format "No buffer matching `%s', create one? " 
buf))))
        nil)
  
***************
*** 2307,2313 ****
                                            (or prompt "Find file: ")
                                            'ido-file-history
                                            (and (eq method 'alt-file) 
buffer-file-name)
!                                           nil initial))))
  
        ;; Choose the file name: either the text typed in, or the head
        ;; of the list of matches
--- 2313,2319 ----
                                            (or prompt "Find file: ")
                                            'ido-file-history
                                            (and (eq method 'alt-file) 
buffer-file-name)
!                                           
(confirm-nonexistent-file-or-buffer) initial))))
  
        ;; Choose the file name: either the text typed in, or the head
        ;; of the list of matches
***************
*** 2681,2686 ****
--- 2687,2698 ----
    "Exit minibuffer, but make sure we have a match if one is needed."
    (interactive)
    (if (and (or (not ido-require-match)
+              (if (memq ido-require-match '(confirm confirm-after-completion))
+                  (if (or (eq ido-cur-item 'dir)
+                          (eq last-command this-command))
+                      t
+                    (setq ido-show-confirm-message t)
+                    nil))
                 (ido-existing-item-p))
             (not ido-incomplete-regexp))
        (exit-minibuffer)))
***************
*** 4398,4403 ****
--- 4410,4416 ----
                    minibuffer-completion-table
                    minibuffer-completion-predicate
                    (not minibuffer-completion-confirm))))
+         (setq ido-show-confirm-message nil)
          (ido-trace "inf" inf)
          (insert inf))
        ))))
***************
*** 4430,4435 ****
--- 4443,4450 ----
  
      (cond ((null comps)
           (cond
+           (ido-show-confirm-message
+            (or (nth 11 ido-decorations) " [Confirm]"))
            (ido-directory-nonreadable
             (or (nth 8 ido-decorations) " [Not readable]"))
            (ido-directory-too-big


-- 
Kim F. Storm <address@hidden> http://www.cua.dk





reply via email to

[Prev in Thread] Current Thread [Next in Thread]