diff --git a/readme.md b/readme.md index e78c221..9f427d3 100644 --- a/readme.md +++ b/readme.md @@ -116,6 +116,7 @@ Two interpreted languages for flexibility. * tmux * get unresolved path for new panes & windows * source code + * bash completion * doc parsing algorithm * install commands * remove existing before diff --git a/sh/code.awk b/sh/code.awk index 26f3cfc..c68e746 100644 --- a/sh/code.awk +++ b/sh/code.awk @@ -46,11 +46,11 @@ BEGIN { RE_SHEBANG = RE_BEGIN "#!" RE_SPACES RE_ANY RE_END RE_VARIABLE = RE_BEGIN RE_VAR RE_SET RE_END - alias = 0 - command = 0 f = "" + match_alias = 0 + match_command = 0 + match_module = 0 reset() - module = 0 } { @@ -96,7 +96,22 @@ BEGIN { } else if (match($0, RE_FUNCTION, m)) { split(doc, array, "\n") for (item in array) { - print array[item] " " m[1] + eval(array[item], m[1]) + } + reset() + } else { + reset() + } + } else if (action == "command function") { + if (match($0, RE_COMMAND, m)) { + append(m[1]) + } else if (match($0, RE_FUNCTION, m)) { + split(doc, array, "\n") + for (item in array) { + if (item == target) { + print m[1] + exit + } } reset() } else { @@ -115,12 +130,12 @@ BEGIN { } else if (match($0, RE_ALIAS, m)) { append("= " m[1]) if (m[1] == target) { - alias = 1 + match_alias = 1 } } else if (match($0, RE_COMMAND, m)) { append("/ " m[1]) if (m[1] == target) { - command = 1 + match_command = 1 } # set } else if (match($0, RE_CONSTANT, m)) { @@ -139,15 +154,15 @@ BEGIN { } else if (match($0, RE_MODULE, m)) { reset() if (m[1] == target) { - module = 1 + match_module = 1 } } else if (match($0, RE_FUNCTION, m)) { f = m[1] } else if (match($0, RE_CLOSE, m)) { - if (alias) { + if (match_alias) { print "= " target output(f, "function") - } else if (command) { + } else if (match_command) { print "/ " target output(f, "function") } else if (f == target) { @@ -157,7 +172,7 @@ BEGIN { reset() } } else { - if (module) { + if (match_module) { output(target, "module") } else { reset() diff --git a/sh/code.sh b/sh/code.sh index 3c033ea..5a67869 100644 --- a/sh/code.sh +++ b/sh/code.sh @@ -105,17 +105,13 @@ rwx_code_aliases() { # find command function rwx_code_command_function() { - local target="${1}" - local line name - while IFS= read -r line; do - name="$(echo "${line}" | awk "{print \$1}")" - if [ "${name}" = "${target}" ]; then - echo "${line}" | - awk "{print \$2}" - fi - done <