You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.4 KiB
51 lines
1.4 KiB
2 years ago
|
#!/bin/sh
|
||
|
|
||
|
# current_input_lines: a cantrip to count the number of lines used by the user's
|
||
|
# current input in the terminal, taking into account wrapped lines and the length
|
||
|
# of the terminal prompt.
|
||
|
#
|
||
|
# Cast this spell to measure the number of lines taken up vertically by the user's
|
||
|
# current input in the terminal, even if the input is wrapped to multiple lines or
|
||
|
# the terminal prompt is longer than usual.
|
||
|
#
|
||
|
# Usage:
|
||
|
# current_input_lines
|
||
|
#
|
||
|
# Returns:
|
||
|
# The number of lines used by the user's current input.
|
||
|
|
||
|
#!/bin/sh
|
||
|
|
||
|
current_input_lines() {
|
||
|
# Save the current cursor position
|
||
|
printf '\033[s'
|
||
|
|
||
|
# Measure the width of the terminal
|
||
|
terminal_width=$(fathom-terminal -w)
|
||
|
|
||
|
# Measure the length of the terminal prompt
|
||
|
prompt_length=$(echo -n "$PS1" | wc -c)
|
||
|
|
||
|
# Calculate the number of columns available for the user's input
|
||
|
available_columns=$(( terminal_width - prompt_length ))
|
||
|
|
||
|
# Calculate the number of lines used by the user's input
|
||
|
lines=$(( terminal_width / available_columns ))
|
||
|
|
||
|
# If the input does not fit evenly into the available columns, add an extra line
|
||
|
if [ "$(( terminal_width % available_columns ))" -ne 0 ]; then
|
||
|
lines=$(( lines + 1 ))
|
||
|
fi
|
||
|
|
||
|
# Restore the cursor position
|
||
|
printf '\033[u'
|
||
|
|
||
|
echo "$lines"
|
||
|
}
|
||
|
|
||
|
# Check if the script is being executed or sourced
|
||
|
if [ "$0" = "$BASH_SOURCE" ]; then
|
||
|
# Script is being executed
|
||
|
# Call the current_input_lines function
|
||
|
current_input_lines
|
||
|
fi
|