unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Out-of-date completions for `read-buffer'
@ 2006-08-16 20:55 Stuart D. Herring
  2006-08-17 15:18 ` Richard Stallman
  0 siblings, 1 reply; 10+ messages in thread
From: Stuart D. Herring @ 2006-08-16 20:55 UTC (permalink / raw)


Fread_buffer directly uses Vbuffer_alist in its call to Fcompleting_read. 
This breaks if, while the minibuffer is active, the user switches buffers
around.  The cons which was the head of the list when Fread_buffer was
called will in general no longer be at the head, and so part of the list
will vanish for completion purposes.  (Of course, it's slightly worse when
REQUIRE-MATCH is set.)  Similar problems result from creating or killing
buffers during the call.  I also have a vague suspicion that this
procedure exposes the alist to modification by user code, but I can't
think of how at the moment.

Copying the alist for the call to Fcompleting_read (which is trivial to
implement) would solve the reordering problems but not the ones involving
creation/destruction; the real solution is to write a `complete-buffer'
completion function that would re-consult the buffer list each time
completion was needed.

WDOT?  Is this worth fixing, and if so in which way?

Davis

-- 
This product is sold by volume, not by mass.  If it appears too dense or
too sparse, it is because mass-energy conversion has occurred during
shipping.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Out-of-date completions for `read-buffer'
  2006-08-16 20:55 Out-of-date completions for `read-buffer' Stuart D. Herring
@ 2006-08-17 15:18 ` Richard Stallman
  2006-08-17 19:51   ` Stuart D. Herring
  0 siblings, 1 reply; 10+ messages in thread
From: Richard Stallman @ 2006-08-17 15:18 UTC (permalink / raw)
  Cc: emacs-devel

    Copying the alist for the call to Fcompleting_read (which is trivial to
    implement) would solve the reordering problems but not the ones involving
    creation/destruction; the real solution is to write a `complete-buffer'
    completion function that would re-consult the buffer list each time
    completion was needed.

    WDOT?  Is this worth fixing, and if so in which way?

I think it is worth fixing.  Copying the alist pairs as well as the
alist itself would be simple and avoid any danger of crashing.  It
would still "complete wrong" in the case of creating or killing
buffers, but that seems like a minor issue.  So I think that solution
would be fine.  However, the `complete-buffer' solution you proposed
would be fine too.

Would you like to fix it one way or the other?

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Out-of-date completions for `read-buffer'
  2006-08-17 15:18 ` Richard Stallman
@ 2006-08-17 19:51   ` Stuart D. Herring
  2006-08-18 15:46     ` Richard Stallman
  0 siblings, 1 reply; 10+ messages in thread
From: Stuart D. Herring @ 2006-08-17 19:51 UTC (permalink / raw)
  Cc: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 811 bytes --]

> I think it is worth fixing.  Copying the alist pairs as well as the
> alist itself would be simple and avoid any danger of crashing.  It
> would still "complete wrong" in the case of creating or killing
> buffers, but that seems like a minor issue.  So I think that solution
> would be fine.  However, the `complete-buffer' solution you proposed
> would be fine too.
>
> Would you like to fix it one way or the other?

