Add files via upload
This commit is contained in:
parent
3c13a6eff6
commit
f41015cbf0
117
best_editor.sh
Normal file
117
best_editor.sh
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
#!/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
|
Reference in New Issue
Block a user