Skip to content

Commit 1d659bf

Browse files
A Dynamic Collection of Shell Scripts with Educational Purpose
1 parent 3b7a838 commit 1d659bf

1 file changed

Lines changed: 68 additions & 6 deletions

File tree

scripts/ble-simple

Lines changed: 68 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -696,15 +696,77 @@ _cs_do_shift_tab() {
696696
_cs_redraw
697697
}
698698

699+
# _cs_quote_completion() {
700+
# local completion="$1"
701+
# if [[ "$completion" == *' '* ]]; then
702+
# completion="${completion/#\~/$HOME}"
703+
# completion="${completion//\"/}"
704+
# # Trailing slash será preservada dentro das aspas
705+
# completion="\"${completion}\""
706+
# fi
707+
# printf '%s' "$completion"
708+
# }
709+
699710
_cs_quote_completion() {
700711
local completion="$1"
701-
if [[ "$completion" == *' '* ]]; then
702-
completion="${completion/#\~/$HOME}"
703-
completion="${completion//\"/}"
704-
# Trailing slash será preservada dentro das aspas
705-
completion="\"${completion}\""
712+
local trailing_slash=""
713+
[[ "$completion" == */ ]] && trailing_slash="/" && completion="${completion%/}"
714+
715+
# Escapa sempre com \ se contém espaço ou qualquer caractere não-seguro
716+
# Inclui caracteres unicode problemáticos via verificação de espaço e ASCII especial
717+
local needs_escape=0
718+
[[ "$completion" == *' '* ]] && needs_escape=1
719+
[[ "$completion" == *"'"* ]] && needs_escape=1
720+
[[ "$completion" == *'"'* ]] && needs_escape=1
721+
[[ "$completion" == *'('* ]] && needs_escape=1
722+
[[ "$completion" == *')'* ]] && needs_escape=1
723+
[[ "$completion" == *'['* ]] && needs_escape=1
724+
[[ "$completion" == *']'* ]] && needs_escape=1
725+
[[ "$completion" == *'{'* ]] && needs_escape=1
726+
[[ "$completion" == *'}'* ]] && needs_escape=1
727+
[[ "$completion" == *'&'* ]] && needs_escape=1
728+
[[ "$completion" == *';'* ]] && needs_escape=1
729+
[[ "$completion" == *'!'* ]] && needs_escape=1
730+
[[ "$completion" == *'#'* ]] && needs_escape=1
731+
[[ "$completion" == *'$'* ]] && needs_escape=1
732+
[[ "$completion" == *'`'* ]] && needs_escape=1
733+
[[ "$completion" == *'|'* ]] && needs_escape=1
734+
[[ "$completion" == *'<'* ]] && needs_escape=1
735+
[[ "$completion" == *'>'* ]] && needs_escape=1
736+
[[ "$completion" == *','* ]] && needs_escape=1
737+
[[ "$completion" == *'~'* ]] && needs_escape=1
738+
[[ "$completion" == *'*'* ]] && needs_escape=1
739+
[[ "$completion" == *'?'* ]] && needs_escape=1
740+
[[ "$completion" == *'\'* ]] && needs_escape=1
741+
742+
if (( needs_escape )); then
743+
# Escapa \ primeiro para não duplo-escapar
744+
completion="${completion//\\/\\\\}"
745+
completion="${completion// /\\ }"
746+
completion="${completion//\'/\\\'}"
747+
completion="${completion//\"/\\\"}"
748+
completion="${completion//(/\\(}"
749+
completion="${completion//)/\\)}"
750+
completion="${completion//[/\\[}"
751+
completion="${completion//]/\\]}"
752+
completion="${completion//\{/\\\{}"
753+
completion="${completion//\}/\\\}}"
754+
completion="${completion//&/\\&}"
755+
completion="${completion//;/\\;}"
756+
completion="${completion//!/\\!}"
757+
completion="${completion//#/\\#}"
758+
completion="${completion//\$/\\\$}"
759+
completion="${completion//\`/\\\`}"
760+
completion="${completion//|/\\|}"
761+
completion="${completion//</\\<}"
762+
completion="${completion//>/\\>}"
763+
completion="${completion//,/\\,}"
764+
completion="${completion//~/\\~}"
765+
completion="${completion//\*/\\*}"
766+
completion="${completion//\?/\\?}"
706767
fi
707-
printf '%s' "$completion"
768+
769+
printf '%s' "${completion}${trailing_slash}"
708770
}
709771

710772
_cs_do_tab() {

0 commit comments

Comments
 (0)