aboutsummaryrefslogtreecommitdiff
path: root/fixterm
blob: e9fd832af144e2789154b12fdd46d56e1b39d76a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/usr/bin/perl -w

# For when a misbehaving curses app leaves xterm or urxvt in a state
# where it prints gibberish. This also can happen when a binary is
# catted to the terminal. If the sequence "Escape ( 0" gets printed,
# we get stuck in gibberish mode (there might be a couple other escape
# sequences that do the same).

# We get crap like this: 
# <┤⎼␌␤┌▒≤@└⎺┼⎺┌␋├␤:·/⎽␉⎺±␋├/▒┤␍␋⎺/␍⎼┤└┐┴1>$

# I *think* the explanation below is accurate:

# There are 2 character sets called G0 and G1. Either of these can be
# set to various settings. The normal setting is "United States". There's
# also a "United Kingdom" and "Special chars & line set". We can set G0
# and G1 to any of these, and switch between whatever G0 and G1 are with
# Esc(1 and Esc)1.

# When the terminal gets stuck in gibberish mode, what's happened is that
# "Special chars & line set" has become the active character set. The
# fix is to set both the "G0" and "G1" character sets to US.

# Reference:
# http://ascii-table.com/ansi-escape-sequences-vt-100.php

print chr(27).")B";
print chr(27)."(B";