Skip to content

Instantly share code, notes, and snippets.

@j4james
Last active March 13, 2023 08:57
Show Gist options
  • Save j4james/a25e6290772353c06f85c584007c2aa0 to your computer and use it in GitHub Desktop.
Save j4james/a25e6290772353c06f85c584007c2aa0 to your computer and use it in GitHub Desktop.
Testing Tab Stop Reports
#!/bin/bash
CSI=$'\e[' # Control Sequence Introducer
DCS=$'\eP' # Device Control String
ST=$'\e\\' # String Terminator
list_tab_stops() {
IFS="\e" read -a REPLY -t 4 -s -p ${CSI}'2$w' -r -d '\'
echo "${REPLY[0]:1:-1}"
}
# Make sure DECCOLM is allowed in XTerm
echo -n ${CSI}'?40h'
# Enable autowrap mode
echo -n ${CSI}'?7h'
# Lookup the default tab stops in 132-column mode
echo -n ${CSI}'?3h'
sleep 1
default132=$(list_tab_stops)
# Lookup the default tab stops in 80-column mode
echo -n ${CSI}'?3l'
sleep 1
default80=$(list_tab_stops)
# Custom tab stops with values beyond 80 and 132 columns
echo -n ${DCS}'2$t30/60/120/240'${ST}
custom=$(list_tab_stops)
# Check if the 120 tab stop is visible in 132-column mode
echo -n ${CSI}'?3h'
sleep 1
custom132=$(list_tab_stops)
echo -n ${CSI}'?3l'
sleep 1
# Can we set tab stops in any order?
echo -n ${DCS}'2$t44/22/66'${ST}
unordered=$(list_tab_stops)
# How is a "blank" tab stop interpreted?
echo -n ${DCS}'2$t3//7'${ST}
blank=$(list_tab_stops)
# How is a 0 tab stop interpreted?
echo -n ${DCS}'2$t0/5/10'${ST}
zero=$(list_tab_stops)
# How is a 1 tab stop interpreted?
echo -n ${DCS}'2$t1/8/18'${ST}
one=$(list_tab_stops)
# Is whitespace allowed?
echo -en ${DCS}'2$t1 1/2\n1/3\t1'${ST}
whitespace=$(list_tab_stops)
# Will invalid characters be ignored?
echo -n ${DCS}'2$t2X2/4#4/6!6'${ST}
invalid=$(list_tab_stops)
# Clear the tab stops
echo -n ${CSI}'3g'
clear=$(list_tab_stops)
# Reset with DECST8C
echo -n ${CSI}'?W'
decst8c=$(list_tab_stops)
# Reset manually
echo -n ${DCS}'2$t9/17/25/33/41/49/57/65/73/81/89/97/105/113/121/129'${ST}
rest=$(list_tab_stops)
echo -e "Testing Tab Stop Reports\n"
echo "80-column mode: ${default80}"
echo "132-column mode: ${default132}"
echo "Custom tab stops: ${custom}"
echo "After DECCOLM: ${custom132}"
echo "Unordered values: ${unordered}"
echo "Blank value: ${blank}"
echo "Zero value: ${zero}"
echo "One value: ${one}"
echo "Whitespace: ${whitespace}"
echo "Invalid chars: ${invalid}"
echo "Clear tab stops: ${clear}"
echo "DECST8C reset: ${decst8c}"
echo "Manually reset: ${rest}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment