From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8257 invoked by alias); 29 Aug 2018 14:56:59 -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: List-Unsubscribe: X-Seq: 43351 Received: (qmail 12040 invoked by uid 1010); 29 Aug 2018 14:56:59 -0000 X-Qmail-Scanner-Diagnostics: from park01.gkg.net by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.99.2/21882. spamassassin: 3.4.1. Clear:RC:0(205.235.26.22):SA:0(-1.7/5.0):. Processed in 1.350639 secs); 29 Aug 2018 14:56:59 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00, FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS, RCVD_IN_DNSWL_NONE,SPF_PASS,T_DKIM_INVALID autolearn=no autolearn_force=no version=3.4.1 X-Envelope-From: SRS0=ZaPD=LM=yahoo.co.uk=okiddle@bounces.park01.gkg.net X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | X-Virus-Scanned: by amavisd-new at gkg.net Authentication-Results: amavisd4.gkg.net (amavisd-new); dkim=pass (2048-bit key) header.d=yahoo.co.uk X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.co.uk; s=s2048; t=1535554596; bh=GPLLlf3dRJeBmKkTV0ml96J59DHni7c3CTAIm4Iw9As=; h=From:References:To:Subject:Date:From:Subject; b=bw34sErtnO9FmVnbk5F9onoDTnApeWFUanNWluHjRqEhVVNrx7LVbpTtqbkZhiLAUI0jHrEa/scIL82ft9zFCWjfHBWvfVUL+BnkojOCApvLEufrKcKXUHewBiJzC2N/6iBw9sDneV+AH9XHlH6pGnv1L42AVw4t7yHgJd6bwv1Od0sQbVAS4GJ9yDzWqx8EeE00r9pAR+WQX083PHm0WrhYCYRQGOdsfYpsGRWG8nUTaJbGlRwZXlgYW2VpCBJsqhtbCbehmuNOUUYzpnXltksZI2btZ50G9Y2GaI3HLLgLqrGjK4F0NEzQi3czDzUoWZcFlf6wQ4gOIQbaQl21Ww== X-YMail-OSG: M6rl9HsVM1kuiXDdTTAk7Qx542Scy._iVdfI1oDXvD9qKVTSPuj2.459jzwsMKp ZSYCfj80lm.MMq0RIawWJu3HuXxA18D8gjoIeDONgMl4ulW1ceBn3mzte7GyDdMRXxvz3jvm1frr hZbgf6OCAoD0_thLKBE8kEFNCS1ZPHJHSlCmTY4rIhWjfdzugBYI5aESVhs_3W324kD3bKIkDXuh ZDOgxmmm3CUGKc1Gn5ksnO4k9dC.oOrBp20gkn3sNiG_Xguc59vi2FLu3cdlkVKWhR4..GoKX96E om0F0JoSzTNAoF3EmcrkIhNhi0w0X.o01sjf4Ij1MuKtmTL7MAp33_qP0bNf.5y7h.YOhLanIUgr Md2l8fI9dofKayffB7ryBQcbqX7B3AvWv.Ur5PMASrQ9uYT1R0P753wl8_5_hxuCN771JAyDevMG XZb_IlaKhyowN00rG3.BGsTAW9E0HrFUq8hurgpJmkQDLi8cH_Uf16wKPZGq_cJQcFSwusWopkfR .wzPZAiMGTrJKT_D3fVQp8L3RXl3h61KBgbZ0HNvnVSjst3VrO_sq86dknrNc0eQZhP7.SOCNC.f nn4RKzN9KYNT7.FvwPXn7Ck6IDJPHNQ5Nk1i.aq8_jMuPQPrTQjwV3TGK.MyXVK1XqjoTv5DKXJq SsPlmXWbTdWL7uzWQTsy5wcF0RDun.ZNELrkW.L02x8URp36TYNJP8MRm3anolIdhfbjNwQ50D6w DpmQZK5a1VygJ2GsNoqNozuwTEnbwQ_kA9d_8QUzfUXOVOP1Hyxx4eKzBvd1VJLyCNsCMcmNlofR H8FVReGEJX5URhLf0MTE6pspMtsuHgBZ6PjOShAQWdX4.N_UqgEe.pLp5nseM52RMtkiyTcYoA9r DZC5f1_tFk9z.k7n0WV.3iGE8RcnIzGPjnHXBKl1x1uB.N_6FfWaWwdNZnZ.D8LEyETLIjqnyAFi rTMMsbPlw93zR0rHjpRwNwJKWmqNE1ktzPE1Ow_voma8wI3utE1Q9 cc: Zsh hackers list In-reply-to: From: Oliver Kiddle References: <20180416145913.wv637mfnw5hfe2fi@Daniels-MacBook-Air.local> To: Eitan Adler Subject: Re: support more arguments to diff MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-ID: <36700.1535554590.1@hydra> Date: Wed, 29 Aug 2018 16:56:30 +0200 Message-ID: <36701-1535554590.243448@pmWH.t4fc.xT3g> On 17 Apr, Eitan Adler wrote: > FreeBSD is in the process of converting to a new diff implementation. > This resulted in me seeing a huge difference with this patch. Running the FreeBSD 12 alpha in a jail worked just about well enough for me to be able to run the new diff in order to adapt the completion to it. It is mostly similar to GNU diff which is no surprise given that it likely needed to be backward compatible with the old diff. I also rearranged a few other options and made some descriptions more consistent. Oliver diff --git a/Completion/Unix/Type/_diff_options b/Completion/Unix/Type/_diff_options index 55ddecd2a..4fd27442e 100644 --- a/Completion/Unix/Type/_diff_options +++ b/Completion/Unix/Type/_diff_options @@ -1,6 +1,6 @@ #autoload -local of ofwuc ouc oss ofwy ofwg ofwl cmd +local of ofwuc ouc oss ofwy ofwg ofwl cmd variant local -a args cmd="$1" @@ -25,16 +25,16 @@ _diff_palette() { return ret } -if _pick_variant -c $cmd gnu=GNU unix -v; then +if _pick_variant -r variant -c $cmd gnu=GNU unix -v || [[ $OSTYPE = freebsd<12->.* ]]; then # output formats of="-y --side-by-side -n --rcs -e -f --ed -q --brief -c -C --context -u -U \ --unified --old-group-format --new-group-format --changed-group-format \ --unchanged-group-format --line-format --old-line-format --new-line-format \ - --unchanged-line-format --normal -D --ifdef" + --unchanged-line-format -D --ifdef" # output formats w/o unified and context ofwuc="-y --side-by-side -n --rcs -e -f --ed -q --brief --old-group-format \ - --new-group-format --changed-group-format --unchanged-group-format --normal \ + --new-group-format --changed-group-format --unchanged-group-format \ --line-format --old-line-format --new-line-format --unchanged-line-format \ -D --ifdef" @@ -48,26 +48,50 @@ if _pick_variant -c $cmd gnu=GNU unix -v; then ofwy="-n --rcs -e -f --ed -q --brief -c -C --context -u -U --unified \ --old-group-format --new-group-format --changed-group-format \ --unchanged-group-format --line-format --old-line-format \ - --new-line-format --unchanged-line-format --normal -D --ifdef" + --new-line-format --unchanged-line-format -D --ifdef" # output formats w/o group format - ofwg="-n --rcs -e -f --ed -q --brief -c -C --context -u -U --unified --normal \ + ofwg="-n --rcs -e -f --ed -q --brief -c -C --context -u -U --unified \ --line-format --old-line-format --new-line-format --unchanged-line-format -D --ifdef" # output formats w/o line format ofwl="-n --rcs -e -f --ed -q --brief -c -C --context -u -U --unified \ - --old-group-format --new-group-format --changed-group-format --normal \ + --old-group-format --new-group-format --changed-group-format \ --unchanged-group-format" - _arguments -s \ + if [[ $variant = gnu ]]; then + (( $#words > 2 )) || args+=( + '(-v --version)'{-v,--version}'[display version information]' + '--help[display usage information]' + ) + args+=( + '(-H --speed-large-files)'{-H,--speed-large-files}'[assume large files and many small changes]' + '(-E --ignore-tab-expansion)'{-E,--ignore-tab-expansion}'[ignore changes due to tab expansion]' + '(-Z --ignore-trailing-space)'{-Z,--ignore-trailing-space}'[ignore white space at line end]' + "($ofwuc $oss -F --show-function-line)"{-F+,--show-function-line=}'[show the most recent line matching regex]:regex' + "($ofwy $ouc --width -W)"{--width=,-W+}'[set size of line]:number of characters per line' + "($ofwy $ouc)--left-column[output only left column of common lines]" + "($ofwy $ouc)--suppress-common-lines[do not output common lines]" + "($ofwg $ouc $oss)--old-group-format=[set old group format]:old group format" + "($ofwg $ouc $oss)--new-group-format=[set new group format]:new group format" + "($ofwl $ouc $oss)--unchanged-line-format=[set unchanged line format]:unchanged line format" + '(--to-file)--from-file=[compare specified file to all operands]:from file:_files' \ + '(--from-file)--to-file=[compare all operands to specified file]:to file:_files' \ + '--color=-[use colors in output]::when [auto]:(never always auto)' + '--palette=[specify colors to use]:color:_diff_palette' + "($of $ouc)--side-by-side[output in two columns]" + "($of $ouc)-y[output in two columns]" + ) + else + args+=( '!--speed-large-files' ) + fi + + _arguments -s $args \ '(-i --ignore-case)'{-i,--ignore-case}'[case insensitive]' \ - '(--no-ignore-file-name-case)--ignore-file-name-case[ignore case when comparing file names]' \ - '(--ignore-file-name-case)--no-ignore-file-name-case[consider case when comparing file names]' \ - '(-E --ignore-tab-expansion)'{-E,--ignore-tab-expansion}'[ignore changes due to tab expansion]' \ - '(-Z --ignore-trailing-space)'{-Z,--ignore-trailing-space}'[ignore white space at line end]' \ + '--ignore-file-name-case[ignore case when comparing file names]' \ + '!(--ignore-file-name-case)--no-ignore-file-name-case' \ '(-b --ignore-space-change)'{-b,--ignore-space-change}'[ignore changes in the amount of white space]' \ - '(--ignore-all-space -w)'{--ignore-all-space,-w}'[ignore all white space]' \ '(-B --ignore-blank-lines)'{-B,--ignore-blank-lines}'[ignore lines that are all blank]' \ '(-I --ignore-matching-lines)'{-I+,--ignore-matching-lines=}'[ignore lines that match regex]:line exclusion regex:' \ '--strip-trailing-cr[strip trailing carriage return on input]' \ @@ -78,30 +102,18 @@ if _pick_variant -c $cmd gnu=GNU unix -v; then "($of $oss)-u[output a unified diff]" \ "($ofwuc $oss)*"{-L+,--label=}'[set label to use instead of file name and timestamp]:label' \ "($ofwuc $oss -p --show-c-function)"{-p,--show-c-function}'[show C function of each change]' \ - "($ofwuc $oss -F --show-function-line)"{-F+,--show-function-line=}'[show the most recent line matching regex]:regex' \ - "($of $ouc $oss)--brief[output only whether files differ]" \ - "($of $ouc $oss)-q[output only whether files differ]" \ + "($of $ouc $oss)"{-q,--brief}'[output only whether files differ]' \ "($of $ouc $oss -e --ed)"{--ed,-e}'[output an ed script]' \ - "($of $ouc $oss)--normal[output a normal diff]" \ - "($of $ouc $oss)--forward-ed[output a reversed ed script]" \ - "($of $ouc $oss)-f[output a reversed ed script]" \ - "($of $ouc $oss)--rcs[RCS format diff]" \ - "($of $ouc $oss)-n[RCS format diff]" \ - "($of $ouc)--side-by-side[output in two columns]" \ - "($of $ouc)-y[output in two columns]" \ - "($ofwy $ouc --width -W)"{--width=,-W+}'[set size of line]:number of characters per line' \ - "($ofwy $ouc)--left-column[output only left column of common lines]" \ - "($ofwy $ouc)--suppress-common-lines[do not output common lines]" \ - "($of $oss)"{-D,--ifdef=}'[output merged file with preprocessor directives]:preprocessor symbol' \ - "($ofwg $ouc $oss)--old-group-format=[set old group format]:old group format" \ - "($ofwg $ouc $oss)--new-group-format=[set new group format]:new group format" \ + "!($of $ouc $oss)--normal" \ + "($of $ouc $oss)"{-f,--forward-ed}'[output a reversed ed script]' \ + "($of $ouc $oss)"{-n,--rcs}'[output an RCS format diff]' \ + "($of $oss)"{-D+,--ifdef=}'[output merged file with preprocessor directives]:preprocessor symbol' \ "($ofwg $ouc $oss)--changed-group-format=[set changed group format]:changed group format" \ "($ofwg $ouc $oss)--unchanged-group-format=[set unchanged group format]:unchanged group format" \ "($ofwl $ouc $oss)--line-format=[set line format]:line format" \ "($ofwl $ouc $oss)--old-line-format=[set old line format]:old line format" \ "($ofwl $ouc $oss)--new-line-format=[set new line format]:new line format" \ - "($ofwl $ouc $oss)--unchanged-line-format=[set unchanged line format]:unchanged line format" \ - '(-l --paginate)'{-l,--paginate}'[output through pr]' \ + '(-l --paginate)'{-l,--paginate}'[long output format (paginate with pr(1))]' \ '(-t --expand-tabs)'{-t,--expand-tabs}'[expand tabs to spaces]' \ '(-T --initial-tab)'{-T,--initial-tab}'[prepend a tab]' \ '--tabsize=[specify width of tab]:width [8]' \ @@ -111,66 +123,55 @@ if _pick_variant -c $cmd gnu=GNU unix -v; then '(-P --unidirectional-new-file)'{-P,--unidirectional-new-file}'[treat absent first files as empty]' \ '(-s --report-identical-files)'{-s,--report-identical-files}'[report when two files are the same]' \ \*{-x+,--exclude=}'[exclude files matching pattern]:exclusion pattern' \ - '(-X --exclude-from)'{-X+,--exclude-from=}'[exclude files matching pattern in file]:exclude file:_files' \ + \*{-X+,--exclude-from=}'[exclude files matching pattern in file]:exclude file:_files' \ '(-S --starting-file)'{-S+,--starting-file=}'[set first file in comparison]:start with file:_files' \ - '(--to-file)--from-file=[compare specified file to all operands]:from file:_files' \ - '(--from-file)--to-file=[compare all operands to specified file]:to file:_files' \ '--horizon-lines=[set number of lines to keep in prefix and suffix]:number of horizon lines' \ '(-d --minimal)'{-d,--minimal}'[try to find a smaller set of changes]' \ - '(-H --speed-large-files)'{-H,--speed-large-files}'[assume large files and many small changes]' \ - '--color=-[use colors in output]::when [auto]:(never always auto)' \ - '--palette=[specify colors to use]:color:_diff_palette' \ - '(-v --version)'{-v,--version}'[display version info]' \ - '--help[display help info]' \ "$@" else of='-c -e -f' case $OSTYPE in - solaris2.<9->) + openbsd*|solaris2.<9->) of+=' -u -U' - args=( - "($of)-u[output a unified diff]" - "($of)-U[output a unified diff]:lines of context" - ) - ;& - solaris*) - of+=' -C -h -n -D' args+=( - '-i[case insensitive]' - '-t[expand tabs to spaces]' - '-w[ignore all white space]' + "($of)-u[output a unified diff]" + "($of)-U+[output a unified diff]:lines of context" + ) + ;| + openbsd*|solaris*) + args+=( "($of)-C+[output a context diff]:lines of context" - "($of)-h[do a fast, half-hearted job]" - "($of)-n[reversed ed script]" - "($of)-D[output merged file with preprocessor directives]:preprocessor symbol" - '-l[output through pr]' + "($of)-D+[output merged file with preprocessor directives]:preprocessor symbol" + '-i[case insensitive]' + '-l[long output format (paginate with pr(1))]' '-s[report on identical files]' + '-t[expand tabs in output lines]' + ) + ;| + solaris*) + of+=' -h -n' + args+=( + '-w[ignore all white space]' + "($of)-h[do a fast, half-hearted job]" + "($of)-n[output a reversed ed script]" '-S+[set first file in comparison]:start with file:_files' ) ;; openbsd*) of+=' -n -q -u -C -D -U' args=( - "($of)-n[produce an rcsdiff(1)-compatible diff]" + "($of)-n[output an rcsdiff(1)-compatible diff]" "($of)-q[only print a line when the files differ; does not produce a list of changes]" - "($of)-u[produce a unified diff with 3 lines of context]" - "($of)-C+[produce a context diff]:number of lines of context" - "($of)-D[produce a merged file with preprocessor directives]:preprocessor symbol" - "($of)-U+[produce a unified diff]:number of lines of context" '-a[treat all files as ASCII text]' '-d[try to produce the smallest diff possible]' '-I[ignore changes whose lines match the extended regular expression]:extended regular expression pattern' - '-i[ignore case]' '*-L[print a label instead of the file name and time]:label' - '-l[long output format (paginate with pr(1))]' '-p[show characters from the last line before the context]' '-T[consistently align tabs]' - '-t[expand tabs in output lines]' '-w[like -b, but totally ignore whitespace]' '-N[treat absent files in either directory as if they were empty]' '-P[treat absent files in the second directory as if they were empty]' '-S[start a directory diff from a file name]:file name:_files' - '-s[report files that are the same]' '*-X[exclude files and subdirectories whose basenames match lines in a file]:file name:_files' '-x[exclude files and subdirectories whose basenames match a pattern]:pattern' )