Completely rewritten the terminal and some minor bug fixes
This commit is contained in:
Jordon Brooks 2016-07-07 22:26:30 +01:00
parent 98085e84a4
commit 6667185945
24 changed files with 1058 additions and 45 deletions

2
.idea/JDE.iml generated
View file

@ -2,7 +2,7 @@
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="jdk" jdkName="Python 3.5.2rc1 (C:\Program Files\Python35\python.exe)" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="TestRunnerService">

2
.idea/misc.xml generated
View file

@ -26,7 +26,7 @@
<ConfirmationsSetting value="0" id="Add" />
<ConfirmationsSetting value="0" id="Remove" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.5.1+ (/usr/bin/python3.5)" project-jdk-type="Python SDK" />
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.5.2rc1 (C:\Program Files\Python35\python.exe)" project-jdk-type="Python SDK" />
<component name="masterDetails">
<states>
<state key="ScopeChooserConfigurable.UI">

6
.idea/vcs.xml generated
View file

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

629
.idea/workspace.xml generated Normal file
View file

@ -0,0 +1,629 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="7b9abe35-5710-453b-a8c9-7643dbb540ef" name="Default" comment="" />
<ignored path="JDE.iws" />
<ignored path=".idea/workspace.xml" />
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="TRACKING_ENABLED" value="true" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="ChangesViewManager" flattened_view="true" show_ignored="false" />
<component name="CreatePatchCommitExecutor">
<option name="PATCH_PATH" value="" />
</component>
<component name="ExecutionTargetManager" SELECTED_TARGET="default_target" />
<component name="FavoritesManager">
<favorites_list name="JDE" />
</component>
<component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file leaf-file-name="README.md" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/README.md">
<provider editor-type-id="MarkdownFxPreviewEditor">
<state />
</provider>
<provider selected="true" editor-type-id="split-provider[text-editor;MarkdownPreviewEditor]">
<state split_layout="FIRST">
<first_editor relative-caret-position="119">
<caret line="7" column="32" selection-start-line="7" selection-start-column="32" selection-end-line="7" selection-end-column="32" />
<folding />
</first_editor>
<second_editor />
</state>
</provider>
</entry>
</file>
</leaf>
</component>
<component name="FileTemplateManagerImpl">
<option name="RECENT_TEMPLATES">
<list>
<option value="Python Script" />
</list>
</option>
</component>
<component name="Git.Settings">
<option name="ROOT_SYNC" value="DONT_SYNC" />
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="IdeDocumentHistory">
<option name="CHANGED_PATHS">
<list>
<option value="$PROJECT_DIR$/JDE/JDE.py" />
<option value="$PROJECT_DIR$/Programs/jpad.py" />
<option value="$PROJECT_DIR$/JDE/Interfaces/login.py" />
<option value="$PROJECT_DIR$/Programs/PyIDE.py" />
<option value="$PROJECT_DIR$/test.py" />
<option value="$PROJECT_DIR$/Programs/terminal.py" />
<option value="$PROJECT_DIR$/JDE/Interfaces/desktop.py" />
<option value="$PROJECT_DIR$/Programs/webEdit/htmlEdit.py" />
<option value="$PROJECT_DIR$/README.md" />
</list>
</option>
</component>
<component name="ProjectFrameBounds">
<option name="x" value="-8" />
<option name="y" value="-8" />
<option name="width" value="1296" />
<option name="height" value="776" />
</component>
<component name="ProjectLevelVcsManager" settingsEditedManually="true">
<OptionsSetting value="true" id="Add" />
<OptionsSetting value="true" id="Remove" />
<OptionsSetting value="true" id="Checkout" />
<OptionsSetting value="true" id="Update" />
<OptionsSetting value="true" id="Status" />
<OptionsSetting value="true" id="Edit" />
<ConfirmationsSetting value="0" id="Add" />
<ConfirmationsSetting value="0" id="Remove" />
</component>
<component name="ProjectView">
<navigator currentView="ProjectPane" proportions="" version="1">
<flattenPackages />
<showMembers />
<showModules />
<showLibraryContents />
<hideEmptyPackages />
<abbreviatePackageNames />
<autoscrollToSource />
<autoscrollFromSource />
<sortByType />
<manualOrder />
<foldersAlwaysOnTop value="true" />
</navigator>
<panes>
<pane id="Scratches" />
<pane id="Scope" />
<pane id="ProjectPane">
<subPane>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="JDE" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="JDE" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="JDE" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="JDE" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="JDE" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="JDE" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
</subPane>
</pane>
</panes>
</component>
<component name="PropertiesComponent">
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
<property name="settings.editor.selected.configurable" value="project.propVCSSupport.Mappings" />
<property name="settings.editor.splitter.proportion" value="0.2" />
</component>
<component name="RunManager" selected="Python.run">
<configuration default="false" name="run" type="PythonConfigurationType" factoryName="Python" temporary="true">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="JDE" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/run.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<method />
</configuration>
<configuration default="false" name="terminal" type="PythonConfigurationType" factoryName="Python" temporary="true">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/Programs" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="JDE" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/Programs/terminal.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<method />
</configuration>
<configuration default="false" name="PyIDE" type="PythonConfigurationType" factoryName="Python" temporary="true">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/Programs" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="JDE" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/Programs/PyIDE.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<method />
</configuration>
<configuration default="false" name="test" type="PythonConfigurationType" factoryName="Python" temporary="true">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="JDE" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/test.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<method />
</configuration>
<configuration default="true" type="PythonConfigurationType" factoryName="Python">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="JDE" />
<option name="SCRIPT_NAME" value="" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<method />
</configuration>
<configuration default="true" type="Tox" factoryName="Tox">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="JDE" />
<method />
</configuration>
<configuration default="true" type="tests" factoryName="Attests">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="JDE" />
<option name="SCRIPT_NAME" value="" />
<option name="CLASS_NAME" value="" />
<option name="METHOD_NAME" value="" />
<option name="FOLDER_NAME" value="" />
<option name="TEST_TYPE" value="TEST_SCRIPT" />
<option name="PATTERN" value="" />
<option name="USE_PATTERN" value="false" />
<method />
</configuration>
<configuration default="true" type="tests" factoryName="Doctests">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="JDE" />
<option name="SCRIPT_NAME" value="" />
<option name="CLASS_NAME" value="" />
<option name="METHOD_NAME" value="" />
<option name="FOLDER_NAME" value="" />
<option name="TEST_TYPE" value="TEST_SCRIPT" />
<option name="PATTERN" value="" />
<option name="USE_PATTERN" value="false" />
<method />
</configuration>
<configuration default="true" type="tests" factoryName="Nosetests">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="JDE" />
<option name="SCRIPT_NAME" value="" />
<option name="CLASS_NAME" value="" />
<option name="METHOD_NAME" value="" />
<option name="FOLDER_NAME" value="" />
<option name="TEST_TYPE" value="TEST_SCRIPT" />
<option name="PATTERN" value="" />
<option name="USE_PATTERN" value="false" />
<option name="PARAMS" value="" />
<option name="USE_PARAM" value="false" />
<method />
</configuration>
<configuration default="true" type="tests" factoryName="Unittests">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="JDE" />
<option name="SCRIPT_NAME" value="" />
<option name="CLASS_NAME" value="" />
<option name="METHOD_NAME" value="" />
<option name="FOLDER_NAME" value="" />
<option name="TEST_TYPE" value="TEST_SCRIPT" />
<option name="PATTERN" value="" />
<option name="USE_PATTERN" value="false" />
<option name="PUREUNITTEST" value="true" />
<option name="PARAMS" value="" />
<option name="USE_PARAM" value="false" />
<method />
</configuration>
<configuration default="true" type="tests" factoryName="py.test">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="JDE" />
<option name="SCRIPT_NAME" value="" />
<option name="CLASS_NAME" value="" />
<option name="METHOD_NAME" value="" />
<option name="FOLDER_NAME" value="" />
<option name="TEST_TYPE" value="TEST_SCRIPT" />
<option name="PATTERN" value="" />
<option name="USE_PATTERN" value="false" />
<option name="testToRun" value="" />
<option name="keywords" value="" />
<option name="params" value="" />
<option name="USE_PARAM" value="false" />
<option name="USE_KEYWORD" value="false" />
<method />
</configuration>
<list size="4">
<item index="0" class="java.lang.String" itemvalue="Python.run" />
<item index="1" class="java.lang.String" itemvalue="Python.terminal" />
<item index="2" class="java.lang.String" itemvalue="Python.PyIDE" />
<item index="3" class="java.lang.String" itemvalue="Python.test" />
</list>
<recent_temporary>
<list size="4">
<item index="0" class="java.lang.String" itemvalue="Python.run" />
<item index="1" class="java.lang.String" itemvalue="Python.terminal" />
<item index="2" class="java.lang.String" itemvalue="Python.test" />
<item index="3" class="java.lang.String" itemvalue="Python.PyIDE" />
</list>
</recent_temporary>
</component>
<component name="ShelveChangesManager" show_recycled="false">
<option name="remove_strategy" value="false" />
</component>
<component name="SvnConfiguration">
<configuration />
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="7b9abe35-5710-453b-a8c9-7643dbb540ef" name="Default" comment="" />
<created>1466672063402</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1466672063402</updated>
</task>
<servers />
</component>
<component name="ToolWindowManager">
<frame x="-8" y="-8" width="1296" height="776" extended-state="6" />
<editor active="false" />
<layout>
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.2281399" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32882884" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
<window_info id="Python Console" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32970452" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32763976" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
</layout>
</component>
<component name="Vcs.Log.UiProperties">
<option name="RECENTLY_FILTERED_USER_GROUPS">
<collection />
</option>
<option name="RECENTLY_FILTERED_BRANCH_GROUPS">
<collection />
</option>
</component>
<component name="VcsContentAnnotationSettings">
<option name="myLimit" value="2678400000" />
</component>
<component name="VcsManagerConfiguration">
<ignored-roots>
<path value="$PROJECT_DIR$" />
</ignored-roots>
</component>
<component name="XDebuggerManager">
<breakpoint-manager>
<option name="time" value="3" />
</breakpoint-manager>
<watches-manager />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/README.md">
<provider editor-type-id="MarkdownFxPreviewEditor">
<state />
</provider>
<provider selected="true" editor-type-id="split-provider[text-editor;MarkdownPreviewEditor]">
<state split_layout="FIRST">
<first_editor relative-caret-position="0">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</first_editor>
<second_editor />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/README.md">
<provider editor-type-id="MarkdownFxPreviewEditor">
<state />
</provider>
<provider selected="true" editor-type-id="split-provider[text-editor;MarkdownPreviewEditor]">
<state split_layout="FIRST">
<first_editor relative-caret-position="0">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</first_editor>
<second_editor />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Programs/terminal.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Programs/terminal.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="323">
<caret line="19" column="12" selection-start-line="19" selection-start-column="12" selection-end-line="19" selection-end-column="32" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Programs/PyIDE.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Programs/terminal.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="323">
<caret line="19" column="12" selection-start-line="19" selection-start-column="12" selection-end-line="19" selection-end-column="32" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Programs/PyIDE.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/JDE/JDE.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Programs/imageViewer.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-620">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/JDE/Logs/23-06-2016-11-08AM.log" />
<entry file="file://$PROJECT_DIR$/JDE/Logs/23-06-2016-11-10AM.log" />
<entry file="file://$PROJECT_DIR$/JDE/Logs/23-06-2016-11-20AM.log" />
<entry file="file://$PROJECT_DIR$/JDE/Logs/23-06-2016-11-21AM.log" />
<entry file="file://$PROJECT_DIR$/JDE/Logs/23-06-2016-11-23AM.log" />
<entry file="file://$PROJECT_DIR$/JDE/Logs/23-06-2016-11-26AM.log" />
<entry file="file://$PROJECT_DIR$/JDE/Logs/23-06-2016-11-31AM.log" />
<entry file="file://$PROJECT_DIR$/JDE/Logs/23-06-2016-11-33AM.log" />
<entry file="file://$PROJECT_DIR$/JDE/Logs/23-06-2016-11-34AM.log" />
<entry file="file://$PROJECT_DIR$/JDE/Interfaces/start.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/JDE/Logs/23-06-2016-11-36AM.log" />
<entry file="file://$PROJECT_DIR$/JDE/Logs/23-06-2016-11-47AM.log" />
<entry file="file://$PROJECT_DIR$/JDE/Logs/23-06-2016-11-49AM.log" />
<entry file="file://$PROJECT_DIR$/JDE/Logs/23-06-2016-11-51AM.log" />
<entry file="file://$PROJECT_DIR$/JDE/Logs/23-06-2016-11-55AM.log" />
<entry file="file://$PROJECT_DIR$/JDE/Logs/23-06-2016-11-56AM.log" />
<entry file="file://$PROJECT_DIR$/JDE/Logs/23-06-2016-11-59AM.log" />
<entry file="file://$PROJECT_DIR$/JDE/Logs/23-06-2016-12-03PM.log" />
<entry file="file://$PROJECT_DIR$/JDE/Logs/23-06-2016-12-04PM.log" />
<entry file="file://$PROJECT_DIR$/JDE/Logs/23-06-2016-12-08PM.log" />
<entry file="file://$PROJECT_DIR$/JDE/Logs/23-06-2016-12-13PM.log" />
<entry file="file://$PROJECT_DIR$/JDE/Logs/23-06-2016-12-19PM.log" />
<entry file="file://$PROJECT_DIR$/JDE/Interfaces/login.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-986">
<caret line="33" column="33" selection-start-line="33" selection-start-column="33" selection-end-line="33" selection-end-column="33" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/JDE/Logs/23-06-2016-16-36PM.log" />
<entry file="file://$PROJECT_DIR$/Programs/jpad.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="254">
<caret line="87" column="57" selection-start-line="87" selection-start-column="57" selection-end-line="87" selection-end-column="57" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Programs/PyIDE.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="136">
<caret line="13" column="49" selection-start-line="13" selection-start-column="49" selection-end-line="13" selection-end-column="49" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/JDE/JDE.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="514">
<caret line="54" column="19" selection-start-line="54" selection-start-column="19" selection-end-line="54" selection-end-column="19" />
</state>
</provider>
</entry>
<entry file="file://$USER_HOME$/PycharmProjects/JDE-Terminal/test.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
</state>
</provider>
</entry>
<entry file="file://$USER_HOME$/PycharmProjects/JDE-Terminal/terminal.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="204">
<caret line="12" column="15" selection-start-line="12" selection-start-column="15" selection-end-line="12" selection-end-column="15" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Programs/minesweeper.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-1105">
<caret line="16" column="9" selection-start-line="16" selection-start-column="9" selection-end-line="16" selection-end-column="9" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/test.py" />
<entry file="file://$PROJECT_DIR$/run.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="17">
<caret line="1" column="0" selection-start-line="1" selection-start-column="0" selection-end-line="1" selection-end-column="0" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Programs/terminal.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="514">
<caret line="109" column="31" selection-start-line="109" selection-start-column="31" selection-end-line="109" selection-end-column="31" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/settings" />
<entry file="file://$PROJECT_DIR$/JDE/Interfaces/desktop.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="272">
<caret line="145" column="0" selection-start-line="145" selection-start-column="0" selection-end-line="145" selection-end-column="0" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Programs/webEdit/htmlEdit.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-1645">
<caret line="48" column="50" selection-start-line="48" selection-start-column="50" selection-end-line="48" selection-end-column="50" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/JDE/Logs/29-06-2016-14-14PM.log" />
<entry file="file://$PROJECT_DIR$/README.md">
<provider editor-type-id="text-editor">
<state relative-caret-position="34">
<caret line="2" column="0" selection-start-line="2" selection-start-column="0" selection-end-line="2" selection-end-column="0" />
<folding />
</state>
</provider>
<provider editor-type-id="MarkdownFxPreviewEditor">
<state />
</provider>
<provider selected="true" editor-type-id="split-provider[text-editor;MarkdownPreviewEditor]">
<state split_layout="FIRST">
<first_editor relative-caret-position="119">
<caret line="7" column="32" selection-start-line="7" selection-start-column="32" selection-end-line="7" selection-end-column="32" />
<folding />
</first_editor>
<second_editor />
</state>
</provider>
</entry>
</component>
</project>

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -9,8 +9,10 @@ from Programs import jpad
from Programs import info
from Programs import imageViewer
from Programs import minesweeper
from Programs import terminal
from Programs.webEdit import htmlEdit as webEdit
desktopLog = logging.getLogger("desktop.py")
desktopLog = logging.getLogger(__name__)
desktopLog.debug("Atempting to read settings file")
try:
@ -23,7 +25,7 @@ except Exception as e:
class desktop:
def box(self, event):
desktopLog.debug("Running box")
desktopLog.debug("Running "+desktop.box.__name__)
try:
if (self.clicked == False):
self.searchvar.set("")
@ -33,7 +35,7 @@ class desktop:
desktopLog.error(str(e))
def search_internet(self, event):
desktopLog.debug("Running search_internet")
desktopLog.debug("Running "+desktop.search_internet.__name__)
# TODO: Find a way to implement a browser
try:
webbrowser.open_new_tab("https://www.google.co.uk/#q=" + self.searchvar.get().replace(" ", "+"))
@ -41,7 +43,7 @@ class desktop:
desktopLog.error(str(e))
def reposition(self, event):
desktopLog.debug("Running reposition")
desktopLog.debug("Running "+desktop.reposition.__name__)
try:
self.cHeight = self.window.winfo_height()
self.cWidth = self.window.winfo_width()
@ -70,7 +72,7 @@ class desktop:
desktopLog.error(str(e))
def fullScreen(self, event):
desktopLog.debug("Running fullscreen")
desktopLog.debug("Running "+desktop.fullScreen.__name__)
try:
if self.max == 0:
self.window.attributes('-fullscreen', True)
@ -82,7 +84,7 @@ class desktop:
desktopLog.error(str(e))
def clockTick(self):
desktopLog.debug("Running clockTick")
desktopLog.debug("Running "+desktop.clockTick.__name__)
try:
self.desktopRefresh()
# cTime = time.strftime("%H:%M:%S")
@ -98,7 +100,7 @@ class desktop:
desktopLog.error(str(e))
def createSearch(self):
desktopLog.debug("Running createSearch")
desktopLog.debug("Running "+desktop.createSearch.__name__)
try:
self.searchText = Label(self.window, text="Search for: ")
self.searchvar = StringVar()
@ -111,7 +113,7 @@ class desktop:
desktopLog.error(str(e))
def contextMenuPopup(self, event):
desktopLog.debug("Running contextMenuPopup")
desktopLog.debug("Running "+desktop.contextMenuPopup.__name__)
try:
# start.start(self.menuColour, event.x_root, event.y_root)
self.contextMenu.post(event.x_root, event.y_root)
@ -126,7 +128,7 @@ class desktop:
self.contextMenu.add_command(label=label, command=command, state=state)
def createContextMenu(self):
desktopLog.debug("Running createContextMenu")
desktopLog.debug("Running "+desktop.createContextMenu.__name__)
try:
self.contextMenu = Menu(self.window, tearoff=0, bg=self.contextMenuColour)
@ -142,29 +144,36 @@ class desktop:
def viewImage():
imageViewer.imageViewer(self.window)
def runTerminal():
terminal.terminal(self.window)
def webEditor():
webEdit.webEdit(self.window)
self.contextMenu.add_command(label="Refresh", command=self.desktopRefresh)
self.contextMenu.add_cascade(label="Games", menu=self.games)
self.contextMenu.add_cascade(label="Applications", menu=self.applications)
self.applications.add_command(label="Jpad", command=jpadEdit)
self.applications.add_command(label="WebEdit", command=webEditor)
self.applications.add_command(label="View Images", command=viewImage)
self.games.add_command(label="Minesweeper", command=minesweeperRun)
self.applications.add_command(label="File Explorer", state=DISABLED)
self.applications.add_command(label="Hardware Monitor", state=DISABLED)
self.applications.add_command(label="Music Player", state=DISABLED)
self.applications.add_command(label="Info", command=info.info)
self.applications.add_command(label="Terminal", state=DISABLED)
self.applications.add_command(label="Terminal", state=ACTIVE, command=runTerminal)
self.applications.add_command(label="Settings", state=DISABLED)
self.contextMenu.add_command(label="Restart", state=DISABLED)
self.contextMenu.add_command(label="Shutdown", command=sys.exit)
self.contextMenu.add_command(label="Exit", command=sys.exit)
except Exception as e:
desktopLog.error(str(e))
def desktopRefresh(self):
try:
desktopLog.debug("Running desktopRefresh")
desktopLog.debug("Running "+desktop.desktopRefresh.__name__)
self.fileImage = PhotoImage(file="JDE/Images/file.png")
self.f = []
self.l = []
@ -220,14 +229,14 @@ class desktop:
desktopLog.error(str(e))
def refresh(self):
desktopLog.debug("Running refresh")
desktopLog.debug("Running "+desktop.refresh.__name__)
try:
self.desktopRefresh()
except Exception as e:
desktopLog.error(str(e))
def createStart(self):
desktopLog.debug("Running createStartPic")
desktopLog.debug("Running "+desktop.createStart.__name__)
try:
start.start(self.menuColour, int(0), int(self.window.winfo_height()))
except Exception as e:
@ -235,21 +244,21 @@ class desktop:
def createBackground(self):
try:
desktopLog.debug("Running createBackground")
desktopLog.debug("Running "+desktop.createBackground.__name__)
self.background_image = PhotoImage(file=self.background)
self.canvas.create_image(0, 0, image=self.background_image, anchor=NW)
except Exception as e:
desktopLog.error(str(e))
def createIcon(self):
desktopLog.debug("Running createIcon")
desktopLog.debug("Running"+desktop.createIcon.__name__)
try:
self.window.wm_iconbitmap("System/JordonOS Logo.ico")
except Exception as e:
desktopLog.error(str(e))
def createWindow(self):
desktopLog.debug("Running createWindow")
desktopLog.debug("Running "+desktop.createWindow.__name__)
try:
self.window = Tk()
self.window.title("Jordon's Desktop Environment")
@ -291,7 +300,7 @@ class desktop:
desktopLog.error(str(e))
def __init__(self, windowTitle="Desktop Environment", width="1920", height="1080", minWidth="", username=""):
desktopLog.debug("Running __init__")
desktopLog.debug("Running "+desktop.__init__.__name__)
try:
self.width = width
self.height = height

