Preciso de uma função zle que imprima o caractere antes e depois do cursor.
print-char-before-after() {
# Get the position of the cursor
local cursor_pos=$CURSOR
# Get the text in the current line
local line_text=${BUFFER}
}
# Bind the function to a key combination (for example, Ctrl+P)
zle -N print-char-before-after
bindkey '^P' print-char-before-after
Considerando o pipe como o cursor, se a entrada for:
This is a inp|ut
A saída serápu
Ele precisa funcionar no início e no fim da linha e também no buffer multilinha.
se a entrada for:
|This is a input
A saída seráT
se a entrada for:
This is a input|
A saída serát
Como posso fazer isso?
ATUALIZAÇÃO 1:
O código que mais ou menos resolve meu problema é:
print-char-before-after() {
# Get the characters from the left and right buffers
local before_char=""
local after_char=""
# Check if the cursor is not at the beginning of the line
if [[ -n "$LBUFFER" ]]; then
before_char=${LBUFFER[-1]} # Last character of LBUFFER
fi
# Check if the cursor is not at the end of the line
if [[ -n "$RBUFFER" ]]; then
after_char=${RBUFFER[1]} # First character of RBUFFER
fi
# Print the characters before and after
echo "${before_char}${after_char}"
}
# Bind the function to a key combination (for example, Ctrl+P)
zle -N print-char-before-after
bindkey '^P' print-char-before-after