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
#!/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 |