View file

@ -1,7 +1,7 @@
import logging
from tkinter import *
loginLog = logging.getLogger("login.py")
loginLog = logging.getLogger(__name__)
class login:
@ -20,6 +20,7 @@ class login:
self.file.close()
except:
self.message.configure(text="Err: Username or password is incorrect!")
self.file = open(self.userDirs + self.username.lower() + ".profile", "r")
self.line = self.file.readlines()

View file

@ -1,9 +1,16 @@
__author__ = "Jordonbc"
import logging
import time
import os
logging.basicConfig(filename='JDE/Logs/' + str(time.strftime('%d-%m-%Y-%H-%M%p') + ".log"), level=logging.DEBUG)
jdeLog = logging.getLogger("JDE.py")
if not os.path.exists("JDE/Logs"):
os.mkdir("JDE/Logs")
logging.basicConfig(filename='JDE/Logs/' + str(time.strftime('%d-%m-%Y-%H-%M%p') + ".log"), level=logging.DEBUG,
datefmt='%I:%M:%S %p',
format='%(asctime)s:%(name)s:%(lineno)d}:%(levelname)s - %(message)s')
jdeLog = logging.getLogger(__name__)
jdeLog.info("Importing tkinter")
try:
@ -31,7 +38,7 @@ except Exception as e:
jdeLog.info("Importing JDE/Interfaces/desktop")
try:
from JDE.Interfaces import desktop
from JDE.Interfaces import desktop as desktop
jdeLog.info("Import Successful!")
except Exception as e:
@ -45,9 +52,6 @@ try:
userFile.close()
os.remove("active")
print(username)
desktopApp = desktop.desktop
desktopApp(username=username)
desktop.desktop(windowTitle="JDE Desktop", username=username)
except Exception as e:
jdeLog.critical(str(e))

