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"> <module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager"> <component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" /> <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" /> <orderEntry type="sourceFolder" forTests="false" />
</component> </component>
<component name="TestRunnerService"> <component name="TestRunnerService">

2
.idea/misc.xml generated
View file

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

View file

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

View file

@ -1,9 +1,16 @@
__author__ = "Jordonbc" __author__ = "Jordonbc"
import logging import logging
import time import time
import os
logging.basicConfig(filename='JDE/Logs/' + str(time.strftime('%d-%m-%Y-%H-%M%p') + ".log"), level=logging.DEBUG) if not os.path.exists("JDE/Logs"):
jdeLog = logging.getLogger("JDE.py") 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") jdeLog.info("Importing tkinter")
try: try:
@ -31,7 +38,7 @@ except Exception as e:
jdeLog.info("Importing JDE/Interfaces/desktop") jdeLog.info("Importing JDE/Interfaces/desktop")
try: try:
from JDE.Interfaces import desktop from JDE.Interfaces import desktop as desktop
jdeLog.info("Import Successful!") jdeLog.info("Import Successful!")
except Exception as e: except Exception as e:
@ -45,9 +52,6 @@ try:
userFile.close() userFile.close()
os.remove("active") os.remove("active")
print(username) desktop.desktop(windowTitle="JDE Desktop", username=username)
desktopApp = desktop.desktop
desktopApp(username=username)
except Exception as e: except Exception as e:
jdeLog.critical(str(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 import *
from tkinter.filedialog import askopenfilename, asksaveasfilename from tkinter.filedialog import askopenfilename, asksaveasfilename
jpadLog = logging.getLogger("jpad.py") jpadLog = logging.getLogger(__name__)
jpadLog.debug("Atempting to read settings file") jpadLog.debug("Atempting to read settings file")
try: try:
@ -15,14 +15,14 @@ except Exception as e:
class jpadEditor: class jpadEditor:
def minimize(self): def minimize(self):
jpadLog.debug("Running minimize") jpadLog.debug("Running "+jpadEditor.minimize.__name__)
try: try:
self.appFocus = 0 self.appFocus = 0
except Exception as e: except Exception as e:
jpadLog.error(str(e)) jpadLog.error(str(e))
def closeApp(self): def closeApp(self):
jpadLog.debug("Running closeApp") jpadLog.debug("Running "+jpadEditor.closeApp.__name__)
try: try:
# self.appIcon.destroy() # self.appIcon.destroy()
self.window.destroy() self.window.destroy()
@ -30,7 +30,7 @@ class jpadEditor:
jpadLog.error(str(e)) jpadLog.error(str(e))
def focusApp(self): def focusApp(self):
jpadLog.debug("Running focusApp") jpadLog.debug("Running "+jpadEditor.focusApp.__name__)
try: try:
if self.appFocus == 0: if self.appFocus == 0:
self.window.focus_force() self.window.focus_force()
@ -43,7 +43,7 @@ class jpadEditor:
jpadLog.error(str(e)) jpadLog.error(str(e))
def createMenu(self): def createMenu(self):
jpadLog.debug("Running createMenu") jpadLog.debug("Running "+jpadEditor.createMenu.__name__)
try: try:
self.menu = Menu(self.window) self.menu = Menu(self.window)
self.window.config(menu=self.menu) self.window.config(menu=self.menu)
@ -63,7 +63,7 @@ class jpadEditor:
jpadLog.error(str(e)) jpadLog.error(str(e))
def new(self): def new(self):
jpadLog.debug("Running new") jpadLog.debug("Running "+jpadEditor.new.__name__)
try: try:
self.window.title("Jpad Text Editor" + " File: New File") self.window.title("Jpad Text Editor" + " File: New File")
self.textPad.delete(0.0, END) self.textPad.delete(0.0, END)
@ -71,14 +71,14 @@ class jpadEditor:
jpadLog.error(str(e)) jpadLog.error(str(e))
def exit_command(self): def exit_command(self):
jpadLog.debug("Running exit_command") jpadLog.debug("Running "+jpadEditor.exit_command.__name__)
try: try:
self.closeApp() self.closeApp()
except Exception as e: except Exception as e:
jpadLog.error(str(e)) jpadLog.error(str(e))
def saveAs_command(self): def saveAs_command(self):
jpadLog.debug("Running saveAs_command") jpadLog.debug("Running "+jpadEditor.saveAs_command.__name__)
try: try:
self.jpadFile = asksaveasfilename(defaultextension=".txt", self.jpadFile = asksaveasfilename(defaultextension=".txt",
filetypes=[("Text Files", ".txt"), ("Python .py", ".py"), filetypes=[("Text Files", ".txt"), ("Python .py", ".py"),
@ -95,7 +95,7 @@ class jpadEditor:
jpadLog.error(str(e)) jpadLog.error(str(e))
def save_command(self): def save_command(self):
jpadLog.debug("Running save_command") jpadLog.debug("Running "+jpadEditor.save_command.__name__)
try: try:
self.jpadFile = open(str(self.jpadFile), "w") self.jpadFile = open(str(self.jpadFile), "w")
if self.jpadFile != None: if self.jpadFile != None:
@ -109,7 +109,7 @@ class jpadEditor:
jpadLog.error(str(e)) jpadLog.error(str(e))
def open_command(self): def open_command(self):
jpadLog.debug("Running open_command") jpadLog.debug("Running "+jpadEditor.open_command.__name__)
try: try:
self.jpadFile = askopenfilename(defaultextension=".txt", self.jpadFile = askopenfilename(defaultextension=".txt",
filetypes=[("Text Files", ".txt"), ("Python .py", ".py"), 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 # 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.