From: Mikael Magnusson <mikachu@gmail.com>
To: zsh-workers@zsh.org
Subject: PATCH: _ps1234, _date_formats: Complete strftime formats for %D{}
Date: Mon, 6 Jul 2015 02:36:52 +0200 [thread overview]
Message-ID: <1436143012-9243-1-git-send-email-mikachu@gmail.com> (raw)
Feel free to hook _date_formats into _date and/or make a _strftime.
PS, my strftime(3) says it handles %E and %O, and it does work with date +%Ey,
but zsh just prints the literal %Ey. Is it handled wrong by us or not
by the libc like the manpage claims?
---
Completion/Unix/Type/_date_formats | 80 ++++++++++++++++++++++++++++++++++++++
Completion/Unix/Type/_ps1234 | 14 +++++--
2 files changed, 91 insertions(+), 3 deletions(-)
create mode 100644 Completion/Unix/Type/_date_formats
diff --git a/Completion/Unix/Type/_date_formats b/Completion/Unix/Type/_date_formats
new file mode 100644
index 0000000..3dd2fa5
--- /dev/null
+++ b/Completion/Unix/Type/_date_formats
@@ -0,0 +1,80 @@
+#autoload
+
+local -a specs
+local exps bs
+
+if [[ -z $compstate[quote] ]]; then
+ bs='\'
+fi
+
+false
+if [[ $PREFIX == *%(|[-EO]|<->) ]]; then
+ specs=()
+ if [[ $PREFIX != *<-> ]]; then
+ specs+=(
+ 'a:abbreviated day name'
+ 'A:full day name'
+ 'b:abbreviated month name'
+ 'B:full month name'
+ 'c:preferred locale date and time'
+ 'C:2-digit century'
+ 'd:day of month (01-31)'
+ 'D:american format month/day/year (%m/%d/%y)'
+ 'e:day of month ( 1-31)'
+ 'E:alternate representation'
+ 'F:ISO 8601 year-month-date (%Y-%m-%d)'
+ 'G:4-digit ISO 8601 week-based year'
+ 'g:2-digit ISO 8601 week-based year'
+ 'h:abbreviated month name'
+ 'H:hour (00-23)'
+ 'I:hour (01-12)'
+ 'j:day of year (001-366)'
+ 'k:hour ( 1-23)'
+ 'l:hour ( 1-12)'
+ 'm:month (01-12)'
+ 'M:minute (00-59)'
+ 'n:newline'
+ 'O:alternative format modifier'
+ 'p:locale dependent AM/PM'
+ 'P:lower case locale dependent am/pm'
+ 'r:locale dependent a.m. or p.m. time (%I:%M:%S %p)'
+ 'R:24-hour notation time (%H:%M)'
+ 's:seconds since the epoch'
+ 'S:seconds (00-60)'
+ 't:tab'
+ 'T:24-hour notation with seconds (%H:%M:%S)'
+ 'u:day of week (1-7, 1=monday)'
+ 'U:week number of current year, sunday based (00-53)'
+ 'V:ISO 8601 week number of current year, week 1 has 4 days in current year (01-53)'
+ 'w:day of week (0-6, 0=sunday)'
+ 'W:week number of current year, monday based (00-53)'
+ 'x:locale dependent date representation without time'
+ 'X:locale dependent time representation without date'
+ 'y:2-digit year (00-99)'
+ 'Y:full year'
+ 'z:UTC offset'
+ 'Z:timezone name'
+ '%:A %'
+ '-:strip leading space or zero (gnu extension)'
+ )
+ if [[ $1 == zsh ]]; then
+ specs+=(
+ 'f:day of month (1-31)'
+ 'K:hour (0-23)'
+ 'L:hour (0-12)'
+ )
+ fi
+ fi
+ if [[ $1 == zsh ]]; then
+ specs+=(
+ '.:fractional part of seconds since epoch'
+ )
+ fi
+ compset -P "*"
+ _describe -t date-format-specifier 'date format specifier' specs -S ''
+ _message -e date-format-precision 'precision for %%. (1-6)'
+else
+ _default "$@"
+ compset -P "*"
+ _describe -t date-format-specifier 'date format specifier' '(%)' -S ''
+fi
diff --git a/Completion/Unix/Type/_ps1234 b/Completion/Unix/Type/_ps1234
index 866349f..b9e5166 100644
--- a/Completion/Unix/Type/_ps1234
+++ b/Completion/Unix/Type/_ps1234
@@ -7,7 +7,9 @@ if [[ -z $compstate[quote] ]]; then
bs='\'
fi
-if [[ $PREFIX == *%(-|)<-># ]]; then
+if [[ $PREFIX == *%D$bs\{[^($bs\})]# ]]; then
+ _date_formats zsh
+elif [[ $PREFIX == *%(-|)<-># ]]; then
specs=(
'm:hostname up to first .'
'_:status of parser'
@@ -52,7 +54,7 @@ if [[ $PREFIX == *%(-|)<-># ]]; then
'*:current time of day, 24-hour format with seconds'
'w:the date in day-dd format'
'W:the date in mm/dd/yy format'
- 'D{}:format string like strftime'
+ 'D{:format string like strftime'
'B:start bold'
'b:stop bold'
'E:clear to end of line'
@@ -121,6 +123,12 @@ elif [[ $PREFIX == *%[FK]$bs\{[0-9a-z]# ]]; then
_message -e ansi-color-number "number between 0 and $(( $terminfo[colors] - 1 ))"
fi
else
- _describe -t prompt-format-specifier 'prompt format specifier' '(%)' -S ''
_default "$@"
+ specs=(%)
+ if compset -P "*%D"; then
+ specs+=(\{)
+ else
+ compset -P "*"
+ fi
+ _describe -t prompt-format-specifier 'prompt format specifier' specs -S ''
fi
--
2.4.0
next reply other threads:[~2015-07-06 0:37 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-06 0:36 Mikael Magnusson [this message]
2015-07-06 11:11 ` Oliver Kiddle
2015-07-06 14:17 ` Mikael Magnusson
2015-07-06 14:56 ` Mikael Magnusson
2015-07-08 14:02 ` Jun T.
2015-07-08 14:42 ` Mikael Magnusson
2015-07-09 12:17 ` Oliver Kiddle
2015-07-09 13:25 ` Mikael Magnusson
2015-07-09 13:53 ` Mikael Magnusson
2015-07-09 15:20 ` Oliver Kiddle
2015-07-09 23:02 ` Oliver Kiddle
2015-07-09 12:22 ` Oliver Kiddle
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1436143012-9243-1-git-send-email-mikachu@gmail.com \
--to=mikachu@gmail.com \
--cc=zsh-workers@zsh.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/zsh/
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 NNTP newsgroup(s).