From 8773f01f2b7a908af70dc06d7d00481f1c9bec44 Mon Sep 17 00:00:00 2001 From: Mikael Magnusson Date: Sat, 24 Oct 2020 13:45:08 +0200 Subject: 47494, 47495: Add -n option to strftime --- ChangeLog | 4 ++++ Completion/Zsh/Command/_strftime | 12 +++++++----- Doc/Zsh/mod_datetime.yo | 7 +++++-- Src/Modules/datetime.c | 5 +++-- Test/V09datetime.ztst | 4 ++++ 5 files changed, 23 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5a9ef3213..9db67eea0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -6,6 +6,10 @@ * 47302: Test/B03print.ztst, Test/D07multibyte.ztst: Test for print -v fix + * 47494, 47495: Completion/Zsh/Command/_strftime, + Doc/Zsh/mod_datetime.yo, Src/Modules/datetime.c, + Test/V09datetime.ztst: Add -n option to strftime + 2020-10-18 Roman Perepelitsa * 47476: Src/Modules/files.c: Fix a race condition in zf_mkdir -p diff --git a/Completion/Zsh/Command/_strftime b/Completion/Zsh/Command/_strftime index 0849f1c85..a57a76ce4 100644 --- a/Completion/Zsh/Command/_strftime +++ b/Completion/Zsh/Command/_strftime @@ -1,14 +1,16 @@ #compdef strftime -local ret=1 expl +local expl two='epoch time' + +if (( words[(I)-r] )); then + two='date string' +fi _arguments -S -A '-*' -s \ + '-n[omit trailing newline]' \ '-q[run quietly]' \ '(3)-r[reverse lookup using strptime]' \ '-s+[assign result to parameter]:param:_parameters' \ '1:format: _date_formats zsh' \ - '2:epoch time (or date string with -r)' \ + "2:$two" \ '3:nanoseconds' \ -&& ret=0 - -return ret diff --git a/Doc/Zsh/mod_datetime.yo b/Doc/Zsh/mod_datetime.yo index da65a9bbd..853656128 100644 --- a/Doc/Zsh/mod_datetime.yo +++ b/Doc/Zsh/mod_datetime.yo @@ -6,8 +6,8 @@ The tt(zsh/datetime) module makes available one builtin command: startitem() findex(strftime) cindex(date string, printing) -xitem(tt(strftime) [ tt(-s) var(scalar) ] var(format) [ var(epochtime) [ var(nanoseconds) ] ] ) -item(tt(strftime) tt(-r) [ tt(-q) ] [ tt(-s) var(scalar) ] var(format) var(timestring) )( +xitem(tt(strftime) [ tt(-s) var(scalar) | tt(-n) ] var(format) [ var(epochtime) [ var(nanoseconds) ] ] ) +item(tt(strftime) tt(-r) [ tt(-q) ] [ tt(-s) var(scalar) | tt(-n) ] var(format) var(timestring) )( Output the date in the var(format) specified. With no var(epochtime), the current system date/time is used; optionally, var(epochtime) may be used to specify the number of seconds since the epoch, and var(nanoseconds) may @@ -18,6 +18,9 @@ ifzman(the section EXPANSION OF PROMPT SEQUENCES in zmanref(zshmisc))\ ifnzman(noderef(Prompt Expansion)) are also available. startitem() +item(tt(-n))( +Suppress printing a newline after the formatted string. +) item(tt(-q))( Run quietly; suppress printing of all error messages described below. Errors for invalid var(epochtime) values are always printed. diff --git a/Src/Modules/datetime.c b/Src/Modules/datetime.c index 521c15a5b..085e4cc26 100644 --- a/Src/Modules/datetime.c +++ b/Src/Modules/datetime.c @@ -175,7 +175,8 @@ output_strftime(char *nam, char **argv, Options ops, UNUSED(int func)) setsparam(scalar, metafy(buffer, len, META_DUP)); } else { fwrite(buffer, 1, len, stdout); - putchar('\n'); + if (!OPT_ISSET(ops,'n')) + putchar('\n'); } zfree(buffer, bufsize); @@ -235,7 +236,7 @@ getcurrenttime(UNUSED(Param pm)) } static struct builtin bintab[] = { - BUILTIN("strftime", 0, bin_strftime, 1, 3, 0, "qrs:", NULL), + BUILTIN("strftime", 0, bin_strftime, 1, 3, 0, "nqrs:", NULL), }; static const struct gsu_integer epochseconds_gsu = diff --git a/Test/V09datetime.ztst b/Test/V09datetime.ztst index 9f67ecec3..622bdf6ed 100644 --- a/Test/V09datetime.ztst +++ b/Test/V09datetime.ztst @@ -130,3 +130,7 @@ >%6. 2002-02-02 02:02:02.999999 >%9. 2002-02-02 02:02:02.999999999 >%12. 2002-02-02 02:02:02.999999999 + + strftime -n 'one line%n' 2> /dev/null +0:-n option +>one line -- cgit 1.4.1