diff --git a/main.py b/main.py index a11743c..7bafae6 100755 --- a/main.py +++ b/main.py @@ -13,16 +13,14 @@ from os.path import expanduser # Some initial variables -version = "0.1.0" +version = "0.2.0" user = os.getlogin() initDirectory = expanduser("~") -currentDirectory = initDirectory argList = ["", ""] # Start work on checking whether a config file exists if os.path.isfile(expanduser("~") + "/.config/mash/mash.conf") == False: - print("Config file does not exist. Copying default file to ~/.config/mash/mash.conf") - shutil.copyfile("/etc/mash/mash.conf", (expanduser("~") + "/.config/mash/mash.conf")) + print("Config file does not exist. Make a file at .config/mash/mash.conf to configure things") # Parse config file, adding variables configFileFile = open((expanduser("~") + "/.config/mash/mash.conf")) @@ -50,7 +48,19 @@ for word in confArgList: for word in confArgList: if word == "motd:": motd = confArgList[confArgList.index(word) + 1] - + if word == ",mashPath:": + mashPathStr = (confArgList[confArgList.index(word) + 1]) + pathStrIndex = 0 + mashPath = [""] + for letter in mashPathStr: + if letter == ";": + pathStrIndex = pathStrIndex + 1 + mashPath.append("") + else: + try: + mashPath[pathStrIndex] = mashPath[pathStrIndex] + letter + except Exception: + mashPath.append(letter) # Write the time to the history file historyFile = open((expanduser("~") + "/.history.mash"), "a") historyFile.write("\n") @@ -59,103 +69,112 @@ historyFile.write("\n") # Welcome message. Configurable with "motd: (your motd here)," print(motd) +os.chdir(initDirectory) +currentDirectory = initDirectory # Main loop. -try: - while True: - # Set directory and prompt for input. - os.chdir(currentDirectory) - command = input(Fore.GREEN + user + Fore.WHITE + "@" + socket.gethostname() + Fore.BLUE + " " + currentDirectory + Fore.WHITE + " > ") - - # Clean some things up for the argument parser. - argNumber = 0 - argList.clear() +def mainLoop(startDir): + try: + currentDirectory = startDir + while True: + # Set directory and prompt for input. + os.chdir(currentDirectory) + command = input(Fore.GREEN + user + Fore.WHITE + "@" + socket.gethostname() + Fore.BLUE + " " + currentDirectory + Fore.WHITE + " > ") + + # Clean some things up for the argument parser. + argNumber = 0 + argList.clear() - # Argument parser - for letter in command: - if letter == " ": - argNumber = argNumber + 1 - else: + # Argument parser + for letter in command: + if letter == " ": + argNumber = argNumber + 1 + else: + try: + argList[argNumber] = argList[argNumber] + letter + except Exception: + argList.append(letter) + + # Start work on pipes. + for word in argList: + if word == "&&": + print("This hasnt been implemented yet hahahahah") + elif word == "&": + print("This hasnt been implemented yet heheheheh") + elif word == "|": + print("What are you? A pipe master? We dont like those people here") + + # Built in commands section + if argList[0] == "help": + print("This is Mash, Max's Shell. Mash has a few built in commands, which you can use to run commands, view files and interact with your system.") + print("Some commands you can run:") + print("") + print("cd Change your directory.") + print("history See previously ran commands.") + print("mat View contents of a file. If you're on a Unix-like OS, use 'cat' instead.") + print("mls View all files in a directory. If you're on a Unix-like OS, use 'ls' instead.") + print("version Print current version of Mash.") + print("exit Exit Mash.") + print("") + print("You can also run commands installed by your system. See your OS's documentation for more information.") + elif argList[0] == "exit": + exit() + elif argList[0] == "version": + print(version) + elif argList[0] == "mat": + matFile = open(argList[1]) + print(matFile.read()) + elif argList[0] == "mls": try: - argList[argNumber] = argList[argNumber] + letter - except Exception: - argList.append(letter) - - # Start work on pipes. - for word in argList: - if word == "&&": - print("This hasnt been implemented yet hahahahah") - elif word == "&": - print("This hasnt been implemented yet heheheheh") - elif word == "|": - print("What are you? A pipe master? We dont like those people here") - - # Built in commands section - if argList[0] == "help": - print("This is Mash, Max's Shell. Mash has a few built in commands, which you can use to run commands, view files and interact with your system.") - print("Some commands you can run:") - print("") - print("cd Change your directory.") - print("history See previously ran commands.") - print("mat View contents of a file. If you're on a Unix-like OS, use 'cat' instead.") - print("mls View all files in a directory. If you're on a Unix-like OS, use 'ls' instead.") - print("version Print current version of Mash.") - print("exit Exit Mash.") - print("") - print("You can also run commands installed by your system. See your OS's documentation for more information.") - elif argList[0] == "exit": - exit() - elif argList[0] == "version": - print(version) - elif argList[0] == "mat": - matFile = open(argList[1]) - print(matFile.read()) - elif argList[0] == "mls": - try: - if argList[1] == "": - print(os.listdir(currentDirectory)) - else: - argList[1] = mlsDirectory - if mlsDirectory[0] == "/": - print(os.listdir(mlsDirectory)) + if argList[1] == "": + print(os.listdir(currentDirectory)) else: - print(os.listdir(currentDirectory + "/" + mlsDirectory)) - except Exception: - print(os.listdir(currentDirectory)) - elif argList[0] == "cd": - try: - directoryForCD = argList[1] - if directoryForCD[0] == "~": - currentDirectory = expanduser("~") + directoryForCD.replace("~", "") - if directoryForCD[0] == "/": - currentDirectory = directoryForCD - else: - currentDirectory = (currentDirectory + "/" + directoryForCD) - except Exception: - print("Either a directory was not provided or an error occured.") - elif argList[0] == "history": - historyReadFile = open((expanduser("~") + "/.history.mash")) - print(historyReadFile.read()) - elif argList[0] == "mtime": - print(datetime.now()) - elif argList[0] == "printconf": - print(configFile) - # If a built in command isn't what you wanted, run a new subprocess. - else: - try: - subprocess.run(argList) - except Exception: - print("Command", command, "either doesn't exist, isn't in the path or isn't in this directory.") + argList[1] = mlsDirectory + if mlsDirectory[0] == "/": + print(os.listdir(mlsDirectory)) + else: + print(os.listdir(currentDirectory + "/" + mlsDirectory)) + except Exception: + print(os.listdir(currentDirectory)) + elif argList[0] == "cd": + try: + directoryForCD = argList[1] + if directoryForCD[0] == "~": + currentDirectory = expanduser("~") + directoryForCD.replace("~", "") + if directoryForCD[0] == "/": + currentDirectory = directoryForCD + else: + currentDirectory = (currentDirectory + "/" + directoryForCD) + except Exception: + print("Either a directory was not provided or an error occured.") + elif argList[0] == "history": + historyReadFile = open((expanduser("~") + "/.history.mash")) + print(historyReadFile.read()) + elif argList[0] == "mtime": + print(datetime.now()) + elif argList[0] == "printconf": + print(configFile) + # If a built in command isn't what you wanted, run a new subprocess. + else: + for word in mashPath: + if os.path.isfile(word + "/" + argList[0]): + argList[0] = (word + "/" + argList[0]) + try: + subprocess.run(argList) + except Exception: + print("Command", command, "either doesn't exist, isn't in the path or isn't in this directory.") - # Write to the history file - historyFile = open((expanduser("~") + "/.history.mash"), "a") - historyFile.write(command) - historyFile.write("\n") - historyFile.close() + # Write to the history file + historyFile = open((expanduser("~") + "/.history.mash"), "a") + historyFile.write(command) + historyFile.write("\n") + historyFile.close() -# Handle errors in the main loop -except Exception: - print("Looks like there was an error. Exiting...") + # Handle errors in the main loop + #except Exception: + #print("Looks like there was an error. Exiting...") # Handle ^C -except KeyboardInterrupt: - print(" detected! Exiting...") + except KeyboardInterrupt: + print("\n") + mainLoop(currentDirectory) +mainLoop(initDirectory) \ No newline at end of file