It turned out that the `complete-buffer' method was easy, since
Vbuffer_alist is of course still around: see the attached (hopefully
trivial) patch.  The name of the new function and its doc string might
both need improvement.

Davis

-- 
This product is sold by volume, not by mass.  If it appears too dense or
too sparse, it is because mass-energy conversion has occurred during
shipping.

[-- Attachment #2: read-buffer.patch --]
[-- Type: application/octet-stream, Size: 1637 bytes --]

*** minibuf.c.~1.307.~	2006-07-17 11:45:27.000000000 -0600
--- minibuf.c	2006-08-17 13:41:47.000000000 -0600
***************
*** 1149,1154 ****
--- 1149,1168 ----
    return Fintern (name, Qnil);
  }
  
+ DEFUN ("complete-buffer", Fcomplete_buffer, Scomplete_buffer, 3, 3, 0,
+        doc: /* Perform completion on buffer names.
+ See `try-completion', `all-completions', and `test-completion'.  */)
+      (string, predicate, flag)
+      Lisp_Object string, predicate, flag;
+ {
+   if (NILP (flag))
+     return Ftry_completion (string, Vbuffer_alist, predicate);
+   else if (EQ (flag, Qt))
+     return Fall_completions (string, Vbuffer_alist, predicate, Qt);
+   else				/* assume `lambda' */
+     return Ftest_completion (string, Vbuffer_alist, predicate);
+ }
+ 
  DEFUN ("read-buffer", Fread_buffer, Sread_buffer, 1, 3, 0,
         doc: /* Read the name of a buffer and return as a string.
  Prompt with PROMPT.
***************
*** 1195,1201 ****
  	  prompt = Fformat (3, args);
  	}
  
!       return Fcompleting_read (prompt, Vbuffer_alist, Qnil,
  			       require_match, Qnil, Qbuffer_name_history,
  			       def, Qnil);
      }
--- 1209,1215 ----
  	  prompt = Fformat (3, args);
  	}
  
!       return Fcompleting_read (prompt, Scomplete_buffer, Qnil,
  			       require_match, Qnil, Qbuffer_name_history,
  			       def, Qnil);
      }
***************
*** 2915,2920 ****
--- 2929,2935 ----
    defsubr (&Sread_string);
    defsubr (&Sread_command);
    defsubr (&Sread_variable);
+   defsubr (&Scomplete_buffer);
    defsubr (&Sread_buffer);
    defsubr (&Sread_no_blanks_input);
    defsubr (&Sminibuffer_depth);

[-- Attachment #3: Type: text/plain, Size: 142 bytes --]

_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-devel

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Out-of-date completions for `read-buffer'
  2006-08-17 19:51   ` Stuart D. Herring
@ 2006-08-18 15:46     ` Richard Stallman
  2006-08-28 20:25       ` Stuart D. Herring
  0 siblings, 1 reply; 10+ messages in thread
From: Richard Stallman @ 2006-08-18 15:46 UTC (permalink / raw)
  Cc: emacs-devel

Your patch is clean, but we should call the new function
internal-complete-buffer so that people won't complain that it isn't
documented it in the Lisp Manual.

Would someone (Eli?) please install the patch, with that change?

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Out-of-date completions for `read-buffer'
  2006-08-18 15:46     ` Richard Stallman
@ 2006-08-28 20:25       ` Stuart D. Herring
  2006-08-30 10:38         ` Eli Zaretskii
  2006-09-02 11:23         ` Eli Zaretskii
  0 siblings, 2 replies; 10+ messages in thread
From: Stuart D. Herring @ 2006-08-28 20:25 UTC (permalink / raw)


> Your patch is clean, but we should call the new function
> internal-complete-buffer so that people won't complain that it isn't
> documented it in the Lisp Manual.
>
> Would someone (Eli?) please install the patch, with that change?

Not to harass, but this hasn't happened in ten days, so I thought I'd
re-raise it.  The patch's message is at
http://lists.gnu.org/archive/html/emacs-devel/2006-08/msg00574.html.

Thanks,
Davis

-- 
This product is sold by volume, not by mass.  If it appears too dense or
too sparse, it is because mass-energy conversion has occurred during
shipping.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Out-of-date completions for `read-buffer'
  2006-08-28 20:25       ` Stuart D. Herring
@ 2006-08-30 10:38         ` Eli Zaretskii
  2006-08-30 15:43           ` Stuart D. Herring
  2006-09-02 11:23         ` Eli Zaretskii
  1 sibling, 1 reply; 10+ messages in thread
From: Eli Zaretskii @ 2006-08-30 10:38 UTC (permalink / raw)
  Cc: emacs-devel

> Date: Mon, 28 Aug 2006 13:25:47 -0700 (PDT)
> From: "Stuart D. Herring" <herring@lanl.gov>
> 
> > Your patch is clean, but we should call the new function
> > internal-complete-buffer so that people won't complain that it isn't
> > documented it in the Lisp Manual.
> >
> > Would someone (Eli?) please install the patch, with that change?
> 
> Not to harass, but this hasn't happened in ten days

I was travelling when Richard asked me to do it.  Please be more
patient.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Out-of-date completions for `read-buffer'
  2006-08-30 10:38         ` Eli Zaretskii
@ 2006-08-30 15:43           ` Stuart D. Herring
  2006-08-30 17:03             ` Eli Zaretskii
  0 siblings, 1 reply; 10+ messages in thread
From: Stuart D. Herring @ 2006-08-30 15:43 UTC (permalink / raw)
  Cc: emacs-devel

>> Not to harass, but this hasn't happened in ten days
>
> I was travelling when Richard asked me to do it.  Please be more
> patient.

No impatience, I promise.  I merely wish it not to be forgotten, and can't
tell from here whether it has been.  I'll be content if I'm assured its
installation in two years, and quite happy if it makes it for 22.

Davis

-- 
This product is sold by volume, not by mass.  If it appears too dense or
too sparse, it is because mass-energy conversion has occurred during
shipping.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Out-of-date completions for `read-buffer'
  2006-08-30 15:43           ` Stuart D. Herring
@ 2006-08-30 17:03             ` Eli Zaretskii
  2006-08-30 17:12               ` Stuart D. Herring
  0 siblings, 1 reply; 10+ messages in thread
From: Eli Zaretskii @ 2006-08-30 17:03 UTC (permalink / raw)
  Cc: emacs-devel

> Date: Wed, 30 Aug 2006 08:43:53 -0700 (PDT)
> From: "Stuart D. Herring" <herring@lanl.gov>
> Cc: emacs-devel@gnu.org
> 
> No impatience, I promise.  I merely wish it not to be forgotten, and can't
> tell from here whether it has been.

It will never be forgotten.  Richard has a machinery in place that
reminds after 2 weeks if his request was not replied to by whoever he
asked to do it (in this case, me).

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Out-of-date completions for `read-buffer'
  2006-08-30 17:03             ` Eli Zaretskii
@ 2006-08-30 17:12               ` Stuart D. Herring
  0 siblings, 0 replies; 10+ messages in thread
From: Stuart D. Herring @ 2006-08-30 17:12 UTC (permalink / raw)
  Cc: emacs-devel

> It will never be forgotten.  Richard has a machinery in place that
> reminds after 2 weeks if his request was not replied to by whoever he
> asked to do it (in this case, me).

Oh.  I thought the interval was one week, and so thought the lack of
reminder after 10 days was significant with regards to that.  Apologies.

Davis

-- 
This product is sold by volume, not by mass.  If it appears too dense or
too sparse, it is because mass-energy conversion has occurred during
shipping.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Out-of-date completions for `read-buffer'
  2006-08-28 20:25       ` Stuart D. Herring
  2006-08-30 10:38         ` Eli Zaretskii
@ 2006-09-02 11:23         ` Eli Zaretskii
  1 sibling, 0 replies; 10+ messages in thread
From: Eli Zaretskii @ 2006-09-02 11:23 UTC (permalink / raw)
  Cc: emacs-devel

> Date: Mon, 28 Aug 2006 13:25:47 -0700 (PDT)
> From: "Stuart D. Herring" <herring@lanl.gov>
> 
> > Your patch is clean, but we should call the new function
> > internal-complete-buffer so that people won't complain that it isn't
> > documented it in the Lisp Manual.
> >
> > Would someone (Eli?) please install the patch, with that change?
> 
> Not to harass, but this hasn't happened in ten days, so I thought I'd
> re-raise it.  The patch's message is at
> http://lists.gnu.org/archive/html/emacs-devel/2006-08/msg00574.html.

Installed.

Your original patch didn't compile:

  minibuf.c: In function `Fread_buffer':
  minibuf.c:1218: error: incompatible type for argument 2 of `Fcompleting_read'
  make[1]: *** [minibuf.o] Error 1

I fixed that by using `intern ("internal-complete-buffer")' instead of
`Sinternal_complete_buffer'.  I also expanded the doc string to
explain the arguments.

Thanks.

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2006-09-02 11:23 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-08-16 20:55 Out-of-date completions for `read-buffer' Stuart D. Herring
2006-08-17 15:18 ` Richard Stallman
2006-08-17 19:51   ` Stuart D. Herring
2006-08-18 15:46     ` Richard Stallman
2006-08-28 20:25       ` Stuart D. Herring
2006-08-30 10:38         ` Eli Zaretskii
2006-08-30 15:43           ` Stuart D. Herring
2006-08-30 17:03             ` Eli Zaretskii
2006-08-30 17:12               ` Stuart D. Herring
2006-09-02 11:23         ` Eli Zaretskii

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).