diff options
Diffstat (limited to 'dotfiles/zsh/completion/_cmake')
-rw-r--r-- | dotfiles/zsh/completion/_cmake | 274 |
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 "$@" + |