Saturday, December 30, 2023

shells/zsh: fix diff(1) completions

Hi,

I noticed that if you are using `compinit`, diff(1) completions don't work
right.

E.g. if you do `diff -u /etc/doas.conf /etc/exa<tab>` (expecting it to complete
to `/etc/examples`), it won't complete.

Mentioned this on their IRC channel and someone there by the name Mikachu
pointed me to:
https://sourceforge.net/p/zsh/code/ci/996b51515600859ce7f952f22c6262ecd24578e1/

The below diff applies that patch, thus fixing diff completions.

Thanks to Mikachu!

OK to commit?

Index: Makefile
===================================================================
RCS file: /cvs/ports/shells/zsh/Makefile,v
diff -u -p -r1.97 Makefile
--- Makefile 27 Sep 2023 16:41:31 -0000 1.97
+++ Makefile 30 Dec 2023 13:20:31 -0000
@@ -1,6 +1,7 @@
COMMENT= Z shell, Bourne shell-compatible

V= 5.9
+REVISION= 0
DISTNAME= zsh-$V
CATEGORIES= shells

Index: patches/patch-Completion_Unix_Type__diff_options
===================================================================
RCS file: patches/patch-Completion_Unix_Type__diff_options
diff -N patches/patch-Completion_Unix_Type__diff_options
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-Completion_Unix_Type__diff_options 30 Dec 2023 13:26:53 -0000
@@ -0,0 +1,75 @@
+Fix diff(1) completions for OpenBSD.
+
+https://sourceforge.net/p/zsh/code/ci/996b51515600859ce7f952f22c6262ecd24578e1/
+
+Index: Completion/Unix/Type/_diff_options
+--- Completion/Unix/Type/_diff_options.orig
++++ Completion/Unix/Type/_diff_options
+@@ -133,33 +133,44 @@ else
+ case $OSTYPE in
+ openbsd*|solaris2.<9->)
+ of+=' -u -U'
++ ;|
++ openbsd*|solaris*)
++ of+=' -n -C -D'
++ ;|
++ solaris*)
++ of+=' -h'
++ ;|
++ openbsd*)
++ of+=' -q'
++ ;|
++ # modifications to "$of" should be done above this line so that it is
++ # uniformly defined while constructing $args
++ openbsd*|solaris2.<9->)
+ args+=(
+- "($of)-u[output a unified diff]"
+- "($of)-U+[output a unified diff]:lines of context"
++ "($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)-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]'
++ "($of)-C+[output a context diff]:lines of context"
++ "($of)-D+[output merged file with preprocessor directives]:preprocessor symbol"
++ '-i[case insensitive]'
++ '-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]"
++ '-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'
++ '-l[long output format (paginate with pr(1))]'
+ )
+ ;;
+ openbsd*)
+- of+=' -n -q -u -C -D -U'
+- args=(
++ args+=(
+ "($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]"
+ '-a[treat all files as ASCII text]'
+@@ -173,7 +184,7 @@ else
+ '-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'
+ '*-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'
++ '*-x[exclude files and subdirectories whose basenames match a pattern]:pattern'
+ )
+ ;;
+ esac

--
Best Regards
Edd Barrett

https://www.theunixzoo.co.uk

No comments:

Post a Comment