From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5064 invoked by alias); 6 Jul 2015 00:37:06 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 35697 Received: (qmail 25027 invoked from network); 6 Jul 2015 00:37:04 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL autolearn=ham autolearn_force=no version=3.4.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:subject:date:message-id; bh=9WgWdmN6F02aZVo83dRKEAVJfEQS5OKR8+oOsm/Gh0M=; b=KWl45KL05No63gS621umEq9+oKTY8YausEh5bG8qpnLT++x66eIfdxXU9vv4wzeGdB bgsl46aKzSo0ra/x3UW475JknV6nGib2+BVHLRuEUr/Jmx7vnqzxkCOsXrzmLkRqbrvF bw3ZbV6xpUtvbFgZESS+pIzy227M/dfHC6DGnnFKhe1DyJqWYhlH8qtppiXD5tgs3pZ3 s4ZZksvWR0SFbJYkXQ4ROHMrYNTZYfv7DT7vbnuafyppyhGZz1mSP0zHBvkJkUkXSE/T 37723G/gp+potL9UAsY8PPcg6Tz89W13qae/4EKtiVF/ethpahq15rohk/cIMwcjVniH TBvQ== X-Received: by 10.194.47.164 with SMTP id e4mr87820440wjn.157.1436143019782; Sun, 05 Jul 2015 17:36:59 -0700 (PDT) From: Mikael Magnusson To: zsh-workers@zsh.org Subject: PATCH: _ps1234, _date_formats: Complete strftime formats for %D{} Date: Mon, 6 Jul 2015 02:36:52 +0200 Message-Id: <1436143012-9243-1-git-send-email-mikachu@gmail.com> X-Mailer: git-send-email 2.4.0 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