summary refs log tree commit diff
path: root/Completion/Unix/Command/_mknod
diff options
context:
space:
mode:
Diffstat (limited to 'Completion/Unix/Command/_mknod')
-rw-r--r--Completion/Unix/Command/_mknod45
1 files changed, 45 insertions, 0 deletions
diff --git a/Completion/Unix/Command/_mknod b/Completion/Unix/Command/_mknod
new file mode 100644
index 000000000..902f49b9f
--- /dev/null
+++ b/Completion/Unix/Command/_mknod
@@ -0,0 +1,45 @@
+#compdef mknod gmknod
+
+# - @todo Major/minor device numbers could be completed using /proc/devices on
+#   Linux and e.g. `stat -f %Hr /dev/*` on BSD/Darwin
+# - @todo Device numbers should not be completed given p or w types
+
+local -a aopts args
+
+if _pick_variant gnu='Free Soft' $OSTYPE --version; then
+  args=(
+    '(: * -)--help[display help information]'
+    '(: * -)--version[display version information]'
+    '(-m --mode)'{-m+,--mode=}'[specify file mode]: :_file_modes'
+    '1:special file:_files'
+    '2:special file type:((
+      b\:"block (buffered) special file"
+      {c,u}\:"character (unbuffered) special file"
+      p\:FIFO
+    ))'
+    '3:major device number'
+    '4:minor device number'
+  )
+  [[ $OSTYPE == linux* ]] && args+=(
+    '(--context)-Z[set SELinux security context to default]'
+    '(-Z)--context=-[like -Z, or specify SELinux security context]:SELinux security context'
+  )
+else
+  aopts=( -A '-*' )
+  args=(
+    '-F+[specify device-number format]:device-number format:(
+      native 386bsd 4bsd bsdos freebsd hpux isc linux netbsd osf1 sco solaris
+      sunos svr3 svr4 ultrix
+    )'
+    '1:special file:_files'
+    '2:special file type:((
+      b\:"block-type device"
+      c\:"character-type device"
+      w\:"whiteout node"
+    ))'
+    '3:major device number'
+    '4:minor device number'
+  )
+fi
+
+_arguments -s -S $aopts : $args