Never been to CodeSnippets before?

Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world (or not, you can keep them private!)

charpal - launch the Character Palette

/usr/bin/locate *CharPaletteServer.app

function charpal() {
   /usr/bin/open /System/Library/Components/CharacterPalette.component/Contents/SharedSupport/CharPaletteServer.app
   return 0
}


Get process ID (PID) via ps or killall

export PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
export IFS=$' \t\n'

/usr/bin/sudo /bin/mkdir -p /usr/local/bin
/usr/bin/sudo /usr/sbin/chown root:wheel /usr/local /usr/local/bin
/usr/bin/sudo /bin/chmod 0755 /usr/local /usr/local/bin

ls -ld /usr/local /usr/local/bin

man killall | less -p 'Show only'
help kill

kill -l
kill -l 1 2 3 15

help type
type -t kill killall

# the -s option just triggers a fake kill
killall -s Finder
killall -s -HUP Finder
killall -s -9 Finder
killall -s -3 Finder


# cf. http://bashcurescancer.com/using-kill-to-see-if-a-process-is-alive.html
open -a 'Activity Monitor'
killall -s Terminal
kill -0 3832 &>/dev/null; echo $?           # no process with ID 3832 running if exit status is 1
echo TerminalPID=$(killall -s Terminal | awk '{print $NF}')
kill -0 $TerminalPID &>/dev/null; echo $?   # Terminal is alive
kill -0 $PPID &>/dev/null; echo $?          # Bash is alive


# kpid - get PID using killall -s

/bin/cat > ~/Desktop/kpid <<-'EOF'
#!/bin/sh

declare kpid rc

kpid=$(/usr/bin/killall -s -u $(/usr/bin/id -u) "${@}" 2>/dev/null)
rc=$?

if [[ $rc -eq 0 ]]; then
   printf "%s" "$kpid" | awk '{print $NF}'
else
   exit 1
fi

exit  0

EOF


/usr/bin/sudo /bin/mv -i ~/Desktop/kpid /usr/local/bin
/usr/bin/sudo /usr/sbin/chown root:wheel /usr/local/bin/kpid
/usr/bin/sudo /bin/chmod 0755 /usr/local/bin/kpid
/usr/bin/sudo /usr/bin/nano /usr/local/bin/kpid

open -a 'Activity Monitor'

kpid Finder
kpid Safari
kpid Dock
kpid TextEdit
kpid 'QuickTime Player'

kpid launchd
/usr/bin/sudo pid launchd

kpid cupsd; echo $?
/usr/bin/sudo kpid cupsd

kpid bash
/usr/bin/sudo kpid bash; echo $?

# kill Bash
#echo $PPID
#kill -HUP  $PPID
#kill -KILL $PPID


#---------------------------------------------------------------


# pspid - get PID using ps

/bin/cat > ~/Desktop/pspid <<-'EOF'
#!/bin/sh

declare pspid

