summaryrefslogtreecommitdiff
path: root/src/rc/cpp.kak
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2012-09-06 13:38:51 +0200
committerMaxime Coste <frrrwww@gmail.com>2012-09-06 13:38:51 +0200
commitddd5236b08628e092f20bd5b7952b2891c093118 (patch)
tree57c3ca0fb0531dd8bbc3411800d8d962566c5a85 /src/rc/cpp.kak
parent41b0751a5d35b58d8479ed82cf43acc02e5933bf (diff)
cpp.kak: smarter alt command
Diffstat (limited to 'src/rc/cpp.kak')
-rw-r--r--src/rc/cpp.kak26
1 files changed, 14 insertions, 12 deletions
diff --git a/src/rc/cpp.kak b/src/rc/cpp.kak
index b9e81e43..93f7ccba 100644
--- a/src/rc/cpp.kak
+++ b/src/rc/cpp.kak
@@ -33,17 +33,19 @@ hook global BufNew .*\.(h|hh|hpp|hxx|H) %{
exec ggi<c-r>%<ret><esc>ggxs\.<ret>c_<esc><space>A_INCLUDED<esc>ggxyppI#ifndef<space><esc>jI#define<space><esc>jI#endif<space>//<space><esc>O<esc>
}
-def alt %{ edit %sh{
+def alt %{ %sh{
+ shopt -s extglob
case ${kak_bufname} in
- *.c) echo ${kak_bufname/%c/h} ;;
- *.cc) echo ${kak_bufname/%cc/hh} ;;
- *.cpp) echo ${kak_bufname/%cpp/hpp} ;;
- *.cxx) echo ${kak_bufname/%cxx/hxx} ;;
- *.C) echo ${kak_bufname/%C/H} ;;
- *.h) echo ${kak_bufname/%h/c} ;;
- *.hh) echo ${kak_bufname/%hh/cc} ;;
- *.hpp) echo ${kak_bufname/%hpp/cpp} ;;
- *.hxx) echo ${kak_bufname/%hxx/cxx} ;;
- *.H) echo ${kak_bufname/%H/C} ;;
+ *.c|*.cc|*.cpp|*.cxx|*.C)
+ altname=$(ls -1 "${kak_bufname%.*}".@(h|hh|hpp|hxx|H) 2> /dev/null | head -n 1)
+ ;;
+ *.h|*.hh|*.hpp|*.hxx|*.H)
+ altname=$(ls -1 "${kak_bufname%.*}".@(c|cc|cpp|cxx|C) 2> /dev/null | head -n 1)
+ ;;
esac
-}}
+ if [[ -e ${altname} ]]; then
+ echo edit "'${altname}'"
+ else
+ echo echo "'alternative file not found'"
+ fi
+}}