diff --git a/rc/commenting.kak b/rc/commenting.kak index 076e4027..f11e5634 100644 --- a/rc/commenting.kak +++ b/rc/commenting.kak @@ -6,19 +6,13 @@ decl str comment_line_chars "//" def comment-selection -docstring "Comment/uncomment the current selection" %{ %sh{ - function escape_regex_chars { - ## Escape characters that can be interpreted as modifiers/repetitors by the regex engine - sed -r 's,(\*|\+|\[|\]|\{\}|\||\(|\)|\?|\^|\$),\\\1,g' <<< "$@" - } function exec_proof { - ## Replace some special characters that are interpreted differently in `exec` - sed -r -e 's,<,,gt>,g' -e 's,,g' -e 's,\bgt>,,g' <<< "$@" + ## Replace the '<' sign that is interpreted differently in `exec` + sed -r 's,<,,g' <<< "$@" } readonly opening=$(exec_proof "${kak_opt_comment_selection_chars%%:*}") readonly closing=$(exec_proof "${kak_opt_comment_selection_chars##*:}") - readonly opening_escaped=$(escape_regex_chars "${opening}") - readonly closing_escaped=$(escape_regex_chars "${closing}") if [ -z "${opening}" -o -z "${closing}" ]; then echo "The \`comment_selection_chars\` variable is empty, couldn't comment the selection" >&2 @@ -31,13 +25,13 @@ def comment-selection -docstring "Comment/uncomment the current selection" %{ try %{ ## The selection has already been commented - exec -draft %{\A${opening_escaped}.*${closing_escaped}\z} + exec -draft %{\A\Q${opening}\E.*\Q${closing}\E\z} ## Comment the selection exec %{a${closing}i${opening}${#opening}H} } catch %{ ## Uncomment the commented selection - exec -draft %{s(\A${opening_escaped})|(${closing_escaped}\z)d} + exec -draft %{s(\A\Q${opening}\E)|(\Q${closing}\E\z)d} } }" }