summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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