118 lines
2.5 KiB
Bash
118 lines
2.5 KiB
Bash
#!/bin/bash
|
|
#
|
|
# Best Editor is only for the best typists, and is written assuming
|
|
# that real coders and writers don't need to see what they type
|
|
# to know how perfect it is.
|
|
#
|
|
# But honestly this program is just a piece of satire written due to
|
|
# a joke between three friends about the opposite of self-documenting
|
|
# code, which we decided is self-obfuscating code (Perl).
|
|
#
|
|
# Date: 2019-04-20
|
|
# Programmer: HyperVegan
|
|
# Purpose: Amuse friends.
|
|
#
|
|
# Parameters:
|
|
# $0 - Program name.
|
|
# $1 - File to edit, does not need to exist already.
|
|
#
|
|
#######################################################################
|
|
|
|
PROG=${0##*/}
|
|
|
|
## Functions ##
|
|
function usage {
|
|
echo "Usage:"
|
|
cat << EOF
|
|
$PROG name_of_file_to_edit_or_create
|
|
EOF
|
|
exit 1
|
|
}
|
|
|
|
function display {
|
|
contents="$1"
|
|
clear
|
|
# Hidden
|
|
#contents=$(echo -e $contents | sed -e 's/[a-zA-Z0-9]/*/g')
|
|
# More Hidden
|
|
contents="$(echo -e $contents | sed -e 's/[^ \n\t\r]/*/g')"
|
|
# Most Hidden
|
|
#contents="$(echo -e $contents | sed -e 's/[^\`]/*/g')"
|
|
cat << EOF
|
|
$contents
|
|
|
|
Editing $filename
|
|
|
|
Press \` to create a newline.
|
|
Press Enter or Return to backspace.
|
|
Press ~ to escape from the best editor.
|
|
EOF
|
|
|
|
if [[ $debug == "1" ]]; then
|
|
cat << EOF
|
|
|
|
|
|
-= DEBUG: Real contents of the file are below =-
|
|
$(cat $filename)
|
|
EOF
|
|
fi
|
|
}
|
|
|
|
|
|
## Validations ##
|
|
if [[ -z "$1" ]]; then
|
|
echo "ERROR: No file name passed!"
|
|
usage
|
|
fi
|
|
|
|
if [[ $2 == "debug" ]]; then
|
|
debug=1
|
|
echo "Debug mode enabled... cheater."
|
|
elif [[ ! -z "$2" ]]; then
|
|
echo "ERROR: Hey, only one parameter allowed. Let's not over-complicate this."
|
|
fi
|
|
|
|
if [[ "$1" == *" "* ]]; then
|
|
echo "ERROR: Seriously, spaces in a filename? You aren't one of us, get out."
|
|
fi
|
|
|
|
filename=$1
|
|
|
|
|
|
## Main ##
|
|
# Put the file into a variable
|
|
touch $filename
|
|
file="$(cat $filename)"
|
|
display "$file"
|
|
# No idea why but there is a bug here. This first display shows the obfuscated file
|
|
# all in one line, but after entering a character it all gets adjusted correctly.
|
|
|
|
# Edit the file, but only from the end. :)
|
|
IFS=''
|
|
while read -e -n1 letter; do
|
|
# Allow an escape
|
|
if [[ "$letter" == '~' ]]; then
|
|
break
|
|
fi
|
|
|
|
# Allow newlines
|
|
if [[ "$letter" == '`' ]]; then
|
|
letter="\n"
|
|
fi
|
|
|
|
# Allow backspacing
|
|
if [[ "$letter" == '' ]]; then
|
|
file="${file%?}"
|
|
fi
|
|
|
|
# Add the letter to the end and save the file
|
|
file="$file""$letter"
|
|
echo -e "$file" > $filename
|
|
|
|
# Obfuscate and display file
|
|
display "$file"
|
|
done
|
|
|
|
|
|
exit 0
|