aboutsummaryrefslogtreecommitdiff
path: root/dotfiles/zsh/completion/_cmake
diff options
context:
space:
mode:
Diffstat (limited to 'dotfiles/zsh/completion/_cmake')
-rw-r--r--dotfiles/zsh/completion/_cmake274
1 files changed, 274 insertions, 0 deletions
diff --git a/dotfiles/zsh/completion/_cmake b/dotfiles/zsh/completion/_cmake
new file mode 100644
index 0000000..544137b
--- /dev/null
+++ b/dotfiles/zsh/completion/_cmake
@@ -0,0 +1,274 @@
+#compdef cmake
+
+# Description
+# -----------
+#
+# Completion script for CMake (http://www.cmake.org).
+#
+# -------------------------------------------------------------------------
+# Authors
+# -------
+#
+# * Scott M. Kroll <skroll@gmail.com>
+#
+# -------------------------------------------------------------------------
+# Notes
+# -----
+#
+# * By default only C and C++ languages are supported for compiler flag
+# variables. To define your own list of languages:
+#
+# cmake_langs=('C' 'C'
+# 'CXX' 'C++')
+# zstyle ':completion:*:cmake:*' languages $cmake_langs
+#
+# -------------------------------------------------------------------------
+
+_cmake() {
+ local context state line curcontext="$curcontext" cmake_args
+
+ local cmake_help_actions;cmake_help_actions=(
+ '(- 1)--help-command[Print help for a single command and exit]:command-name:_cmake_command_names'
+ '(- 1)--help-command-list[List available listfile commands and exit]'
+ '(- 1)--help-commands[Print help for all commands and exit]'
+ '(- 1)--help-compatcommands[Print help for compatibility commands]'
+ '(- 1)--help-module[Print help for compatibility commands]:module-name:_cmake_module_names'
+ '(- 1)--help-module-list[Print help for a single module and exit]'
+ '(- 1)--help-modules[Print help for all modules and exit]'
+ '(- 1)--help-property[List available properties and exit]:property-name:_cmake_property_names'
+ '(- 1)--help-property-list[List available properties and exit]'
+ '(- 1)--help-properties[Print help for all properties and exit]'
+ '(- 1)--help-variable[Print help for a single variable and exit]:variable-name:_cmake_variable_names'
+ '(- 1)--help-variable-list[List documented variables and exit]'
+ '(- 1)--help-variables[Print help for all variables and exit]'
+ '(- 1)--copyright[Print the CMake copyright and exit]'
+ '(- 1)'{--help,-help,-usage,-h,-H}'[Print usage information and exit]'
+ '(- 1)--help-full[Print full help and exit]'
+ '(- 1)--help-html[Print full help in HTML format]'
+ '(- 1)--help-man[Print full help as a UNIX man page and exit]'
+ '(- 1)'{--version,-version}'[Print full help as a UNIX man page and exit]'
+ )
+
+ local cmake_build_options;cmake_build_options=(
+ '-C[Pre-load a script to populate the cache]:script:_files'
+ '*-D-[Create a cmake cache entry]:property:_cmake_define_property'
+ '-U[Remove matching entries from CMake cache]:globbing expression'
+ '-G[Specify a makefile generator]:generator:_cmake_generators'
+ '-T[Specify toolset name if supported by generator]:toolset name'
+ '(-Wno-dev -Wdev)-Wno-dev[Suppress developer warnings]'
+ '(-Wno-dev -Wdev)-Wdev[Enable developer warnings]'
+ '-i[Run in wizard mode]'
+ '-L-[List cache variables]::_values "options" "[non-advanced cache variables]" "A[advanced cache variables]" "H[non-advanced cached variables with help]" "AH[advanced cache variables with help]"'
+ '--trace[Put cmake in trace mode]'
+ ':cmake project:_files -/'
+ )
+
+ local cmake_command_actions;cmake_command_actions=(
+ '-E[CMake command mode]:*:command'
+ )
+
+ _arguments -C -s \
+ - help \
+ "$cmake_help_actions[@]" \
+ - command \
+ "$cmake_command_actions[@]" \
+ - build_opts \
+ "$cmake_build_options[@]" && return 0
+}
+
+# -------------------
+# _cmake_command_names
+# -------------------
+(( $+functions[_cmake_command_names] )) ||
+_cmake_command_names() {
+ local command_names; command_names=(${(f)"$($service --help-command-list 2> /dev/null)"})
+ _values 'command name' ${command_names[@]:1} && return 0
+}
+
+# -----------------
+# _cmake_list_names
+# -----------------
+(( $+functions[_cmake_list_names] )) ||
+_cmake_list_names() {
+ local command; command="$@[1]"
+ local desc; desc="$@[2]"
+ local list_names; list_names=(${(f)"$($service $command 2> /dev/null | sed -e 's/\[/\\\[/' -e 's/\]/\\\]/')"})
+
+ _values ${desc} ${list_names[@]:1} && return 0
+}
+
+# ------------------
+# _cmake_module_names
+# ------------------
+(( $+functions[_cmake_module_names] )) ||
+_cmake_module_names() {
+ _cmake_list_names '--help-module-list' 'module name' && return 0
+}
+
+# --------------------
+# _cmake_property_names
+# --------------------
+(( $+functions[_cmake_property_names] )) ||
+_cmake_property_names() {
+ _cmake_list_names '--help-property-list' 'property name' && return 0
+}
+
+# ---------------------
+# _cmake_variable_names
+# ---------------------
+(( $+functions[_cmake_variable_names] )) ||
+_cmake_variable_names() {
+ _cmake_list_names '--help-variable-list' 'variable name' && return 0
+}
+
+# ----------------------
+# _cmake_define_property
+# ----------------------
+(( $+functions[_cmake_define_property] )) ||
+_cmake_define_property() {
+ if compset -P '*='; then
+ _wanted property-values expl 'property value' _cmake_define_property_values ${${IPREFIX%=}#-D} && return 0
+ else
+ _wanted property-names expl 'property name' _cmake_define_property_names -qS= && return 0
+ fi
+}
+
+# ----------------------------
+# _cmake_define_property_names
+# ----------------------------
+(( $+functions[_cmake_define_property_names] )) ||
+_cmake_define_property_names() {
+ local alternatives; alternatives=(
+ 'common-property-names:common property name:_cmake_define_common_property_names -qS='
+ )
+ local -A cmake_langs
+ zstyle -a ":completion:${curcontext}:" languages cmake_langs
+ [[ $#cmake_langs -eq 0 ]] && cmake_langs=('C' 'C' 'CXX' 'C++')
+
+ for cmake_lang in ${(k)cmake_langs}; do
+ cmake_lang_desc="${cmake_langs[$cmake_lang]}"
+ alternatives+=("${cmake_lang//:/-}-property-names:${cmake_lang_desc} language property name:_cmake_define_lang_property_names -qS= ${cmake_lang} ${cmake_lang_desc}")
+ done
+
+ _alternative "${alternatives[@]}"
+}
+
+# ---------------------------------
+# _cmake_define_lang_property_names
+# ---------------------------------
+(( $+functions[_cmake_define_lang_property_names] )) ||
+_cmake_define_lang_property_names() {
+ local cmake_lang="$@[-2]" cmake_lang_desc="$@[-1]"
+ local properties; properties=(
+ "CMAKE_${cmake_lang}_COMPILER:${cmake_lang_desc} compiler"
+ "CMAKE_${cmake_lang}_FLAGS:${cmake_lang_desc} compiler flags for all builds"
+ "CMAKE_${cmake_lang}_FLAGS_DEBUG:${cmake_lang_desc} compiler flags for all Debug build"
+ "CMAKE_${cmake_lang}_FLAGS_RLEASE:${cmake_lang_desc} compiler flags for all Relase build"
+ "CMAKE_${cmake_lang}_FLAGS_MINSIZREL:${cmake_lang_desc} compiler flags for all MinSizRel build"
+ "CMAKE_${cmake_lang}_FLAGS_RELWITHDEBINFO:${cmake_lang_desc} compiler flags for all RelWithDebInfo build"
+ )
+
+ _describe -t "${cmake_lang//:/-}-property-names" "${cmake_lang_desc} property name" properties $@[0,-3] && return 0
+}
+
+# -----------------------------------
+# _cmake_define_common_property_names
+# -----------------------------------
+(( $+functions[_cmake_define_common_property_names] )) ||
+_cmake_define_common_property_names() {
+ local properties; properties=(
+ 'CMAKE_BUILD_TYPE:Specifies the build type for make based generators'
+ 'CMAKE_TOOLCHAIN_FILE:Absolute or relative path to a cmake script which sets up toolchain related variables'
+ 'CMAKE_COLOR_MAKEFILE:Enables/disables color output when using the Makefile generator'
+ 'CMAKE_INSTALL_PREFIX:Install directory used by install'
+ )
+
+ _describe -t 'common-property-names' 'common property name' properties $@
+}
+
+# ----------------------------
+# _cmake_define_property_values
+# ----------------------------
+(( $+functions[_cmake_define_property_values] )) ||
+_cmake_define_property_values() {
+ local ret=1
+ setopt localoptions extendedglob
+ case $@[-1] in
+ (CMAKE_BUILD_TYPE) _wanted build-types expl 'build type' _cmake_build_types && ret=0;;
+ (CMAKE_TOOLCHAIN_FILE) _wanted toolchain-files expl 'file' _cmake_toolchain_files && ret=0;;
+ (CMAKE_COLOR_MAKEFILE) _wanted booleans expl 'boolean' _cmake_booleans && ret=0;;
+ (CMAKE_INSTALL_PREFIX) _files -/ && ret=0;;
+ (CMAKE_*_COMPILER) _wanted compilers expl 'compiler' _cmake_compilers && ret=0;;
+ (CMAKE_*_FLAGS(|_?*)) _message -e compiler-flags 'compiler flags' && ret=0;;
+ (*) _files && ret=0;;
+ esac
+
+ return ret
+}
+
+# ------------------
+# _cmake_build_types
+# ------------------
+(( $+functions[_cmake_build_types] )) ||
+_cmake_build_types() {
+ local build_types; build_types=(
+ 'Debug'
+ 'Release'
+ 'RelWithDebInfo'
+ 'MinSizeRel'
+ )
+ _values 'build type' ${build_types[@]}
+}
+
+# -----------------
+# _cmake_generators
+# -----------------
+(( $+functions[_cmake_generators] )) ||
+_cmake_generators() {
+ local generators; generators=(
+ 'Unix Makefiles'
+ 'Ninja'
+ 'CodeBlocks - Ninja'
+ 'CodeBlocks - Unix Makefiles'
+ 'Eclipse CDT4 - Ninja'
+ 'Eclipse CDT4 - Unix Makefiles'
+ 'KDevelop3'
+ 'KDevelop3 - Unix Makefiles'
+ 'Sublime Text 2 - Ninja'
+ 'Sublime Text 2 - Unix Makefiles'
+ )
+
+ _describe -t generators 'generator' generators
+}
+
+# ----------------------
+# _cmake_toolchain_files
+# ----------------------
+(( $+functions[_cmake_toolchain_files] )) ||
+_cmake_toolchain_files() {
+ _files -g '*\.cmake*'
+}
+
+# ---------------
+# _cmake_booleans
+# ---------------
+(( $+functions[_cmake_booleans] )) ||
+_cmake_booleans() {
+ local booleans; booleans=(
+ 'YES'
+ 'NO'
+ )
+ _describe -t booleans 'boolean' booleans
+}
+
+# ---------------
+# _cmake_compilers
+# ---------------
+(( $+functions[_cmake_compilers] )) ||
+_cmake_compilers() {
+ _command_names -e
+}
+
+
+_cmake "$@"
+