Binary file not shown.

73
Programs/PyIDE.py Normal file
View file

@ -0,0 +1,73 @@
from tkinter import *
import sys
from tkinter.filedialog import askopenfilename, asksaveasfilename
def PyIDE():
def openFile():
file = askopenfilename(defaultextension=".py",
filetypes=[("Python .py", ".py"), ("Python .pyw", ".pyw")])
if file != "":
with open(file, "r") as openfile:
input.delete(0.0, END)
input.insert(0.0, openfile.read())
def save():
file = asksaveasfilename(defaultextension=".py",
filetypes=[("Python .py", ".py"), ("Python .pyw", ".pyw")])
if file != "":
with open(file, "w") as saveFile:
saveFile.write(input.get(0.0, END))
class TextRedirector(object):
def __init__(self, widget, tag="stdout"):
self.widget = widget
self.tag = tag
def write(self, str):
output.delete(0.0, END)
self.widget.configure(state="normal")
self.widget.insert("end", str, (self.tag,))
self.widget.configure(state="disabled")
self.widget.see(END)
def run():
exec(input.get(0.0, END))
rootInterpreter = Tk()
rootInterpreter.title("Terminal")
rootInterpreter.geometry("200x200")
rootInterpreter.minsize(200, 200)
menu = Menu(rootInterpreter)
rootInterpreter.config(menu=menu)
filemenu = Menu(menu)
menu.add_cascade(label="File", menu=filemenu)
filemenu.add_command(label="New")
filemenu.add_command(label="Open", command=openFile)
filemenu.add_command(label="Save", command=save)
filemenu.add_command(label="Save As", state=DISABLED)
filemenu.add_separator()
filemenu.add_command(label="Exit", command=sys.exit)
output = Text(rootInterpreter, state=DISABLED, wrap="word")
output.configure(state=NORMAL)
output.configure(state=DISABLED)
output.pack(side=TOP, expand=YES, fill=BOTH)
input = Text(rootInterpreter)
input.focus()
input.pack(side=BOTTOM, expand=YES, fill=BOTH)
sys.stderr = TextRedirector(output, "stderr")
sys.stdout = TextRedirector(output, "stdout")
rootInterpreter.mainloop()
# rootInterpreter.protocol("WM_DELETE_WINDOW", closeApp)
PyIDE()

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -2,7 +2,7 @@ import logging
from tkinter import *
from tkinter.filedialog import askopenfilename, asksaveasfilename
jpadLog = logging.getLogger("jpad.py")
jpadLog = logging.getLogger(__name__)
jpadLog.debug("Atempting to read settings file")
try:
@ -15,14 +15,14 @@ except Exception as e:
class jpadEditor:
def minimize(self):
jpadLog.debug("Running minimize")
jpadLog.debug("Running "+jpadEditor.minimize.__name__)
try:
self.appFocus = 0
except Exception as e:
jpadLog.error(str(e))
def closeApp(self):
jpadLog.debug("Running closeApp")
jpadLog.debug("Running "+jpadEditor.closeApp.__name__)
try:
# self.appIcon.destroy()
self.window.destroy()
@ -30,7 +30,7 @@ class jpadEditor:
jpadLog.error(str(e))
def focusApp(self):
jpadLog.debug("Running focusApp")
jpadLog.debug("Running "+jpadEditor.focusApp.__name__)
try:
if self.appFocus == 0:
self.window.focus_force()
@ -43,7 +43,7 @@ class jpadEditor:
jpadLog.error(str(e))
def createMenu(self):
jpadLog.debug("Running createMenu")
jpadLog.debug("Running "+jpadEditor.createMenu.__name__)
try:
self.menu = Menu(self.window)
self.window.config(menu=self.menu)
@ -63,7 +63,7 @@ class jpadEditor:
jpadLog.error(str(e))
def new(self):
jpadLog.debug("Running new")
jpadLog.debug("Running "+jpadEditor.new.__name__)
try:
self.window.title("Jpad Text Editor" + " File: New File")
self.textPad.delete(0.0, END)
@ -71,14 +71,14 @@ class jpadEditor:
jpadLog.error(str(e))
def exit_command(self):
jpadLog.debug("Running exit_command")
jpadLog.debug("Running "+jpadEditor.exit_command.__name__)
try:
self.closeApp()
except Exception as e:
jpadLog.error(str(e))
def saveAs_command(self):
jpadLog.debug("Running saveAs_command")
jpadLog.debug("Running "+jpadEditor.saveAs_command.__name__)
try:
self.jpadFile = asksaveasfilename(defaultextension=".txt",
filetypes=[("Text Files", ".txt"), ("Python .py", ".py"),
@ -95,7 +95,7 @@ class jpadEditor:
jpadLog.error(str(e))
def save_command(self):
jpadLog.debug("Running save_command")
jpadLog.debug("Running "+jpadEditor.save_command.__name__)
try:
self.jpadFile = open(str(self.jpadFile), "w")
if self.jpadFile != None:
@ -109,7 +109,7 @@ class jpadEditor:
jpadLog.error(str(e))
def open_command(self):
jpadLog.debug("Running open_command")
jpadLog.debug("Running "+jpadEditor.open_command.__name__)
try:
self.jpadFile = askopenfilename(defaultextension=".txt",
filetypes=[("Text Files", ".txt"), ("Python .py", ".py"),

110
Programs/terminal.py Normal file
View file

@ -0,0 +1,110 @@
__author__ = "Jordonbc"
__version__ = "1.1.0"
from tkinter import *
default_stdin = sys.stdin
default_stdout = sys.stdout
default_stderr = sys.stderr
disabledCommands = ["help()", "exit()", "sys.exit()", "quit()"]
availableCommands = ["set", "bg", "fg", "clear"]
def commands():
print("Available Commands:")
print("set bg [HEX COLOUR]")
print("set fg [HEX COLOUR]")
print("clear")
print("run [file]")
class terminal:
class TextRedirector(object):
def __init__(self, widget, tag="stdout"):
self.widget = widget
self.tag = tag
def write(self, str):
self.widget.configure(state="normal")
self.widget.insert("end", str, (self.tag,))
self.widget.configure(state="disabled")
self.widget.see(END)
def __init__(self, master, command=None):
def run(command=None):
if input.get() != "":
print(input.get())
if input.get().startswith("set "):
if input.get().startswith("set bg "):
try:
output.configure(bg=str(input.get()).replace("set bg ", "").replace("\n", ""))
input.configure(bg=str(input.get()).replace("set bg ", "").replace("\n", ""))
except Exception as e:
print(str(e))
elif input.get().startswith("set fg "):
try:
if str(input.get()).replace("set fg ", "").replace("\n", "").lower() == "#ffffff":
output.configure(insertbackground="#000000")
input.configure(insertbackground="#000000")
elif str(input.get()).replace("set fg ", "").replace("\n", "").lower() == "#000000":
output.configure(insertbackground="#ffffff")
input.configure(insertbackground="#ffffff")
output.configure(fg=str(input.get()).replace("set fg ", "").replace("\n", ""))
input.configure(fg=str(input.get()).replace("set fg ", "").replace("\n", ""))
except Exception as e:
print(str(e))
if input.get() == "clear":
print("\n" * 25)
elif input.get() in disabledCommands:
input.delete(0, END)
print("Command is disabled.")
elif input.get().startswith("run "):
try:
exec(open(str(input.get()).replace("run ", ""), "r").read())
except Exception as e:
print(str(e))
else:
try:
exec(input.get())
except Exception as e:
print(str(e))
input.delete(0, END)
def closeApp():
sys.stdin = default_stdin
sys.stdout = default_stdout
sys.stderr = default_stderr
rootTerminal.destroy()
rootTerminal = Toplevel(master)
rootTerminal.title("Terminal")
rootTerminal.geometry("400x300")
rootTerminal.minsize(200, 200)
rootTerminal.configure(bg="#000000")
output = Text(rootTerminal, state=DISABLED, height=10, bg="#000000", fg="#FFFFFF", wrap="word", relief=FLAT)
output.configure(state=NORMAL)
output.insert(END, "JDE Terminal V " + __version__ + "\n")
output.insert(END, "Type commands() to see available commands\n")
output.configure(state=DISABLED)
output.pack(side=TOP, expand=YES, fill=BOTH)
input = Entry(rootTerminal, width=400, bg="#000000", fg="#FFFFFF", relief=FLAT)
input.focus()
input.bind("<Return>", run)
input.pack(side=BOTTOM)
output.configure(insertbackground="#ffffff")
input.configure(insertbackground="#ffffff")
sys.stdin = self.TextRedirector(output, "stdin")
sys.stderr = self.TextRedirector(output)
sys.stdout = self.TextRedirector(output)
rootTerminal.protocol("WM_DELETE_WINDOW", closeApp)
rootTerminal.mainloop()

View file

@ -0,0 +1,9 @@
<!DOCTYPE html>
<html>
<head>
<title>NEW WEBSITE</title>
</head>
<body>
<p>Your Website Text</p>
</body>
</html>

Binary file not shown.

View file

@ -0,0 +1,175 @@
__author__ = "Jordonbc"
import os
from tkinter import *
from tkinter.filedialog import *
from tkinter.messagebox import *
from tkinter.simpledialog import askstring
import webbrowser
settings = {}
try:
exec(open("Programs/webEdit/settings", "r").read(), settings)
except:
print("Settings Currupted!, Resetting")
with open("Programs/webEdit/settings", "w") as file:
file.write("""fgColour = '#000000'
bgColour = '#FFFFFF'
cursor = '#FFFFFF'""")
class webEdit:
def open(self):
self.saveLocation = askopenfilename(filetypes=[("HTML", "html"), ("All Files", "*")])
if self.saveLocation != "":
self.textbox.delete(0.0, END)
self.textbox.insert(0.0, open(self.saveLocation, "r").read().strip())
self.root.title("WebEdit - " + str(self.saveLocation))
def save(self):
self.saveLocation = asksaveasfilename(filetypes=[("HTML", "html"), ("All Files", "*")])
if self.saveLocation != "":
file = open(self.saveLocation, "w")
file.write(str(self.textbox.get(0.0, END)).strip())
file.close()
self.root.title("WebEdit - " + str(self.saveLocation))
def new(self):
if self.textbox.get(0.0, END) == "\n":
# template = askopenfile(defaultextension="HET", filetypes=[("Template", "HET"), ("All Files", "*")])
template = open("Programs/webEdit/Templates/HTML 5/Default.HET", "r")
if template != None:
template = template.read()
self.textbox.delete(0.0, END)
self.textbox.insert(0.0, template)
else:
if askyesno(title="Sure?", message="Are you sure?"):
# template = askopenfile(defaultextension="HET", filetypes=[("Template", "HET"), ("All Files", "*")])
template = open("Programs/webEdit/Templates/HTML 5/Default.HET", "r")
if template != None:
template = template.read()
self.textbox.delete(0.0, END)
self.textbox.insert(0.0, template)
self.root.title("WebEdit - New File")
def createMenu(self):
menu = Menu(self.root)
menu.configure(bg=settings["bgColour"], fg=settings["fgColour"])
fileMenu = Menu(menu)
fileMenu.configure(bg=settings["bgColour"], fg=settings["fgColour"])
viewMenu = Menu(menu)
viewMenu.configure(bg=settings["bgColour"], fg=settings["fgColour"])
snippetsMenu = Menu(menu)
snippetsMenu.configure(bg=settings["bgColour"], fg=settings["fgColour"])
headlineMenu = Menu(menu)
headlineMenu.configure(bg=settings["bgColour"], fg=settings["fgColour"])
self.root.configure(menu=menu)
menu.add_cascade(label="File", menu=fileMenu)
menu.add_cascade(label="Code Snippets", menu=snippetsMenu)
def paragraph():
self.textbox.insert(INSERT, "<p></p>")
def div():
self.textbox.insert(INSERT, "<div></div>")
def br():
self.textbox.insert(INSERT, "<br>")
def headline_1():
self.textbox.insert(INSERT, "<h1></h1>")
def headline_2():
self.textbox.insert(INSERT, "<h2></h2>")
def headline_3():
self.textbox.insert(INSERT, "<h3></h3>")
def headline_4():
self.textbox.insert(INSERT, "<h4></h4>")
def headline_5():
self.textbox.insert(INSERT, "<h5></h5>")
def headline_6():
self.textbox.insert(INSERT, "<h6></h6>")
def insertImage():
location = askstring(title="Image", prompt="Image")
self.textbox.insert(INSERT, "<img src='" + location + "'/>")
def Link():
address = askstring(title="Link", prompt="Link Address")
text = askstring(title="Link", prompt="Text")
self.textbox.insert(INSERT, "<a href='" + address + "'>"+text+"</a>")
def openSettings():
self.textbox.delete(0.0, END)
self.textbox.insert(0.0, open("settings").read())
def view_default():
if self.saveLocation != "":
webbrowser.open_new(self.saveLocation)
snippetsMenu.add_command(label="Paragraph", command=paragraph)
snippetsMenu.add_command(label="Division", command=div)
snippetsMenu.add_command(label="Image", command=insertImage)
snippetsMenu.add_command(label="Link", command=Link)
snippetsMenu.add_command(label="Break", command=br)
snippetsMenu.add_cascade(label="Headline", menu=headlineMenu)
headlineMenu.add_command(label="1", command=headline_1)
headlineMenu.add_command(label="2", command=headline_2)
headlineMenu.add_command(label="3", command=headline_3)
headlineMenu.add_command(label="4", command=headline_4)
headlineMenu.add_command(label="5", command=headline_5)
headlineMenu.add_command(label="6", command=headline_6)
fileMenu.add_command(label="New", command=self.new)
fileMenu.add_command(label="Save", command=self.save)
fileMenu.add_command(label="Open", command=self.open)
fileMenu.add_separator()
fileMenu.add_command(label="Settings", command=openSettings)
fileMenu.add_separator()
fileMenu.add_command(label="Exit", command=quit)
menu.add_command(label="View in browser", command=view_default)
# menu.add_cascade(label="View", menu=viewMenu)
# viewMenu.add_command(label="Default program", command=view_default)
def createWidgets(self):
self.scrollbar = Scrollbar(self.root)
self.scrollbar.pack(side=RIGHT, fill=Y)
self.textbox = Text(self.root)
self.textbox.pack(side=TOP, expand=YES, fill=BOTH)
self.textbox.configure(bg=settings["bgColour"], fg=settings["fgColour"], insertbackground=settings["cursor"],
yscrollcommand=self.scrollbar.set)
self.scrollbar.config(command=self.textbox.yview)
def saveShortcut(event):
self.save()
def openShortcut(event):
self.open()
def newShortcut(event):
self.new()
self.textbox.bind("<Control-s>", saveShortcut)
self.textbox.bind("<Control-o>", openShortcut)
self.textbox.bind("<Control-n>", newShortcut)
def __init__(self, master):
self.saveLocation = ""
self.root = Toplevel(master)
self.root.title("WebEdit")
self.root.configure(bg=settings["bgColour"])
self.createWidgets()
self.createMenu()
self.new()
self.root.mainloop()

View file

@ -0,0 +1,3 @@
fgColour = '#FFFFFF'
bgColour = '#111111'
cursor = '#FFFFFF'

View file

@ -1,2 +1,8 @@
# JDE
Glass OS Reborn!
Jordon's Desktop Environment is a complete rewrite of Glass OS which was one of my previous programs I made.
## What is JDE?
JDE stands for "Jordon's Desktop Environment" and is a complete rewrite of Glass OS which was another desktop environment. This means that JDE is NOT an operating system but is a overlay on top of your existing desktop.
## What are the requirements?
Well, JDE will work on any computer that is capable of running python 3. This means that even the tiny device you call a "raspberry pi" can run it!
Disclaimer: JDE has NOT been tested on mac, many linux distributions or windows 8.1 and below.