if [[ "$1" = "-l" ]]; then

   #if [[ $# -eq 1 ]]; then /bin/ps -r -axco pid,command; exit 0; fi
   #if [[ $# -eq 1 ]]; then /bin/ps -axco pid,command | /usr/bin/sed '1,1d' | /usr/bin/sort -rn ; exit 0; fi
   if [[ $# -eq 1 ]]; then /bin/ps -axco pid,command | /usr/bin/sed '1,1d' | /usr/bin/sort -n ; exit 0; fi

   #pspid="$(/bin/ps -axco pid,command | /usr/bin/awk "/${2}/ { print \$1,\$2 }")"
   #printf "%-15s %-15s\n" $(printf "%s" "$pspid" | /usr/bin/sort -n)
   
   #pspid="$(/bin/ps -axco pid,command,uid | /usr/bin/awk "/${2}/ { print \$1,\$2,\$3 }")"
   #printf "%-20s %-20s %-20s\n" $(printf "%s" "$pspid" | /usr/bin/sort -n)

   pspid="$(/bin/ps -axco pid,command,uid,user | /usr/bin/awk "/${2}/ {print \$1,\$2,\$3,\$4}")"
   printf "%-20s %-20s %-20s %-20s\n" $(printf "%s" "$pspid" | /usr/bin/sort -n)

   exit 0

fi

pspid="$(/bin/ps -axco pid,command | /usr/bin/awk "/${@}/ {print \$1}")"

if [[ -n "$pspid" ]]; then
   printf "%s\n" "$pspid"
else
   exit 1
fi

exit  0

EOF


/usr/bin/sudo /bin/mv -i ~/Desktop/pspid /usr/local/bin
/usr/bin/sudo /usr/sbin/chown root:wheel /usr/local/bin/pspid
/usr/bin/sudo /bin/chmod 0755 /usr/local/bin/pspid
/usr/bin/sudo /usr/bin/nano /usr/local/bin/pspid

open -a 'Activity Monitor'

pspid Finder
pspid Safari
pspid TextEdit
pspid 'QuickTime Player'
pspid login
pspid dynamic_pager
pspid launchd
pspid bash
echo $PPID

pspid -l
pspid -l login
pspid -l launchd
pspid -l bash
pspid -l '.*[sS]erver.*'
pspid -l '.*d$'
pspid -l '.*' | grep nobody
pspid -l '.*' | grep root

Handling control characters on the command line

# cf. http://en.wikipedia.org/wiki/Control_character and 
# http://ascii.cl/control-characters.htm

printf '\033'"\n" | cat -vet -
printf '\x0d'"\n" | cat -vet -

[ctrl-v][esc]
[ctrl-v][ctrl-m]

printf '[ctrl-v][ctrl-m]' | cat -vet -; echo


# cf. http://codesnippets.joyent.com/posts/show/1630
printf !:1 | sed -n -e 'l' 

# for an alternative to !:1 try [esc][ctrl][y]
printf !:1 | pbcopy    

# cf. man ascii
printf $(pbpaste) | od -A n -b
printf $(pbpaste) | od -A n -t xC
printf $(pbpaste) | od -A n -t dC

printf $(pbpaste) | od -A n -c
printf $(pbpaste) | od -A n -a

echo $'hel\rlo' 
echo $'hel\rlo' | sed s/[ctrl-v][ctrl-m]//
echo $'hel\rlo' | sed 's/[ctrl-v][ctrl-m]//'
echo $'hel\rlo' | sed "s/[ctrl-v][ctrl-m]//"
echo $'hel\rlo' | sed s/$'[ctrl-v][ctrl-m]'//


man infocmp
infocmp --help

infocmp -1 | grep '\^'
infocmp -1 | grep '\<k'
infocmp -L1 | grep '\^'
infocmp -I1 | grep '\^'
infocmp -C1 | grep '\^'


tput cup 0 0
tput cup 0 0 | cat -vet -; echo
tput cup 0 0 | sed -n -e 'l'
tput cup 0 0 | od -A n -c | sed '$,$d'
tput cup 0 0 | od -A n -a | sed '$,$d'
tput cup 0 0 | od -A n -b | sed '$,$d'
tput cup 0 0 | od -A n -t xC | sed '$,$d'

tput sgr0 | cat -vet -; echo
tput cuu | cat -vet -; echo
tput up | cat -vet -; echo
tput dl1 | cat -vet -; echo

tput kbs | wc -c
tput kbs | ruby -n -e 'p $_.to_s'


printf "%s\000\n" "str" | cat -vet -
printf "%s\000\n" "str" | od -A n -b | sed '$,$d'
printf "%s\000\n" "str" | sed -n -e 'l'
printf "%s\000\n" "str" | ruby -n -e 'p $_.to_s'

Handling file names with initial dash character

export PATH=/usr/bin:/bin:/usr/sbin:/sbin
export IFS=$' \t\n'

mkdir -p ~/Desktop/TestDir
touch ~/Desktop/TestDir/file{1,2,3,4,5}.txt
open ~/Desktop/TestDir

cd ~/Desktop/TestDir

touch -i

touch ~/Desktop/TestDir/-i

touch -- -i
chmod 000 -i
touch -- --i.txt
chmod 000 --i.txt

rm -f -i
rm -f -i -R *

rm -f -- -i
rm -f -- --i.txt

#rm -f ./-i
#rm -f ./--i.txt

rm -f -i -R *

flip - newline conversion tool

export PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
export IFS=$' \t\n'

# download & install flip
cd ~/Desktop
curl -L -O http://ccrma-www.stanford.edu/~craig/utility/flip/flip.osx
mv ~/Desktop/flip.osx ~/Desktop/flip
/usr/bin/sudo /bin/cp -ip ~/Desktop/flip /usr/bin
/usr/bin/sudo /usr/sbin/chown root:wheel /usr/bin/flip
/usr/bin/sudo /bin/chmod +x /usr/bin/flip
ls -l /usr/bin/flip

flip
flip -t /path/to/file     # display current file type
flip -u /path/to/file     # convert to Unix: "\n"
flip -d /path/to/file     # convert to MS-DOS/Windows: "\r\n"
flip -m /path/to/file     # convert to Macintosh (OS 9): "\r"


#----------------------------------


# create a test file

testfile="${HOME}/Desktop/testfile.txt"

function createfile() {
   testfile="${HOME}/Desktop/testfile.txt"
   /usr/bin/jot -b 'sample text' 10 | /bin/cat -n > "$testfile"
   # append a line with a '\r\n' line separator
   printf "%s\r\n\r\n\r\r\n" "sample text" >> "$testfile"      
   # append a last line without a terminating '\n'
   printf "%s" "sample text" >> "$testfile"          
   return 0
}


function odcfile() {

/usr/bin/od -A n -c < "$@" | /usr/bin/sed -E -e 's/^[[:space:]]{11}//' \
       -e s/[[:space:]]{4}/$'\001'/g \
       -e 's/[[:space:]]+//g' | \
       /usr/bin/tr -d '\n' | /usr/bin/tr '\001' ' ' | \
       /usr/bin/sed -e s/\\\\n/$'\\\\\\n\\\n'/g 

return 0
}


createfile
odcfile "$testfile"
flip -t "$testfile"     # display current file type

flip -d "$testfile"     # convert to MS-DOS/Windows: "\r\n"
flip -t "$testfile"
odcfile "$testfile"

flip -m "$testfile"     # convert to Macintosh (OS 9): "\r"
flip -t "$testfile"
odcfile "$testfile"

flip -u "$testfile"     # convert to Unix: "\n"
flip -t "$testfile"
odcfile "$testfile"

Delete carriage returns & newlines with sed

# delete newlines

printf "a\nb\nc\nd\ne\nf" | sed -n -e 'l'
printf "a\nb\nc\nd\ne\nf" | sed -E -e :a -e '$!N; s/\n//g; ta'

printf "a\n\nb" | sed -n -e 'l'
printf "a\n\nb" | sed -E -e :a -e '$!N; s/\n//g; ta' | sed -n -e 'l'
printf "a\n\nb" | sed -E -e :a -e '$!N; s/\n$//g; ta' | sed -n -e 'l'
printf "a\n\n\n\n\n\nb" | sed -E -e :a -e '$!N; s/\n$//g; ta' | sed -n -e 'l'


# delete carriage returns

printf "he\r\rllo\n" | sed -n -e 'l'
printf "he\r\rllo\n" | sed -e s/$'\r'//g | sed -n -e 'l'
printf "he\r\rllo\n" | sed -e s/$'\r\r'/$'\r'/g | sed -n -e 'l'

CR=$'\r'
printf "hello\r\r\n" | sed "s/$CR$CR$/$CR/g" | sed -n -e 'l'


# alternatives

printf "a\nb\nc\nd\ne\nf" | tr -d '\n'

# cf. http://linux.dsplabs.com.au/rmnl-remove-new-line-characters-tr-awk-perl-sed-c-cpp-bash-python-xargs-ghc-ghci-haskell-sam-ssam-p65/
while read -d $'\n'; do echo -n "${REPLY} "; done < <((printf "a\nb\nc\nd\ne\nf"))
while read -d $'\n'; do printf "%s   " "${REPLY}"; done < <((printf "a\nb\nc\nd\ne\nf"))

xargs echo < <((printf "a\nb\nc\nd\ne\nf"))
xargs printf "%s " < <((printf "a\nb\nc\nd\ne\nf"))

printf "a\nb\nc\nd\ne\nf" | /usr/bin/paste -s -d ' ' -     # cf. man paste

# delete newlines in-place (also see below)
vim -e -s +':%j' +'w!' +'qa!' /path/to/file

# insert newlines again
printf "%s\n" "hello" | sed -e s/l/$'\\\n'/g | sed -n -e 'l'
printf "%s\n" "hello" | sed -E s/\(l\)/\\1$'\\\n'/g | sed -n -e 'l'


#-----------------------------------------------------------


# converting between \n and \n\r

# cf. also flip, http://ccrma.stanford.edu/~craig/utility/flip/ and 
# http://codesnippets.joyent.com/posts/show/1660


# convert \n into \r\n
printf "a\nb\nc\nd\ne\nf\n"
printf "a\nb\nc\nd\ne\nf\n" | sed -n -e 'l'

printf "a\nb\nc\nd\ne\nf\n" | sed s/$/$'\r'/
printf "a\nb\nc\nd\ne\nf\n" | sed s/$/$'\r'/ | sed -n -e 'l'

printf "a\nb\n\n\n\n\n\n\n\n\n\n\nc\nd\ne\nf\n" | sed -E -e :a -e '$!N; s/\n$//g; ta' | sed -E s/$/$'\r'/ | sed -n -e 'l'

while read -d $'\n'; do printf "%s\r\n" "${REPLY}"; done < <((printf "a\nb\nc\nd\ne\nf\n"))
while read -d $'\n'; do printf "%s\r\n" "${REPLY}"; done < <((printf "a\nb\nc\nd\ne\nf\n")) | sed -n -e 'l'


# convert \r\n into \n
printf "a\r\nb\r\nc\r\nd\r\ne\r\nf\r\n"
printf "a\r\nb\r\nc\r\nd\r\ne\r\nf\r\n" | sed -n -e 'l'

printf "a\r\nb\r\nc\r\nd\r\ne\r\nf\r\n" | sed s/$'\r'$//
printf "a\r\nb\r\nc\r\nd\r\ne\r\nf\r\n" | sed s/$'\r'$// | sed -n -e 'l'

printf "a\r\nb\r\r\r\r\r\r\r\r\r\r\nc\r\nd\r\ne\r\nf\r\n" | sed s/$'\r'*$// | sed -n -e 'l'
printf "a\r\nb\r\r\r\r\r\r\r\r\r\r\nc\r\nd\r\ne\r\nf\r\n" | sed -E s/$'\r'+$// | sed -n -e 'l'

# lacks a terminating \n though
while read -d $'\r'; do printf "%s" "${REPLY}"; done < <((printf "a\r\nb\r\nc\r\nd\r\ne\r\nf\r\n"))
while read -d $'\r'; do printf "%s" "${REPLY}"; done < <((printf "a\r\nb\r\nc\r\nd\r\ne\r\nf\r\n")) | sed -n -e 'l'


#---------------------------------------


# create test files

testfile="${HOME}/Desktop/testfile.txt"
output="${HOME}/Desktop/output.txt"

function createfiles() {

testfile="${HOME}/Desktop/testfile.txt"
output="${HOME}/Desktop/output.txt"

/usr/bin/touch "$output"

#/usr/bin/jot -b 'sample text' 10 | /bin/cat > "$testfile"
/usr/bin/jot -b 'sample text' 10 | /bin/cat -n > "$testfile"
printf "%s\r\n\r\n\r\r\n" "sample text" >> "$testfile"      # append a line with a '\r\n' line separator
printf "%s" "sample text" >> "$testfile"          # append a last line without a terminating '\n'

return 0
}

createfiles


# inspect test file

cat -vet "$testfile"
ed -s "$testfile" <<< $',l'
sed -n -e 'l'  "$testfile"
ruby -n -e 'p $_.to_s' < "$testfile"


function odcfile() {

/usr/bin/od -A n -c < "$@" | /usr/bin/sed -E -e 's/^[[:space:]]{11}//' \
       -e s/[[:space:]]{4}/$'\001'/g \
       -e 's/[[:space:]]+//g' | \
       /usr/bin/tr -d '\n' | /usr/bin/tr '\001' ' ' | \
       /usr/bin/sed -e s/\\\\n/$'\\\\\\n\\\n'/g 

return 0
}


odcfile "$testfile"


# remove newlines "\n"

# create a new file with newline characters replaced with a space
sed -e :a -e '$!N; s/\n/ /g; ta' "$testfile" > "$output"
odcfile "$output"

# same, but in-place
sed -i "" -e :a -e '$!N; s/\n/ /g; ta' "$testfile"
odcfile "$testfile"

createfiles

# delete newlines in-place
sed -i "" -e :a -e '$!N; s/\n//g; ta' "$testfile"
odcfile "$testfile"

createfiles

# alternative for creating a new file without newlines
tr -d '\n' < "$testfile" > "$output"
odcfile "$output"



# delete carriage returns "\r"

# create a new file with carriage returns deleted
sed -e s/$'\r'//g "$testfile" > "$output"
sed -e s/$'\r'$//g "$testfile" > "$output"  # only at line end
odcfile "$output"

# alternative
tr -d '\r' < "$testfile" > "$output"
odcfile "$output"


# delete carriage returns in-place

sed -i "" -e s/$'\r'//g "$testfile" > "$output"
odcfile "$testfile"

createfiles

# cf. http://bash-hackers.org/wiki/doku.php?id=howto:edit-ed (Pitfalls)
ed -s "$testfile" <<< $'H\n,g/\r/s/\r//\n,w'      # delete one carriage return in a line
ed -s "$testfile" <<< $'H\n,g/\r/s/\r//g\n,w'     # delete all carriage returns in a line
ed -s "$testfile" <<< $'H\n,g/\r$/s/\r$//g\n,w'   # delete a carriage return at line end

odcfile "$testfile"



printf "\n" | od -A n -c
printf "\012" | od -A n -c
printf "\x0a" | od -A n -c

printf '[ctrl-v][ctrl-j]' | od -A n -c      #  \n or ^J


printf "\r" | od -A n -c
printf "\015" | od -A n -c
printf "\x0d" | od -A n -c

printf '[ctrl-v][ctrl-j]' | od -A n -c      #  \r or ^M


# vim
createfiles

vim "$testfile"
#...
:set number
:set list
:%s/^M//g
:set fileformat=unix
#:set fileformat=dos
:x

odcfile "$testfile"


# edit files in-place with vim

createfiles

# delete newlines in-place
vim -e -s +':%j' +'w!' +'qa!' "$testfile"
odcfile "$output"

createfiles

# replace every \r with \n
# cf. http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
vim -e -s +':%s/\r/\r/g' +':set fileformat=unix' +'w!' +'qa!' "$testfile"
odcfile "$output"

createfiles

# delete every \r
vim -e -s +':%s/\r//g' +':set fileformat=unix' +'w!' +'qa!' "$testfile"
odcfile "$output"

createfiles

# delete \r only when it occurs at the end of a line
vim -e -s +':%s/\r$//g' +':set fileformat=unix' +'w!' +'qa!' "$testfile"
odcfile "$output"

createfiles

# replace carriage return line endings with \n
# cf. Getting rid of ^M - mixing dos and unix, http://www.vim.org/tips/tip.php?tip_id=26
printf "\r" >> "$testfile"
vim -e -s +':g/\r$/s///g' +':set fileformat=unix' +'w!' +'qa!' "$testfile"
odcfile "$testfile"

createfiles

# delete last \n of file
vim -e -s +':set noeol bin' +':set fileformat=unix' +'w!' +'qa!' "$testfile"
odcfile "$output"

createfiles

# change mixed mode files to DOS mode
#vim -e -s +':%s/\r\r/\r/g' +'w!' +'qa!' "$testfile"
sed -i '' -e s/$'\r\r'/$'\r'/g  "$testfile"
vim -e -s +':e ++ff=dos' +'w!' +'qa!' "$testfile"
vim -e -s +':e ++ff=dos' +':set ff=dos' +'w!' +'qa!' "$testfile"
odcfile "$output"

vim "$testfile"
:set ff?
:x

open or cd to the directory of a file path

# open directory of a file path
# can be used together with the [esc-.] key sequence
function odf() { /usr/bin/open "$(/usr/bin/dirname "$@")"; return 0; }

# cd to the directory of a file path
function cdf() { cd "$(/usr/bin/dirname "$@")"; return 0; }


ls -l /Library/Desktop\ Pictures/Nature/Tranquil\ Surface.jpg
ls -l /System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/ExecutableBinaryIcon.icns 

odf [esc-.]
cdf [esc-.]


odf /System/Library/SystemProfiler/SPFirewallReporter.spreporter/Contents/Resources/
cdf /System/Library/SystemProfiler/SPFirewallReporter.spreporter/Contents/Resources/English.lproj/Localizable.strings

Two shortcuts for displaying system_profiler data types

man system_profiler

function sptypes() {
   /usr/sbin/system_profiler -listDataTypes | /usr/bin/sed '1d' | /usr/bin/sort | /usr/bin/nl
   return 0
}

unset -f sptype
function sptype() {
   declare -i num
   declare sptypename
   num=$1
   #sptypename="$(/usr/sbin/system_profiler -listDataTypes | /usr/bin/sed '1d'  | /usr/bin/sort | /usr/bin/nl | /usr/bin/egrep "^[[:space:]]+${num}[[:space:]]" | /usr/bin/awk '{print $NF}')"
   sptypename="$(/usr/sbin/system_profiler -listDataTypes | /usr/bin/sed '1d' | /usr/bin/sort | /usr/bin/nl | /usr/bin/grep -w "${num}" | /usr/bin/awk '{print $NF}')"
   printf "\n\e[1m%s\e[m\n\n" "${sptypename}:"
   system_profiler "${sptypename}"
   return 0
}


sptypes
sptype 5

sptypes | grep -i pref
sptype 26 | less -R


#------------------------------------------


# interactive version
unset -f sptype
function sptype() {
   declare -a array
   declare -i num
   array=($(/usr/sbin/system_profiler -listDataTypes | /usr/bin/sed '1d' | /usr/bin/tr '\n' ' '))
   echo
   printf "%s\n" "${array[@]}" | /usr/bin/nl
   echo
   printf "\n\e[1m%s\e[m" "Please select a number:  "
   read num
   num=$num-1
   echo
   printf "\n\e[1m%s\e[m\n\n" "${array[${num}]}: "
   system_profiler $(echo "${array[${num}]}")
   #system_profiler $(echo "${array[${num}]}") | less -R
   return 0
}

sptype

Simple command line editor with Readline support

# for alternatives see http://codesnippets.joyent.com/posts/show/1625
unset -f edit

function edit() {
   declare -a ar
   declare -i i=-1
   while read -e -d $'\n' line; do let i++; ar[$i]="${line}"; done   # -e enables readline
   printf "%s\n" "${ar[@]}" >> ~/.bash_history
   #printf "%s\n" "${ar[@]}" | tr '\n' ' '  >> ~/.bash_history
   #printf "%s\n"  >> ~/.bash_history
   history -n
   eval "${ar[@]}"
   return 0
}

edit
echo "!";
[ctrl-r]

[ctrl-d]  # quit and execute the command
[ctrl-c]  # do not execute the command and abort

Automatically resize Terminal window

For more information see Terminal window commands, Discover tput and Apple Shell Scripting Primer -> ANSI Escape Sequence Tables.

tput lines
tput cols

echo $LINES
echo $COLUMNS

stty size
stty size | awk '{print $1}'    # lines
stty size | awk '{print $NF}'   # columns

stty size | cut -d" " -f1   # lines
stty size | cut -d" " -f2   # columns 

stty -a | awk '/rows/ {print $4}'      # lines
stty -a | awk '/columns/ {print $6}'   # columns

stty -a | sed -E -n -e 's/^.*[^[:digit:]]([[:digit:]]+)[[:space:]]+rows;.*$/\1/p;q;'
stty -a | sed -E -n -e 's/^.*[^[:digit:]]([[:digit:]]+)[[:space:]]+columns;.*$/\1/p;q;'



# automatically resize the Terminal window if it gets smaller than the default size

# positive integer test (including zero)
function positive_int() { return $(test "$@" -eq "$@" > /dev/null 2>&1 && test "$@" -ge 0 > /dev/null 2>&1); }


# resize the Terminal window
function sizetw() { 
   if [[ $# -eq 2 ]] && $(positive_int "$1") && $(positive_int "$2"); then 
      printf "\e[8;${1};${2};t"
      return 0
   fi
   return 1
}


# the default Terminal window size: 26 lines and 107 columns
sizetw 26 107


# automatically adjust Terminal window size
function defaultwindow() {

   DEFAULTLINES=26
   DEFAULTCOLUMNS=107

   if [[ $(/usr/bin/tput lines) -lt $DEFAULTLINES ]] && [[ $(/usr/bin/tput cols) -lt $DEFAULTCOLUMNS ]]; then
      sizetw $DEFAULTLINES $DEFAULTCOLUMNS
   elif [[ $(/usr/bin/tput lines) -lt $DEFAULTLINES ]]; then
      sizetw $DEFAULTLINES $(/usr/bin/tput cols)
   elif [[ $(/usr/bin/tput cols) -lt $DEFAULTCOLUMNS ]]; then
      sizetw $(/usr/bin/tput lines) $DEFAULTCOLUMNS
   fi

   return 0
}


# SIGWINCH is the window change signal
trap defaultwindow SIGWINCH    


sizetw 26 70
sizetw 10 107
sizetw 4 15