From 0b946c18eac9b1be3424ecaa037a837af59a920c Mon Sep 17 00:00:00 2001 From: Mikael Magnusson Date: Mon, 6 Jul 2015 00:23:26 +0200 Subject: 35697: _ps1234, _date_formats: Complete strftime formats for %D{} --- 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 (limited to 'Completion') diff --git a/Completion/Unix/Type/_date_formats b/Completion/Unix/Type/_date_formats new file mode 100644 index 000000000..3dd2fa507 --- /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 866349fa9..b9e516628 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 -- cgit 1.4.1