GNU bug report logs -
#18652
25.0.50; [PATCH] Add fresh-line
Previous Next
Reported by: Leo Liu <sdl.web <at> gmail.com>
Date: Tue, 7 Oct 2014 13:04:02 UTC
Severity: wishlist
Tags: patch
Found in version 25.0.50
Fixed in version 25.1
Done: Leo Liu <sdl.web <at> gmail.com>
Bug is archived. No further changes may be made.
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 18652 in the body.
You can then email your comments to 18652 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
Report forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#18652
; Package
emacs
.
(Tue, 07 Oct 2014 13:04:02 GMT)
Full text and
rfc822 format available.
Acknowledgement sent
to
Leo Liu <sdl.web <at> gmail.com>
:
New bug report received and forwarded. Copy sent to
bug-gnu-emacs <at> gnu.org
.
(Tue, 07 Oct 2014 13:04:03 GMT)
Full text and
rfc822 format available.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
I often find myself wanting to start printing at a newline and it is a
lot of work to do it properly. I wonder if we can add something along
these lines?
Thanks,
Leo
=== modified file 'src/print.c'
--- src/print.c 2014-09-11 06:21:55 +0000
+++ src/print.c 2014-10-07 13:01:46 +0000
@@ -530,6 +530,30 @@
return Qt;
}
+DEFUN ("fresh-line", Ffresh_line, Sfresh_line, 0, 1, 0,
+ doc: /* Output a newline unless already at the beginning of a line.
+Value is non-nil if a newline is printed.
+Do nothing and return nil if PRINTCHARFUN is a function. */)
+ (Lisp_Object printcharfun)
+{
+ PRINTDECLARE;
+ if (NILP (printcharfun))
+ printcharfun = Vstandard_output;
+ PRINTPREPARE;
+
+ if (!FUNCTIONP (printcharfun) && NILP (Fbolp ()))
+ {
+ PRINTCHAR ('\n');
+ PRINTFINISH;
+ return Qt;
+ }
+ else
+ {
+ PRINTFINISH;
+ return Qnil;
+ }
+}
+
DEFUN ("prin1", Fprin1, Sprin1, 1, 2, 0,
doc: /* Output the printed representation of OBJECT, any Lisp object.
Quoting characters are printed when needed to make output that `read'
@@ -2334,6 +2358,7 @@
defsubr (&Sprinc);
defsubr (&Sprint);
defsubr (&Sterpri);
+ defsubr (&Sfresh_line);
defsubr (&Swrite_char);
#ifdef WITH_REDIRECT_DEBUGGING_OUTPUT
defsubr (&Sredirect_debugging_output);
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#18652
; Package
emacs
.
(Tue, 07 Oct 2014 13:22:01 GMT)
Full text and
rfc822 format available.
Message #8 received at 18652 <at> debbugs.gnu.org (full text, mbox):
Leo Liu <sdl.web <at> gmail.com> writes:
> I often find myself wanting to start printing at a newline and it is a
> lot of work to do it properly. I wonder if we can add something along
> these lines?
What's wrong with this:
(defun fresh-line (printcharfun)
"Output a newline unless already at the beginning of a line.
Value is non-nil if a newline is printed.
Do nothing and return nil if PRINTCHARFUN is a function."
(or printcharfun (setq printcharfun standard-output))
(and (not (functionp printcharfun))
(not (bolp))
(princ "\n" printcharfun)))
Andreas.
--
Andreas Schwab, SUSE Labs, schwab <at> suse.de
GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE 1748 E4D4 88E3 0EEA B9D7
"And now for something completely different."
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#18652
; Package
emacs
.
(Tue, 07 Oct 2014 13:45:02 GMT)
Full text and
rfc822 format available.
Message #11 received at 18652 <at> debbugs.gnu.org (full text, mbox):
On 2014-10-07 15:21 +0200, Andreas Schwab wrote:
> (not (bolp))
This doesn't work.
Leo
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#18652
; Package
emacs
.
(Tue, 07 Oct 2014 13:49:03 GMT)
Full text and
rfc822 format available.
Message #14 received at 18652 <at> debbugs.gnu.org (full text, mbox):
Leo Liu <sdl.web <at> gmail.com> writes:
> On 2014-10-07 15:21 +0200, Andreas Schwab wrote:
>> (not (bolp))
>
> This doesn't work.
Neither does yours, then.
Andreas.
--
Andreas Schwab, SUSE Labs, schwab <at> suse.de
GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE 1748 E4D4 88E3 0EEA B9D7
"And now for something completely different."
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#18652
; Package
emacs
.
(Tue, 07 Oct 2014 14:16:02 GMT)
Full text and
rfc822 format available.
Message #17 received at 18652 <at> debbugs.gnu.org (full text, mbox):
> + if (!FUNCTIONP (printcharfun) && NILP (Fbolp ()))
`bolp' looks around point in the current buffer.
`printcharfun' may print "anywhere".
IOW this will only work right when printcharfun is current-buffer.
Stefan
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#18652
; Package
emacs
.
(Tue, 07 Oct 2014 15:15:03 GMT)
Full text and
rfc822 format available.
Message #20 received at 18652 <at> debbugs.gnu.org (full text, mbox):
On 2014-10-07 10:15 -0400, Stefan Monnier wrote:
> `bolp' looks around point in the current buffer.
> `printcharfun' may print "anywhere".
> IOW this will only work right when printcharfun is current-buffer.
But PRINTPREPARE will setup the buffer and point properly for bolp to
work. I tested `fresh-line' with printcharfun being buffer, marker or
echo area and it worked in these cases.
Thanks,
Leo
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#18652
; Package
emacs
.
(Tue, 07 Oct 2014 20:46:02 GMT)
Full text and
rfc822 format available.
Message #23 received at 18652 <at> debbugs.gnu.org (full text, mbox):
>> `bolp' looks around point in the current buffer.
>> `printcharfun' may print "anywhere".
>> IOW this will only work right when printcharfun is current-buffer.
> But PRINTPREPARE will setup the buffer and point properly for bolp to
> work. I tested `fresh-line' with printcharfun being buffer, marker or
> echo area and it worked in these cases.
Oh, I missed this part. Then, maybe it's OK. But in the case where
printcharfun is a function, it should signal an error rather than
silently returning nil.
Stefan
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#18652
; Package
emacs
.
(Wed, 08 Oct 2014 01:55:01 GMT)
Full text and
rfc822 format available.
Message #26 received at 18652 <at> debbugs.gnu.org (full text, mbox):
On 2014-10-07 16:45 -0400, Stefan Monnier wrote:
> Oh, I missed this part. Then, maybe it's OK. But in the case where
> printcharfun is a function, it should signal an error rather than
> silently returning nil.
How about something like this? Thanks, Leo.
=== modified file 'src/print.c'
--- src/print.c 2014-09-11 06:21:55 +0000
+++ src/print.c 2014-10-08 01:51:45 +0000
@@ -530,6 +530,33 @@
return Qt;
}
+DEFUN ("fresh-line", Ffresh_line, Sfresh_line, 0, 1, 0,
+ doc: /* Output a newline unless already at the beginning of a line.
+Value is non-nil if a newline is printed.
+Signal an error if PRINTCHARFUN is a function. */)
+ (Lisp_Object printcharfun)
+{
+ PRINTDECLARE;
+ if (NILP (printcharfun))
+ printcharfun = Vstandard_output;
+ PRINTPREPARE;
+
+ if (FUNCTIONP (printcharfun))
+ signal_error ("Unsupported function argument", printcharfun);
+
+ if (NILP (Fbolp ()))
+ {
+ PRINTCHAR ('\n');
+ PRINTFINISH;
+ return Qt;
+ }
+ else
+ {
+ PRINTFINISH;
+ return Qnil;
+ }
+}
+
DEFUN ("prin1", Fprin1, Sprin1, 1, 2, 0,
doc: /* Output the printed representation of OBJECT, any Lisp object.
Quoting characters are printed when needed to make output that `read'
@@ -2334,6 +2361,7 @@
defsubr (&Sprinc);
defsubr (&Sprint);
defsubr (&Sterpri);
+ defsubr (&Sfresh_line);
defsubr (&Swrite_char);
#ifdef WITH_REDIRECT_DEBUGGING_OUTPUT
defsubr (&Sredirect_debugging_output);
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#18652
; Package
emacs
.
(Wed, 08 Oct 2014 05:10:01 GMT)
Full text and
rfc822 format available.
Message #29 received at 18652 <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
On 2014-10-08 09:54 +0800, Leo Liu wrote:
> How about something like this? Thanks, Leo.
This is the full patch (documentation, tests etc.) without the changelog
entries. Also improved to support print to stdout in noninteractive
mode. Comments?
Thanks, Leo
=== modified file 'doc/lispref/streams.texi'
--- doc/lispref/streams.texi 2014-03-18 01:19:03 +0000
+++ doc/lispref/streams.texi 2014-10-08 02:36:52 +0000
@@ -621,6 +621,13 @@
for ``terminate print''.
@end defun
+@defun fresh-line &optional stream
+@cindex fresh line in print
+This function outputs a newline to @var{stream} unless already at the
+beginning of a line. Return @code{t} if a newline is printed. Signal
+an error if @var{stream} is a function.
+@end defun
+
@defun write-char character &optional stream
This function outputs @var{character} to @var{stream}. It returns
@var{character}.
=== modified file 'src/print.c'
--- src/print.c 2014-09-11 06:21:55 +0000
+++ src/print.c 2014-10-08 04:58:12 +0000
@@ -58,6 +58,9 @@
#define PRINT_CIRCLE 200
static Lisp_Object being_printed[PRINT_CIRCLE];
+/* Last char printed to stdout by printchar. */
+static unsigned int printchar_stdout_last;
+
/* When printing into a buffer, first we put the text in this
block, then insert it all at once. */
static char *print_buffer;
@@ -238,6 +241,7 @@
}
else if (noninteractive)
{
+ printchar_stdout_last = ch;
fwrite (str, 1, len, stdout);
noninteractive_need_newline = 1;
}
@@ -530,6 +534,32 @@
return Qt;
}
+DEFUN ("fresh-line", Ffresh_line, Sfresh_line, 0, 1, 0,
+ doc: /* Output a newline unless already at the beginning of a line.
+Value is non-nil if a newline is printed.
+Signal an error if PRINTCHARFUN is a function. */)
+ (Lisp_Object printcharfun)
+{
+ Lisp_Object val = Qnil;
+
+ PRINTDECLARE;
+ if (NILP (printcharfun))
+ printcharfun = Vstandard_output;
+ PRINTPREPARE;
+
+ if (FUNCTIONP (printcharfun))
+ signal_error ("Unsupported function argument", printcharfun);
+
+ if (noninteractive && !NILP (printcharfun))
+ val = printchar_stdout_last == 10 ? Qnil : Qt;
+ else if (NILP (Fbolp ()))
+ val = Qt;
+
+ if (!NILP (val)) PRINTCHAR ('\n');
+ PRINTFINISH;
+ return val;
+}
+
DEFUN ("prin1", Fprin1, Sprin1, 1, 2, 0,
doc: /* Output the printed representation of OBJECT, any Lisp object.
Quoting characters are printed when needed to make output that `read'
@@ -2334,6 +2364,7 @@
defsubr (&Sprinc);
defsubr (&Sprint);
defsubr (&Sterpri);
+ defsubr (&Sfresh_line);
defsubr (&Swrite_char);
#ifdef WITH_REDIRECT_DEBUGGING_OUTPUT
defsubr (&Sredirect_debugging_output);
[print-tests.el (text/plain, attachment)]
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#18652
; Package
emacs
.
(Wed, 08 Oct 2014 07:09:01 GMT)
Full text and
rfc822 format available.
Message #32 received at 18652 <at> debbugs.gnu.org (full text, mbox):
> From: Leo Liu <sdl.web <at> gmail.com>
> Date: Wed, 08 Oct 2014 13:08:57 +0800
> Cc: 18652 <at> debbugs.gnu.org
>
> +@defun fresh-line &optional stream
I can't say I care much for this name. How about add-newline, or
ensure-newline or some such?
> +@cindex fresh line in print
> +This function outputs a newline to @var{stream} unless already at the
> +beginning of a line. Return @code{t} if a newline is printed. Signal
"At beginning of a line" needs explanation, I think.
Also, our convention is to have 2 spaces between sentences.
Finally, the style in the manual is to say "function returns" or "it
returns" and "signals", instead of "return" and "signal".
Thanks.
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#18652
; Package
emacs
.
(Wed, 08 Oct 2014 08:46:02 GMT)
Full text and
rfc822 format available.
Message #35 received at 18652 <at> debbugs.gnu.org (full text, mbox):
Thanks for your input.
On 2014-10-08 10:08 +0300, Eli Zaretskii wrote:
> I can't say I care much for this name. How about add-newline, or
> ensure-newline or some such?
The name is taken from CL's fresh-line but that doesn't mean it is best
suited. add-newline sounds like an alias to terpri, so it is the least
favourable. `ensure-newline' is acceptable to me. But if we choose
ensure-newline I'd like to add an alias to it in cl-lib.el.
>> +@cindex fresh line in print
>> +This function outputs a newline to @var{stream} unless already at the
>> +beginning of a line. Return @code{t} if a newline is printed. Signal
>
> "At beginning of a line" needs explanation, I think.
Any suggestion on how to improve it?
> Also, our convention is to have 2 spaces between sentences.
>
> Finally, the style in the manual is to say "function returns" or "it
> returns" and "signals", instead of "return" and "signal".
>
> Thanks.
Indeed.
=== modified file 'doc/lispref/streams.texi'
--- doc/lispref/streams.texi 2014-03-18 01:19:03 +0000
+++ doc/lispref/streams.texi 2014-10-08 08:45:10 +0000
@@ -621,6 +621,14 @@
for ``terminate print''.
@end defun
+@defun fresh-line &optional stream
+@cindex fresh line in print
+This function outputs a newline to @var{stream} if it is not already
+at the beginning of a line. It returns @code{t} if a newline is
+printed. It can not take a function as @var{STREAM} and an error is
+signaled in this case.
+@end defun
+
@defun write-char character &optional stream
This function outputs @var{character} to @var{stream}. It returns
@var{character}.
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#18652
; Package
emacs
.
(Wed, 08 Oct 2014 10:26:02 GMT)
Full text and
rfc822 format available.
Message #38 received at 18652 <at> debbugs.gnu.org (full text, mbox):
> From: Leo Liu <sdl.web <at> gmail.com>
> Cc: 18652 <at> debbugs.gnu.org
> Date: Wed, 08 Oct 2014 16:45:24 +0800
>
> >> +@cindex fresh line in print
> >> +This function outputs a newline to @var{stream} unless already at the
> >> +beginning of a line. Return @code{t} if a newline is printed. Signal
> >
> > "At beginning of a line" needs explanation, I think.
>
> Any suggestion on how to improve it?
Something like "there is already a newline character at point", I
think (assuming that is what you meant).
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#18652
; Package
emacs
.
(Wed, 08 Oct 2014 14:03:01 GMT)
Full text and
rfc822 format available.
Message #41 received at 18652 <at> debbugs.gnu.org (full text, mbox):
> I can't say I care much for this name. How about add-newline, or
> ensure-newline or some such?
Couldn't we make it a simple argument to `terpri'?
Stefan
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#18652
; Package
emacs
.
(Wed, 08 Oct 2014 16:19:02 GMT)
Full text and
rfc822 format available.
Message #44 received at submit <at> debbugs.gnu.org (full text, mbox):
On 2014-10-08 10:02 -0400, Stefan Monnier wrote:
> Couldn't we make it a simple argument to `terpri'?
Unlike car/cdr terpri has a terrible name and not used as often. Many
people forget its existence and simply use `print' or `write-char'.
Folding fresh-line into terpri can be done but then we have a bad name
with long and potentially confusing doc-string. I think it helps keep
them separate for clarity. WDYT?
> Stefan
Thanks,
Leo
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#18652
; Package
emacs
.
(Wed, 08 Oct 2014 18:27:01 GMT)
Full text and
rfc822 format available.
Message #47 received at 18652 <at> debbugs.gnu.org (full text, mbox):
> Unlike car/cdr terpri has a terrible name and not used as often.
That's no excuse for creating a completely separate function which does
the same as terpri, just slightly differently.
IOW, please make it an argument to terpri, and if you want you can M-x
report-emacs-bug about terpri requesting a new name for it.
Stefan
Reply sent
to
Leo Liu <sdl.web <at> gmail.com>
:
You have taken responsibility.
(Wed, 08 Oct 2014 22:25:01 GMT)
Full text and
rfc822 format available.
Notification sent
to
Leo Liu <sdl.web <at> gmail.com>
:
bug acknowledged by developer.
(Wed, 08 Oct 2014 22:25:03 GMT)
Full text and
rfc822 format available.
Message #52 received at 18652-done <at> debbugs.gnu.org (full text, mbox):
Version: 25.1
On 2014-10-08 14:26 -0400, Stefan Monnier wrote:
> That's no excuse for creating a completely separate function which does
> the same as terpri, just slightly differently.
> IOW, please make it an argument to terpri, and if you want you can M-x
> report-emacs-bug about terpri requesting a new name for it.
I am actually fine with terpri now that I have remembered it ;)
Patch committed hopefully satisfying these comments.
Thanks,
Leo
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#18652
; Package
emacs
.
(Thu, 09 Oct 2014 01:16:02 GMT)
Full text and
rfc822 format available.
Message #55 received at 18652 <at> debbugs.gnu.org (full text, mbox):
You forgot NEWS. :)
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#18652
; Package
emacs
.
(Thu, 09 Oct 2014 01:58:02 GMT)
Full text and
rfc822 format available.
Message #58 received at 18652 <at> debbugs.gnu.org (full text, mbox):
On 2014-10-08 21:15 -0400, Glenn Morris wrote:
> You forgot NEWS. :)
Thanks for the reminder. I just added it. BTW, is there criteria on what
goes in NEWS?
Leo
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#18652
; Package
emacs
.
(Thu, 09 Oct 2014 02:03:01 GMT)
Full text and
rfc822 format available.
Message #61 received at 18652 <at> debbugs.gnu.org (full text, mbox):
Leo Liu wrote:
> Thanks for the reminder. I just added it. BTW, is there criteria on what
> goes in NEWS?
My criterion is "if in doubt, add an entry". At the time of the next
release, it can always be reviewed for NEWSworthiness.
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#18652
; Package
emacs
.
(Thu, 09 Oct 2014 06:47:02 GMT)
Full text and
rfc822 format available.
Message #64 received at 18652 <at> debbugs.gnu.org (full text, mbox):
> From: Glenn Morris <rgm <at> gnu.org>
> Date: Wed, 08 Oct 2014 22:02:23 -0400
> Cc: 18652 <at> debbugs.gnu.org
>
> Leo Liu wrote:
>
> > Thanks for the reminder. I just added it. BTW, is there criteria on what
> > goes in NEWS?
>
> My criterion is "if in doubt, add an entry".
My criteria are: (a) any change in behavior that is not a bugfix or
any new functionality, and (b) if in doubt, add an entry.
bug archived.
Request was from
Debbugs Internal Request <help-debbugs <at> gnu.org>
to
internal_control <at> debbugs.gnu.org
.
(Thu, 06 Nov 2014 12:24:04 GMT)
Full text and
rfc822 format available.
This bug report was last modified 9 years and 185 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.