about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMikael Magnusson <mikachu@gmail.com>2020-10-24 13:45:08 +0200
committerMikael Magnusson <mikachu@gmail.com>2020-10-25 23:06:02 +0100
commit8773f01f2b7a908af70dc06d7d00481f1c9bec44 (patch)
treee6671737e4ee996400424a6094dd8e1b12f2a1a6
parentea64d2fd4bddf4bf6cfa2d0abf5c407f6d7f1542 (diff)
downloadzsh-8773f01f2b7a908af70dc06d7d00481f1c9bec44.tar.gz
zsh-8773f01f2b7a908af70dc06d7d00481f1c9bec44.tar.xz
zsh-8773f01f2b7a908af70dc06d7d00481f1c9bec44.zip
47494, 47495: Add -n option to strftime
-rw-r--r--ChangeLog4
-rw-r--r--Completion/Zsh/Command/_strftime12
-rw-r--r--Doc/Zsh/mod_datetime.yo7
-rw-r--r--Src/Modules/datetime.c5
-rw-r--r--Test/V09datetime.ztst4
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  <roman.perepelitsa@gmail.com>
 
 	* 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