[Top][All Lists]

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

[Emacs-bug-tracker] bug#6299: closed (In read-file-name: (args-out-of-ra

From: GNU bug Tracking System
Subject: [Emacs-bug-tracker] bug#6299: closed (In read-file-name: (args-out-of-range "c:" 0 3))
Date: Sun, 30 May 2010 23:04:01 +0000

Your message dated Sun, 30 May 2010 17:18:57 -0400
with message-id <address@hidden>
and subject line Re: bug#6299: In read-file-name: (args-out-of-range "c:" 0 3)
has caused the GNU bug report #6299,
regarding In read-file-name: (args-out-of-range "c:" 0 3)
to be marked as done.

(If you believe you have received this mail in error, please contact

6299: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=6299
GNU Bug Tracking System
Contact address@hidden with problems
--- Begin Message --- Subject: In read-file-name: (args-out-of-range "c:" 0 3) Date: Sat, 29 May 2010 03:35:00 +0200
I get this backtrace below in certain cases when doing C-x C-f and entering

  c:/ema TAB

in the minibuffer. I have no good idea of how to debug it.

It happens only after I have loaded a multi major mode file. However
it happens not after just loading mumamo.el.

If I enter

  c:/emacs/something TAB

it does not happen either, i.e. it happens only before the second "/".

Tramp is loaded after the first TAB above but that is loaded in both
the cases where I get an error and those where I do not get it. (I
have no idea why tramp is loaded though.)

I do not know if I can track this down to something more simple so I
ask for suggestions and qualified guesses instead. Anyone has some?

This is with a checkout from 2010-05-22, my patched version.

Debugger entered--Lisp error: (args-out-of-range "c:" 0 3)
  signal(args-out-of-range ("c:" 0 3))
  completion--some(#[(style) "  address@hidden \f
$\207" [style completion-styles-alist string table pred point] 5]
(basic partial-completion emacs22))
  completion-try-completion("c:/ema" read-file-name-internal file-exists-p 6)
  call-interactively(minibuffer-complete nil nil)
  completing-read("Find file: " read-file-name-internal file-exists-p
nil "c:/emacs/p/100522/EmacsW32/nxhtml/util/" file-name-history
  ad-Orig-read-file-name("Find file: " nil
"c:/emacs/p/100522/EmacsW32/nxhtml/util/" nil nil nil)
  (setq ad-return-value (ad-Orig-read-file-name prompt dir
default-filename mustmatch initial predicate))
  (let ((viper-minibuffer-exit-hook ...)) (setq ad-return-value
(ad-Orig-read-file-name prompt dir default-filename mustmatch initial
  (let (ad-return-value) (let (...) (setq ad-return-value ...)) ad-return-value)
  read-file-name("Find file: " nil "c:/emacs/p/100522/EmacsW32/nxhtml/util/")
  (cons (read-file-name "Find file: " nil default-directory) (cond
(... ...) (... ...)))
  call-interactively(find-file nil nil)

--- End Message ---
--- Begin Message --- Subject: Re: bug#6299: In read-file-name: (args-out-of-range "c:" 0 3) Date: Sun, 30 May 2010 17:18:57 -0400 User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (gnu/linux)
>> I've installed the patch below which should hopefully fix the
>> original problem.  Please confirm.
> Thanks, it works.

Good thing done,

> I meant the argument ACTION to some function, but what exactly was
> I reading??
> There is no ACTION arg to try-completion etc.

The ACTION is not passed to try-completion but from try-completion to
the completion table (when it's a function).  I've just installed the
patch below to try and improve the documentation of those issues.


=== modified file 'doc/lispref/minibuf.texi'
--- doc/lispref/minibuf.texi    2010-05-03 22:01:23 +0000
+++ doc/lispref/minibuf.texi    2010-05-30 21:10:01 +0000
@@ -812,6 +812,24 @@
 If @var{collection} is a function, it is called with three arguments,
 the values @var{string}, @var{predicate} and @code{lambda}; whatever
 it returns, @code{test-completion} returns in turn.
address@hidden completion-boundaries string collection predicate suffix
+This function returns the boundaries of the field on which @var{collection}
+will operate, assuming that @var{string} holds the text before point
+and @var{suffix} holds the text after point.
+Normally completion operates on the whole string, so for all normal
+collections, this will always return @code{(0 . (length
address@hidden))}.  But more complex completion such as completion on
+files is done one field at a time.  For example, completion of
address@hidden"/usr/sh"} will include @code{"/usr/share/"} but not
address@hidden"/usr/share/doc"} even if @code{"/usr/share/doc"} exists.
+Also @code{all-completions} on @code{"/usr/sh"} will not include
address@hidden"/usr/share/"} but only @code{"share/"}.  So if @var{string} is
address@hidden"/usr/sh"} and @var{suffix} is @code{"e/doc"},
address@hidden will return @code{(5 . 1)} which tells us
+that the @var{collection} will only return completion information that
+pertains to the area after @code{"/usr/"} and before @code{"/doc"}.
 @end defun
 If you store a completion alist in a variable, you should mark the
@@ -1618,13 +1636,14 @@
 can supply your own function to compute the completion of a given
 string.  This is called @dfn{programmed completion}.  Emacs uses
 programmed completion when completing file names (@pxref{File Name
+Completion}), among many other cases.
-  To use this feature, pass a symbol with a function definition as the
address@hidden argument to @code{completing-read}.  The function
+  To use this feature, pass a function as the @var{collection}
+argument to @code{completing-read}.  The function
 @code{completing-read} arranges to pass your completion function along
-to @code{try-completion} and @code{all-completions}, which will then let
-your function do all the work.
+to @code{try-completion}, @code{all-completions}, and other basic
+completion functions, which will then let your function do all
+the work.
   The completion function should accept three arguments:
@@ -1638,10 +1657,14 @@
 and ignore the possible match if the predicate returns @code{nil}.
-A flag specifying the type of operation.
+A flag specifying the type of operation.  The best way to think about
+it is that the function stands for an object (in the
+``object-oriented'' sense of the word), and this third argument
+specifies which method to run.
 @end itemize
-  There are three flag values for three operations:
+  There are currently four methods, i.e. four flag values, one for
+  each of the four different basic operations:
 @itemize @bullet
@@ -1663,6 +1686,13 @@
 @code{lambda} specifies @code{test-completion}.  The completion
 function should return @code{t} if the specified string is an exact
 match for some possibility; @code{nil} otherwise.
address@hidden(boundaries . SUFFIX)} specifies @code{completion-boundaries}.
+The function should return a value of the form @code{(boundaries
+START . END)} where START is the position of the beginning boundary in
+in the string to complete, and END is the position of the end boundary
 @end itemize
   It would be consistent and clean for completion functions to allow

--- End Message ---

reply via email to

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