zsh-workers
 help / color / mirror / code / Atom feed
* PATCH: _ps1234, _date_formats: Complete strftime formats for %D{}
@ 2015-07-06  0:36 Mikael Magnusson
  2015-07-06 11:11 ` Oliver Kiddle
  0 siblings, 1 reply; 12+ messages in thread
From: Mikael Magnusson @ 2015-07-06  0:36 UTC (permalink / raw)
  To: zsh-workers

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


^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2015-07-09 23:09 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-07-06  0:36 PATCH: _ps1234, _date_formats: Complete strftime formats for %D{} Mikael Magnusson
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

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).