From 2c2b9d3a0df19ca05e1da462b36eda7f2d050153 Mon Sep 17 00:00:00 2001 From: crownedgrouse Date: Sun, 12 Apr 2020 18:59:42 +0200 Subject: Add bash completion script --- doc/src/guide/getting_started.asciidoc | 25 ++++++++++++ etc/bash_completion | 74 ++++++++++++++++++++++++++++++++++ 2 files changed, 99 insertions(+) create mode 100755 etc/bash_completion diff --git a/doc/src/guide/getting_started.asciidoc b/doc/src/guide/getting_started.asciidoc index de40f36..be58e87 100644 --- a/doc/src/guide/getting_started.asciidoc +++ b/doc/src/guide/getting_started.asciidoc @@ -38,6 +38,31 @@ Alternatively, just https://erlang.mk/erlang.mk[click on this link]. Make sure you put the file inside the folder we created previously. +==== Bash completion + +If your preferred shell is Bash, a completion script is available. +In order to install it, use the following commands: + +[source,bash] +---- +$ mkdir ~/.bash_completion.d/ +$ cd ~/.bash_completion.d/ +$ wget -O erlang_mk https://raw.githubusercontent.com/ninenines/erlang.mk/master/etc/bash_completion +---- + +Then edit the file `~/.bash_completion` and add: + +[source,bash] +---- +for bcfile in ~/.bash_completion.d/* ; do + . $bcfile +done +---- + +Note that Make's legacy Bash completion will be overwritten. +If you need legacy completion for other C projects, consider sourcing +Erlang.mk's Bash completion only in your Erlang project directory instead. + === Getting started with OTP applications An OTP application is an Erlang application that has a supervision diff --git a/etc/bash_completion b/etc/bash_completion new file mode 100755 index 0000000..60762e3 --- /dev/null +++ b/etc/bash_completion @@ -0,0 +1,74 @@ +#!/usr/bin/env bash +# Copyright (c) 2020, Eric Pailleau +# This file is part of erlang.mk and subject to the terms of the ISC License. +# Date: April 12th 2020 +# Bash completion for Erlang.mk + +_erlang_mk() +{ + local cur prev words cword + _init_completion || return + + T=$(make list-templates | cut -d ':' -f 2-) + TP=$(echo -n $T | cut -d '_' -f 1 | tr ' ' '|') + TPP=$(echo -n $T | tr ' ' '|') + case $prev in + make) + COMPREPLY=( $(compgen -W "all app deps fetch-deps list-deps search rel docs install-docs check tests clean distclean help erlang-mk bootstrap bootstrap-lib bootstrap-rel new-app new-lib new new list-templates ct plt dialyze escript eunit shell sphinx xref cover-report all.coverdata" -- "$cur") ) + ;; + search) + COMPREPLY=( $(compgen -W 'q=' -- "$cur") ) && compopt -o nospace + ;; + new-app|new-lib) + COMPREPLY=( $(compgen -W 'in=' -- "$cur") ) && compopt -o nospace + ;; + new) + COMPREPLY=( $(compgen -W 't=' -- "$cur") ) && compopt -o nospace + ;; + =) + if [[ ${words[$cword - 2]} == "in" ]]; then + COMPREPLY=( $(compgen -W "$(ls apps 2>/dev/null)" -- "$cur") ) && compopt -o nospace + else + if [[ ${words[$cword - 2]} == "t" ]]; then + COMPREPLY=( $(compgen -W "$T" -- "$cur") ) && compopt -o nospace + fi + fi + ;; + $TP) + COMPREPLY=( $(compgen -W "$T" -- "$cur") ) && compopt -o nospace + ;; + $TPP) + COMPREPLY=( $(compgen -W 'n=' -- "$cur") ) && compopt -o nospace + ;; + *) + if [[ "$prev" == "in" && "$cur" == '=' ]]; then + test -d apps && echo 1>&2 + test -d apps && echo $(ls apps 2>/dev/null) + COMPREPLY=( $(compgen -W "$(ls apps 2>/dev/null )" -- "$cur") ) && compopt -o nospace + fi + if [[ "$prev" == "t" && "$cur" == '=' ]]; then + echo 1>&2 + echo $T 1>&2 + COMPREPLY=( $(compgen -W "$T" -- "$cur") ) && compopt -o nospace + fi + if [[ $(echo "$T" | tr ' ' "\n" | grep "$prev") ]]; then + COMPREPLY=( $(compgen -W 'n=' -- "$cur") ) && compopt -o nospace + fi + if [[ ${words[$cword - 1]} == "n=" || ${words[$cword - 1]} == "n" ]]; then + COMPREPLY=( $(compgen -W 'in=' -- "$cur") ) && compopt -o nospace + fi + if [[ ${words[$cword - 3]} == "n" ]]; then + COMPREPLY=( $(compgen -W 'in=' -- "$cur") ) && compopt -o nospace + fi + ;; + esac + + case $cur in + all|bootstrap|list|list-|new|new-) + echo 1>&2 + make help | grep "^ $cur" 1>&2 + return + ;; + esac +} && +complete -F _erlang_mk make -- cgit v1.2.3