版本v0.1.1 ----1、新增显示输入法状态的功能;2、新增时间同步功能;3、新增翻译功能;4、新增咖啡因功能;5、新增屏幕取色功能;6、新增菜单栏管理
This commit is contained in:
parent
7352b399f4
commit
a75843b3a2
9
.idea/.hammerspoon.iml
generated
Normal file
9
.idea/.hammerspoon.iml
generated
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$" />
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
8
.idea/modules.xml
generated
Normal file
8
.idea/modules.xml
generated
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/.hammerspoon.iml" filepath="$PROJECT_DIR$/.idea/.hammerspoon.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
6
.idea/vcs.xml
generated
Normal file
6
.idea/vcs.xml
generated
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
878
.idea/workspace.xml
generated
Normal file
878
.idea/workspace.xml
generated
Normal file
@ -0,0 +1,878 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="495daa03-3ea5-4e8c-9013-c532511d508b" name="Default" comment="">
|
||||
<change beforePath="" afterPath="$PROJECT_DIR$/.idea/vcs.xml" />
|
||||
<change beforePath="" afterPath="$PROJECT_DIR$/data/config.json" />
|
||||
<change beforePath="" afterPath="$PROJECT_DIR$/data/dictHistory.json" />
|
||||
<change beforePath="" afterPath="$PROJECT_DIR$/icon/caffeine-off.pdf" />
|
||||
<change beforePath="" afterPath="$PROJECT_DIR$/icon/caffeine-on.pdf" />
|
||||
<change beforePath="" afterPath="$PROJECT_DIR$/modules/caffeine.lua" />
|
||||
<change beforePath="" afterPath="$PROJECT_DIR$/modules/commons.lua" />
|
||||
<change beforePath="" afterPath="$PROJECT_DIR$/modules/jsonFormat.lua" />
|
||||
<change beforePath="$PROJECT_DIR$/data/history.json" afterPath="$PROJECT_DIR$/data/history.json" />
|
||||
<change beforePath="$PROJECT_DIR$/init.lua" afterPath="$PROJECT_DIR$/init.lua" />
|
||||
<change beforePath="$PROJECT_DIR$/modules/hotkey.lua" afterPath="$PROJECT_DIR$/modules/hotkey.lua" />
|
||||
<change beforePath="$PROJECT_DIR$/modules/snippet.lua" afterPath="$PROJECT_DIR$/modules/snippet.lua" />
|
||||
</list>
|
||||
<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="FileEditorManager">
|
||||
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
|
||||
<file leaf-file-name="inputstat.lua" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/modules/inputstat.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="45">
|
||||
<caret line="3" column="48" lean-forward="false" selection-start-line="3" selection-start-column="48" selection-end-line="3" selection-end-column="48" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="init.lua" pinned="false" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/init.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="150">
|
||||
<caret line="10" column="21" lean-forward="true" selection-start-line="10" selection-start-column="21" selection-end-line="10" selection-end-column="21" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="hotkey.lua" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/modules/hotkey.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="60">
|
||||
<caret line="4" column="8" lean-forward="false" selection-start-line="4" selection-start-column="0" selection-end-line="4" selection-end-column="8" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="dict.lua" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/modules/dict.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="45">
|
||||
<caret line="3" column="48" lean-forward="false" selection-start-line="3" selection-start-column="48" selection-end-line="3" selection-end-column="48" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="commons.lua" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/modules/commons.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="1980">
|
||||
<caret line="132" column="39" lean-forward="false" selection-start-line="132" selection-start-column="39" selection-end-line="132" selection-end-column="39" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="history.json" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/data/history.json">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="859">
|
||||
<caret line="144" column="4" lean-forward="false" selection-start-line="144" selection-start-column="4" selection-end-line="144" selection-end-column="4" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="dictHistory.json" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/data/dictHistory.json">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="30">
|
||||
<caret line="2" column="1" lean-forward="true" selection-start-line="2" selection-start-column="1" selection-end-line="2" selection-end-column="1" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="config.json" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/data/config.json">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="165">
|
||||
<caret line="11" column="1" lean-forward="true" selection-start-line="11" selection-start-column="1" selection-end-line="11" selection-end-column="1" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="caffeine.lua" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/modules/caffeine.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="30">
|
||||
<caret line="2" column="48" lean-forward="false" selection-start-line="2" selection-start-column="48" selection-end-line="2" selection-end-column="48" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="reload.lua" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/modules/reload.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="30">
|
||||
<caret line="2" column="0" lean-forward="false" selection-start-line="2" selection-start-column="0" selection-end-line="2" selection-end-column="0" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
</leaf>
|
||||
</component>
|
||||
<component name="FileTemplateManagerImpl">
|
||||
<option name="RECENT_TEMPLATES">
|
||||
<list>
|
||||
<option value="NewLua" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="FindInProjectRecents">
|
||||
<findStrings>
|
||||
<find>SubStringGetByteCount</find>
|
||||
<find>historyPath</find>
|
||||
<find>translation</find>
|
||||
<find>hs.json</find>
|
||||
<find>setState</find>
|
||||
<find>isEm</find>
|
||||
<find>webview</find>
|
||||
<find>console.clearConsole()</find>
|
||||
<find>menubar</find>
|
||||
<find>config</find>
|
||||
<find>menubar.new(true)</find>
|
||||
<find>searchResult</find>
|
||||
<find>keywords</find>
|
||||
<find>hs.hotkey.bind</find>
|
||||
<find>hs.hotkey</find>
|
||||
<find>displayIdle</find>
|
||||
<find>syntaxHighlight</find>
|
||||
<find>hs.alert.show</find>
|
||||
<find>切换</find>
|
||||
<find>isSyncTime</find>
|
||||
<find>hs.dialog</find>
|
||||
<find>else if</find>
|
||||
<find>elseif</find>
|
||||
<find>colorDialog</find>
|
||||
<find>appid</find>
|
||||
<find>mChooser</find>
|
||||
<find>baiduAppSecret</find>
|
||||
<find>baiduAppid</find>
|
||||
<find>hs.dialog.blockAlert</find>
|
||||
<find>ydAppKey</find>
|
||||
</findStrings>
|
||||
<replaceStrings>
|
||||
<replace>self.menubar</replace>
|
||||
<replace>macMenubar</replace>
|
||||
</replaceStrings>
|
||||
</component>
|
||||
<component name="Git.Settings">
|
||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
||||
</component>
|
||||
<component name="GradleLocalSettings">
|
||||
<option name="externalProjectsViewState">
|
||||
<projects_view />
|
||||
</option>
|
||||
</component>
|
||||
<component name="IdeDocumentHistory">
|
||||
<option name="CHANGED_PATHS">
|
||||
<list>
|
||||
<option value="$PROJECT_DIR$/timesync/timesync.sh" />
|
||||
<option value="$PROJECT_DIR$/modules/LuaJson.lua" />
|
||||
<option value="$PROJECT_DIR$/modules/system.lua" />
|
||||
<option value="$PROJECT_DIR$/modules/colorpicker.lua" />
|
||||
<option value="$PROJECT_DIR$/modules/colorPicker.lua" />
|
||||
<option value="$PROJECT_DIR$/Spoons/KSheet.spoon/init.lua" />
|
||||
<option value="$PROJECT_DIR$/modules/utils.lua" />
|
||||
<option value="$PROJECT_DIR$/modules/caffine.lua" />
|
||||
<option value="$PROJECT_DIR$/modules/hotkey.lua" />
|
||||
<option value="$PROJECT_DIR$/modules/jsonFormat.lua" />
|
||||
<option value="$PROJECT_DIR$/modules/snippet.lua" />
|
||||
<option value="$PROJECT_DIR$/modules/dict1.lua" />
|
||||
<option value="$PROJECT_DIR$/modules/dict2.lua" />
|
||||
<option value="$PROJECT_DIR$/init.lua" />
|
||||
<option value="$PROJECT_DIR$/data/history.json" />
|
||||
<option value="$PROJECT_DIR$/modules/caffeine.lua" />
|
||||
<option value="$PROJECT_DIR$/modules/dict.lua" />
|
||||
<option value="$PROJECT_DIR$/modules/inputstat.lua" />
|
||||
<option value="$PROJECT_DIR$/modules/timesync.lua" />
|
||||
<option value="$PROJECT_DIR$/data/config.json" />
|
||||
<option value="$PROJECT_DIR$/modules/commons.lua" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" />
|
||||
<component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER" />
|
||||
<component name="JsGulpfileManager">
|
||||
<detection-done>true</detection-done>
|
||||
<sorting>DEFINITION_ORDER</sorting>
|
||||
</component>
|
||||
<component name="ProjectFrameBounds">
|
||||
<option name="y" value="23" />
|
||||
<option name="width" value="1920" />
|
||||
<option name="height" value="1009" />
|
||||
</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="Scope" />
|
||||
<pane id="ProjectPane">
|
||||
<subPane>
|
||||
<expand>
|
||||
<path>
|
||||
<item name=".hammerspoon" type="b2602c69:ProjectViewProjectNode" />
|
||||
<item name=".hammerspoon" type="462c0819:PsiDirectoryNode" />
|
||||
</path>
|
||||
<path>
|
||||
<item name=".hammerspoon" type="b2602c69:ProjectViewProjectNode" />
|
||||
<item name=".hammerspoon" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="data" type="462c0819:PsiDirectoryNode" />
|
||||
</path>
|
||||
<path>
|
||||
<item name=".hammerspoon" type="b2602c69:ProjectViewProjectNode" />
|
||||
<item name=".hammerspoon" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="modules" type="462c0819:PsiDirectoryNode" />
|
||||
</path>
|
||||
</expand>
|
||||
<select />
|
||||
</subPane>
|
||||
</pane>
|
||||
<pane id="Scratches" />
|
||||
<pane id="AndroidView" />
|
||||
<pane id="PackagesPane" />
|
||||
</panes>
|
||||
</component>
|
||||
<component name="PropertiesComponent">
|
||||
<property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
|
||||
<property name="settings.editor.selected.configurable" value="preferences.pluginManager" />
|
||||
<property name="project.structure.last.edited" value="Project" />
|
||||
<property name="project.structure.proportion" value="0.0" />
|
||||
<property name="project.structure.side.proportion" value="0.0" />
|
||||
<property name="WebServerToolWindowFactoryState" value="false" />
|
||||
<property name="aspect.path.notification.shown" value="true" />
|
||||
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
|
||||
</component>
|
||||
<component name="RecentsManager">
|
||||
<key name="MoveFile.RECENT_KEYS">
|
||||
<recent name="$PROJECT_DIR$/data" />
|
||||
</key>
|
||||
<key name="CopyFile.RECENT_KEYS">
|
||||
<recent name="$PROJECT_DIR$/modules" />
|
||||
<recent name="$PROJECT_DIR$/icon" />
|
||||
<recent name="$PROJECT_DIR$/data" />
|
||||
</key>
|
||||
</component>
|
||||
<component name="RunDashboard">
|
||||
<option name="ruleStates">
|
||||
<list>
|
||||
<RuleState>
|
||||
<option name="name" value="ConfigurationTypeDashboardGroupingRule" />
|
||||
</RuleState>
|
||||
<RuleState>
|
||||
<option name="name" value="StatusDashboardGroupingRule" />
|
||||
</RuleState>
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="RunManager">
|
||||
<configuration default="true" type="Applet" factoryName="Applet">
|
||||
<option name="HTML_USED" value="false" />
|
||||
<option name="WIDTH" value="400" />
|
||||
<option name="HEIGHT" value="300" />
|
||||
<option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy" />
|
||||
<module />
|
||||
</configuration>
|
||||
<configuration default="true" type="Application" factoryName="Application">
|
||||
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
|
||||
<option name="MAIN_CLASS_NAME" />
|
||||
<option name="VM_PARAMETERS" />
|
||||
<option name="PROGRAM_PARAMETERS" />
|
||||
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
||||
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
|
||||
<option name="ALTERNATIVE_JRE_PATH" />
|
||||
<option name="ENABLE_SWING_INSPECTOR" value="false" />
|
||||
<option name="ENV_VARIABLES" />
|
||||
<option name="PASS_PARENT_ENVS" value="true" />
|
||||
<module name="" />
|
||||
<envs />
|
||||
</configuration>
|
||||
<configuration default="true" type="JUnit" factoryName="JUnit">
|
||||
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
|
||||
<module name="" />
|
||||
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
|
||||
<option name="ALTERNATIVE_JRE_PATH" />
|
||||
<option name="PACKAGE_NAME" />
|
||||
<option name="MAIN_CLASS_NAME" />
|
||||
<option name="METHOD_NAME" />
|
||||
<option name="TEST_OBJECT" value="class" />
|
||||
<option name="VM_PARAMETERS" value="-ea" />
|
||||
<option name="PARAMETERS" />
|
||||
<option name="WORKING_DIRECTORY" value="%MODULE_WORKING_DIR%" />
|
||||
<option name="ENV_VARIABLES" />
|
||||
<option name="PASS_PARENT_ENVS" value="true" />
|
||||
<option name="TEST_SEARCH_SCOPE">
|
||||
<value defaultName="singleModule" />
|
||||
</option>
|
||||
<envs />
|
||||
<patterns />
|
||||
</configuration>
|
||||
<configuration default="true" type="Remote" factoryName="Remote">
|
||||
<option name="USE_SOCKET_TRANSPORT" value="true" />
|
||||
<option name="SERVER_MODE" value="false" />
|
||||
<option name="SHMEM_ADDRESS" value="javadebug" />
|
||||
<option name="HOST" value="localhost" />
|
||||
<option name="PORT" value="5005" />
|
||||
</configuration>
|
||||
<configuration default="true" type="TestNG" factoryName="TestNG">
|
||||
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
|
||||
<module name="" />
|
||||
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
|
||||
<option name="ALTERNATIVE_JRE_PATH" />
|
||||
<option name="SUITE_NAME" />
|
||||
<option name="PACKAGE_NAME" />
|
||||
<option name="MAIN_CLASS_NAME" />
|
||||
<option name="METHOD_NAME" />
|
||||
<option name="GROUP_NAME" />
|
||||
<option name="TEST_OBJECT" value="CLASS" />
|
||||
<option name="VM_PARAMETERS" value="-ea" />
|
||||
<option name="PARAMETERS" />
|
||||
<option name="WORKING_DIRECTORY" value="%MODULE_WORKING_DIR%" />
|
||||
<option name="OUTPUT_DIRECTORY" />
|
||||
<option name="ANNOTATION_TYPE" />
|
||||
<option name="ENV_VARIABLES" />
|
||||
<option name="PASS_PARENT_ENVS" value="true" />
|
||||
<option name="TEST_SEARCH_SCOPE">
|
||||
<value defaultName="singleModule" />
|
||||
</option>
|
||||
<option name="USE_DEFAULT_REPORTERS" value="false" />
|
||||
<option name="PROPERTIES_FILE" />
|
||||
<envs />
|
||||
<properties />
|
||||
<listeners />
|
||||
</configuration>
|
||||
<configuration default="true" type="#org.jetbrains.idea.devkit.run.PluginConfigurationType" factoryName="Plugin">
|
||||
<module name="" />
|
||||
<option name="VM_PARAMETERS" value="-Xmx512m -Xms256m -XX:MaxPermSize=250m -ea" />
|
||||
<option name="PROGRAM_PARAMETERS" />
|
||||
<predefined_log_file id="idea.log" enabled="true" />
|
||||
</configuration>
|
||||
<configuration name="timesync.lua" type="lua.app" factoryName="Lua Application" temporary="true">
|
||||
<option name="program" value="lua" />
|
||||
<option name="file" value="$PROJECT_DIR$/modules/timesync.lua" />
|
||||
<option name="workingDir" value="" />
|
||||
<option name="debuggerType" value="2" />
|
||||
<option name="params" value="" />
|
||||
<option name="charset" value="UTF-8" />
|
||||
<option name="showConsole" value="true" />
|
||||
</configuration>
|
||||
<recent_temporary>
|
||||
<list size="1">
|
||||
<item index="0" class="java.lang.String" itemvalue="Lua Application.timesync.lua" />
|
||||
</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="495daa03-3ea5-4e8c-9013-c532511d508b" name="Default" comment="" />
|
||||
<created>1602820978741</created>
|
||||
<option name="number" value="Default" />
|
||||
<option name="presentableId" value="Default" />
|
||||
<updated>1602820978741</updated>
|
||||
<workItem from="1602820980264" duration="616000" />
|
||||
<workItem from="1602821729128" duration="86000" />
|
||||
<workItem from="1602821832919" duration="32183000" />
|
||||
<workItem from="1602822925699" duration="14000" />
|
||||
<workItem from="1602822943319" duration="1000" />
|
||||
<workItem from="1602822966566" duration="642000" />
|
||||
<workItem from="1602910724222" duration="3375000" />
|
||||
<workItem from="1602916148688" duration="33848000" />
|
||||
<workItem from="1603074238740" duration="59948000" />
|
||||
<workItem from="1603457165086" duration="40772000" />
|
||||
</task>
|
||||
<servers />
|
||||
</component>
|
||||
<component name="TimeTrackingManager">
|
||||
<option name="totallyTimeSpent" value="171485000" />
|
||||
</component>
|
||||
<component name="ToolWindowManager">
|
||||
<frame x="0" y="23" width="1920" height="1009" extended-state="0" />
|
||||
<editor active="true" />
|
||||
<layout>
|
||||
<window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
|
||||
<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="Palette	" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Image Layers" 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="6" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Capture Analysis" active="false" anchor="right" 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.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
|
||||
<window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="LuaCheck" 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="10" 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="8" 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.33" sideWeight="0.5" order="2" 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="9" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Capture Tool" 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="false" content_ui="tabs" />
|
||||
<window_info id="Designer" 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="3" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
|
||||
<window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
|
||||
<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="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="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="UI Designer" 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="4" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Theme Preview" active="false" anchor="right" 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="5" side_tool="true" 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" />
|
||||
<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="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="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" />
|
||||
</layout>
|
||||
</component>
|
||||
<component name="TypeScriptGeneratedFilesManager">
|
||||
<option name="version" value="1" />
|
||||
</component>
|
||||
<component name="VcsContentAnnotationSettings">
|
||||
<option name="myLimit" value="2678400000" />
|
||||
</component>
|
||||
<component name="XDebuggerManager">
|
||||
<breakpoint-manager>
|
||||
<option name="time" value="4" />
|
||||
</breakpoint-manager>
|
||||
<watches-manager />
|
||||
</component>
|
||||
<component name="editorHistoryManager">
|
||||
<entry file="file://$PROJECT_DIR$/modules/windows.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="270">
|
||||
<caret line="18" column="32" lean-forward="false" selection-start-line="18" selection-start-column="32" selection-end-line="18" selection-end-column="32" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/modules/snippet.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="2415">
|
||||
<caret line="161" column="37" lean-forward="false" selection-start-line="161" selection-start-column="37" selection-end-line="161" selection-end-column="37" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/timesync/timesync.sh">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="195">
|
||||
<caret line="13" column="4" lean-forward="true" selection-start-line="13" selection-start-column="4" selection-end-line="13" selection-end-column="4" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/data/history.json">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="1950">
|
||||
<caret line="130" column="54" lean-forward="true" selection-start-line="130" selection-start-column="54" selection-end-line="130" selection-end-column="54" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/init.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="180">
|
||||
<caret line="12" column="0" lean-forward="true" selection-start-line="12" selection-start-column="0" selection-end-line="12" selection-end-column="0" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/modules/launcher.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="465">
|
||||
<caret line="31" column="39" lean-forward="false" selection-start-line="31" selection-start-column="39" selection-end-line="31" selection-end-column="39" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/modules/reload.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="60">
|
||||
<caret line="4" column="21" lean-forward="false" selection-start-line="4" selection-start-column="9" selection-end-line="4" selection-end-column="21" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/modules/system.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="0">
|
||||
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/timesync/timesync.sh">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="90">
|
||||
<caret line="6" column="0" lean-forward="true" selection-start-line="6" selection-start-column="0" selection-end-line="6" selection-end-column="0" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/modules/timesync.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="75">
|
||||
<caret line="5" column="60" lean-forward="false" selection-start-line="5" selection-start-column="60" selection-end-line="5" selection-end-column="60" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/modules/windows.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="270">
|
||||
<caret line="18" column="32" lean-forward="true" selection-start-line="18" selection-start-column="32" selection-end-line="18" selection-end-column="32" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/modules/snippet.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="2415">
|
||||
<caret line="161" column="37" lean-forward="true" selection-start-line="161" selection-start-column="37" selection-end-line="161" selection-end-column="37" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/modules/inputstat.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="180">
|
||||
<caret line="12" column="0" lean-forward="true" selection-start-line="12" selection-start-column="0" selection-end-line="12" selection-end-column="0" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/init.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="150">
|
||||
<caret line="10" column="0" lean-forward="false" selection-start-line="10" selection-start-column="0" selection-end-line="10" selection-end-column="0" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/modules/dict.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="0">
|
||||
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/modules/hotkey.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="45">
|
||||
<caret line="3" column="29" lean-forward="false" selection-start-line="3" selection-start-column="29" selection-end-line="3" selection-end-column="29" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/modules/launcher.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="420">
|
||||
<caret line="28" column="19" lean-forward="false" selection-start-line="28" selection-start-column="19" selection-end-line="28" selection-end-column="19" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/modules/system.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="0">
|
||||
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/modules/timesync.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="60">
|
||||
<caret line="4" column="9" lean-forward="false" selection-start-line="4" selection-start-column="9" selection-end-line="4" selection-end-column="9" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/modules/snippet.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="135">
|
||||
<caret line="9" column="9" lean-forward="false" selection-start-line="9" selection-start-column="9" selection-end-line="9" selection-end-column="9" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/timesync/timesync.sh">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="210">
|
||||
<caret line="14" column="4" lean-forward="true" selection-start-line="14" selection-start-column="4" selection-end-line="14" selection-end-column="4" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/init.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="150">
|
||||
<caret line="10" column="0" lean-forward="true" selection-start-line="10" selection-start-column="0" selection-end-line="10" selection-end-column="0" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/modules/dict.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="0">
|
||||
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/modules/hotkey.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="45">
|
||||
<caret line="3" column="29" lean-forward="true" selection-start-line="3" selection-start-column="29" selection-end-line="3" selection-end-column="29" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/modules/LuaJson.lua" />
|
||||
<entry file="file://$PROJECT_DIR$/timesync/timesync.sh">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="225">
|
||||
<caret line="15" column="0" lean-forward="false" selection-start-line="15" selection-start-column="0" selection-end-line="15" selection-end-column="0" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/Spoons/ColorPicker.spoon/docs.json" />
|
||||
<entry file="file://$PROJECT_DIR$/Spoons/ColorPicker.spoon/init.lua" />
|
||||
<entry file="file://$PROJECT_DIR$/Spoons/SpoonInstall.spoon/init.lua" />
|
||||
<entry file="file://$PROJECT_DIR$/Spoons/KSheet.spoon/init.lua" />
|
||||
<entry file="file://$PROJECT_DIR$/Spoons/Caffeine.spoon/docs.json">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="-1022">
|
||||
<caret line="23" column="24" lean-forward="true" selection-start-line="23" selection-start-column="24" selection-end-line="23" selection-end-column="24" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/Spoons/Caffeine.spoon/init.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="630">
|
||||
<caret line="42" column="31" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="119" selection-end-column="0" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="jar://$APPLICATION_PLUGINS_DIR$/intellij-emmylua/lib/intellij-emmylua-1.3.2.142-IDEA172.jar!/std/Lua53/debug.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="1110">
|
||||
<caret line="74" column="15" lean-forward="false" selection-start-line="74" selection-start-column="15" selection-end-line="74" selection-end-column="15" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/modules/colorPicker.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="-1938">
|
||||
<caret line="22" column="49" lean-forward="false" selection-start-line="22" selection-start-column="49" selection-end-line="22" selection-end-column="49" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/modules/dict.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="900">
|
||||
<caret line="60" column="18" lean-forward="true" selection-start-line="60" selection-start-column="18" selection-end-line="60" selection-end-column="18" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/modules/snippet.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="1230">
|
||||
<caret line="82" column="37" lean-forward="true" selection-start-line="82" selection-start-column="37" selection-end-line="82" selection-end-column="37" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/modules/system.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="255">
|
||||
<caret line="17" column="25" lean-forward="true" selection-start-line="17" selection-start-column="25" selection-end-line="17" selection-end-column="25" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/modules/windows.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="15">
|
||||
<caret line="18" column="32" lean-forward="false" selection-start-line="18" selection-start-column="32" selection-end-line="18" selection-end-column="32" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/modules/timesync.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="570">
|
||||
<caret line="38" column="15" lean-forward="true" selection-start-line="38" selection-start-column="15" selection-end-line="38" selection-end-column="15" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/modules/launcher.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="450">
|
||||
<caret line="30" column="19" lean-forward="false" selection-start-line="30" selection-start-column="19" selection-end-line="30" selection-end-column="19" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/modules/jsonFormat.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="30">
|
||||
<caret line="2" column="23" lean-forward="true" selection-start-line="2" selection-start-column="23" selection-end-line="2" selection-end-column="50" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/modules/hotkey.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="60">
|
||||
<caret line="4" column="8" lean-forward="false" selection-start-line="4" selection-start-column="0" selection-end-line="4" selection-end-column="8" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/modules/dict.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="45">
|
||||
<caret line="3" column="48" lean-forward="false" selection-start-line="3" selection-start-column="48" selection-end-line="3" selection-end-column="48" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/modules/caffeine.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="30">
|
||||
<caret line="2" column="48" lean-forward="false" selection-start-line="2" selection-start-column="48" selection-end-line="2" selection-end-column="48" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/modules/reload.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="30">
|
||||
<caret line="2" column="0" lean-forward="false" selection-start-line="2" selection-start-column="0" selection-end-line="2" selection-end-column="0" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/data/history.json">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="859">
|
||||
<caret line="144" column="4" lean-forward="false" selection-start-line="144" selection-start-column="4" selection-end-line="144" selection-end-column="4" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/data/dictHistory.json">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="30">
|
||||
<caret line="2" column="1" lean-forward="true" selection-start-line="2" selection-start-column="1" selection-end-line="2" selection-end-column="1" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/data/config.json">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="165">
|
||||
<caret line="11" column="1" lean-forward="true" selection-start-line="11" selection-start-column="1" selection-end-line="11" selection-end-column="1" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/modules/commons.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="1980">
|
||||
<caret line="132" column="39" lean-forward="false" selection-start-line="132" selection-start-column="39" selection-end-line="132" selection-end-column="39" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/modules/inputstat.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="45">
|
||||
<caret line="3" column="48" lean-forward="false" selection-start-line="3" selection-start-column="48" selection-end-line="3" selection-end-column="48" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/init.lua">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="150">
|
||||
<caret line="10" column="21" lean-forward="true" selection-start-line="10" selection-start-column="21" selection-end-line="10" selection-end-column="21" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</component>
|
||||
<component name="masterDetails">
|
||||
<states>
|
||||
<state key="GlobalLibrariesConfigurable.UI">
|
||||
<settings>
|
||||
<splitter-proportions>
|
||||
<option name="proportions">
|
||||
<list>
|
||||
<option value="0.2" />
|
||||
</list>
|
||||
</option>
|
||||
</splitter-proportions>
|
||||
</settings>
|
||||
</state>
|
||||
<state key="JdkListConfigurable.UI">
|
||||
<settings>
|
||||
<splitter-proportions>
|
||||
<option name="proportions">
|
||||
<list>
|
||||
<option value="0.2" />
|
||||
</list>
|
||||
</option>
|
||||
</splitter-proportions>
|
||||
</settings>
|
||||
</state>
|
||||
<state key="ProjectJDKs.UI">
|
||||
<settings>
|
||||
<splitter-proportions>
|
||||
<option name="proportions">
|
||||
<list>
|
||||
<option value="0.2" />
|
||||
</list>
|
||||
</option>
|
||||
</splitter-proportions>
|
||||
</settings>
|
||||
</state>
|
||||
<state key="ProjectLibrariesConfigurable.UI">
|
||||
<settings>
|
||||
<splitter-proportions>
|
||||
<option name="proportions">
|
||||
<list>
|
||||
<option value="0.2" />
|
||||
</list>
|
||||
</option>
|
||||
</splitter-proportions>
|
||||
</settings>
|
||||
</state>
|
||||
</states>
|
||||
</component>
|
||||
</project>
|
234
Spoons/Caffeine.spoon/caffeine-off.pdf
Normal file
234
Spoons/Caffeine.spoon/caffeine-off.pdf
Normal file
File diff suppressed because one or more lines are too long
238
Spoons/Caffeine.spoon/caffeine-on.pdf
Normal file
238
Spoons/Caffeine.spoon/caffeine-on.pdf
Normal file
File diff suppressed because one or more lines are too long
143
Spoons/Caffeine.spoon/docs.json
Normal file
143
Spoons/Caffeine.spoon/docs.json
Normal file
@ -0,0 +1,143 @@
|
||||
[
|
||||
{
|
||||
"Command": [],
|
||||
"Constant": [],
|
||||
"Constructor": [],
|
||||
"Deprecated": [],
|
||||
"Field": [],
|
||||
"Function": [],
|
||||
"Method": [
|
||||
{
|
||||
"def": "Caffeine:bindHotkeys(mapping)",
|
||||
"desc": "Binds hotkeys for Caffeine",
|
||||
"doc": "Binds hotkeys for Caffeine\n\nParameters:\n * mapping - A table containing hotkey modifier/key details for the following items:\n * toggle - This will toggle the state of display sleep prevention, and update the menubar graphic\n\nReturns:\n * The Caffeine object",
|
||||
"name": "bindHotkeys",
|
||||
"parameters": [
|
||||
" * mapping - A table containing hotkey modifier/key details for the following items:",
|
||||
" * toggle - This will toggle the state of display sleep prevention, and update the menubar graphic"
|
||||
],
|
||||
"returns": [
|
||||
" * The Caffeine object"
|
||||
],
|
||||
"signature": "Caffeine:bindHotkeys(mapping)",
|
||||
"stripped_doc": "",
|
||||
"type": "Method"
|
||||
},
|
||||
{
|
||||
"def": "Caffeine:setState(on)",
|
||||
"desc": "Sets whether or not caffeination should be enabled",
|
||||
"doc": "Sets whether or not caffeination should be enabled\n\nParameters:\n * on - A boolean, true if screens should be kept awake, false to let macOS send them to sleep\n\nReturns:\n * None",
|
||||
"name": "setState",
|
||||
"parameters": [
|
||||
" * on - A boolean, true if screens should be kept awake, false to let macOS send them to sleep"
|
||||
],
|
||||
"returns": [
|
||||
" * None"
|
||||
],
|
||||
"signature": "Caffeine:setState(on)",
|
||||
"stripped_doc": "",
|
||||
"type": "Method"
|
||||
},
|
||||
{
|
||||
"def": "Caffeine:start()",
|
||||
"desc": "Starts Caffeine",
|
||||
"doc": "Starts Caffeine\n\nParameters:\n * None\n\nReturns:\n * The Caffeine object",
|
||||
"name": "start",
|
||||
"parameters": [
|
||||
" * None"
|
||||
],
|
||||
"returns": [
|
||||
" * The Caffeine object"
|
||||
],
|
||||
"signature": "Caffeine:start()",
|
||||
"stripped_doc": "",
|
||||
"type": "Method"
|
||||
},
|
||||
{
|
||||
"def": "Caffeine:stop()",
|
||||
"desc": "Stops Caffeine",
|
||||
"doc": "Stops Caffeine\n\nParameters:\n * None\n\nReturns:\n * The Caffeine object",
|
||||
"name": "stop",
|
||||
"parameters": [
|
||||
" * None"
|
||||
],
|
||||
"returns": [
|
||||
" * The Caffeine object"
|
||||
],
|
||||
"signature": "Caffeine:stop()",
|
||||
"stripped_doc": "",
|
||||
"type": "Method"
|
||||
}
|
||||
],
|
||||
"Variable": [],
|
||||
"desc": "Prevent the screen from going to sleep",
|
||||
"doc": "Prevent the screen from going to sleep\nDownload: [https://github.com/Hammerspoon/Spoons/raw/master/Spoons/Caffeine.spoon.zip](https://github.com/Hammerspoon/Spoons/raw/master/Spoons/Caffeine.spoon.zip)",
|
||||
"items": [
|
||||
{
|
||||
"def": "Caffeine:bindHotkeys(mapping)",
|
||||
"desc": "Binds hotkeys for Caffeine",
|
||||
"doc": "Binds hotkeys for Caffeine\n\nParameters:\n * mapping - A table containing hotkey modifier/key details for the following items:\n * toggle - This will toggle the state of display sleep prevention, and update the menubar graphic\n\nReturns:\n * The Caffeine object",
|
||||
"name": "bindHotkeys",
|
||||
"parameters": [
|
||||
" * mapping - A table containing hotkey modifier/key details for the following items:",
|
||||
" * toggle - This will toggle the state of display sleep prevention, and update the menubar graphic"
|
||||
],
|
||||
"returns": [
|
||||
" * The Caffeine object"
|
||||
],
|
||||
"signature": "Caffeine:bindHotkeys(mapping)",
|
||||
"stripped_doc": "",
|
||||
"type": "Method"
|
||||
},
|
||||
{
|
||||
"def": "Caffeine:setState(on)",
|
||||
"desc": "Sets whether or not caffeination should be enabled",
|
||||
"doc": "Sets whether or not caffeination should be enabled\n\nParameters:\n * on - A boolean, true if screens should be kept awake, false to let macOS send them to sleep\n\nReturns:\n * None",
|
||||
"name": "setState",
|
||||
"parameters": [
|
||||
" * on - A boolean, true if screens should be kept awake, false to let macOS send them to sleep"
|
||||
],
|
||||
"returns": [
|
||||
" * None"
|
||||
],
|
||||
"signature": "Caffeine:setState(on)",
|
||||
"stripped_doc": "",
|
||||
"type": "Method"
|
||||
},
|
||||
{
|
||||
"def": "Caffeine:start()",
|
||||
"desc": "Starts Caffeine",
|
||||
"doc": "Starts Caffeine\n\nParameters:\n * None\n\nReturns:\n * The Caffeine object",
|
||||
"name": "start",
|
||||
"parameters": [
|
||||
" * None"
|
||||
],
|
||||
"returns": [
|
||||
" * The Caffeine object"
|
||||
],
|
||||
"signature": "Caffeine:start()",
|
||||
"stripped_doc": "",
|
||||
"type": "Method"
|
||||
},
|
||||
{
|
||||
"def": "Caffeine:stop()",
|
||||
"desc": "Stops Caffeine",
|
||||
"doc": "Stops Caffeine\n\nParameters:\n * None\n\nReturns:\n * The Caffeine object",
|
||||
"name": "stop",
|
||||
"parameters": [
|
||||
" * None"
|
||||
],
|
||||
"returns": [
|
||||
" * The Caffeine object"
|
||||
],
|
||||
"signature": "Caffeine:stop()",
|
||||
"stripped_doc": "",
|
||||
"type": "Method"
|
||||
}
|
||||
],
|
||||
"name": "Caffeine",
|
||||
"stripped_doc": "Download: [https://github.com/Hammerspoon/Spoons/raw/master/Spoons/Caffeine.spoon.zip](https://github.com/Hammerspoon/Spoons/raw/master/Spoons/Caffeine.spoon.zip)",
|
||||
"submodules": [],
|
||||
"type": "Module"
|
||||
}
|
||||
]
|
119
Spoons/Caffeine.spoon/init.lua
Normal file
119
Spoons/Caffeine.spoon/init.lua
Normal file
@ -0,0 +1,119 @@
|
||||
--- === Caffeine ===
|
||||
---
|
||||
--- Prevent the screen from going to sleep
|
||||
--- Download: [https://github.com/Hammerspoon/Spoons/raw/master/Spoons/Caffeine.spoon.zip](https://github.com/Hammerspoon/Spoons/raw/master/Spoons/Caffeine.spoon.zip)
|
||||
local obj = { __gc = true }
|
||||
--obj.__index = obj
|
||||
setmetatable(obj, obj)
|
||||
obj.__gc = function(t)
|
||||
t:stop()
|
||||
end
|
||||
|
||||
-- Metadata
|
||||
obj.name = "Caffeine"
|
||||
obj.version = "1.0"
|
||||
obj.author = "Chris Jones <cmsj@tenshu.net>"
|
||||
obj.homepage = "https://github.com/Hammerspoon/Spoons"
|
||||
obj.license = "MIT - https://opensource.org/licenses/MIT"
|
||||
|
||||
obj.menuBarItem = nil
|
||||
obj.hotkeyToggle = nil
|
||||
|
||||
-- Internal function used to find our location, so we know where to load files from
|
||||
local function script_path()
|
||||
local str = debug.getinfo(2, "S").source:sub(2)
|
||||
return str:match("(.*/)")
|
||||
end
|
||||
obj.spoonPath = script_path()
|
||||
|
||||
function obj:init()
|
||||
end
|
||||
|
||||
--- Caffeine:bindHotkeys(mapping)
|
||||
--- Method
|
||||
--- Binds hotkeys for Caffeine
|
||||
---
|
||||
--- Parameters:
|
||||
--- * mapping - A table containing hotkey modifier/key details for the following items:
|
||||
--- * toggle - This will toggle the state of display sleep prevention, and update the menubar graphic
|
||||
---
|
||||
--- Returns:
|
||||
--- * The Caffeine object
|
||||
function obj:bindHotkeys(mapping)
|
||||
if (self.hotkeyToggle) then
|
||||
self.hotkeyToggle:delete()
|
||||
end
|
||||
local toggleMods = mapping["toggle"][1]
|
||||
local toggleKey = mapping["toggle"][2]
|
||||
self.hotkeyToggle = hs.hotkey.new(toggleMods, toggleKey, function() self.clicked() end)
|
||||
|
||||
return self
|
||||
end
|
||||
|
||||
--- Caffeine:start()
|
||||
--- Method
|
||||
--- Starts Caffeine
|
||||
---
|
||||
--- Parameters:
|
||||
--- * None
|
||||
---
|
||||
--- Returns:
|
||||
--- * The Caffeine object
|
||||
function obj:start()
|
||||
if self.menuBarItem then self:stop() end
|
||||
self.menuBarItem = hs.menubar.new()
|
||||
self.menuBarItem:setClickCallback(self.clicked)
|
||||
if (self.hotkeyToggle) then
|
||||
self.hotkeyToggle:enable()
|
||||
end
|
||||
self.setDisplay(hs.caffeinate.get("displayIdle"))
|
||||
|
||||
return self
|
||||
end
|
||||
|
||||
--- Caffeine:stop()
|
||||
--- Method
|
||||
--- Stops Caffeine
|
||||
---
|
||||
--- Parameters:
|
||||
--- * None
|
||||
---
|
||||
--- Returns:
|
||||
--- * The Caffeine object
|
||||
function obj:stop()
|
||||
if self.menuBarItem then self.menuBarItem:delete() end
|
||||
if (self.hotkeyToggle) then
|
||||
self.hotkeyToggle:disable()
|
||||
end
|
||||
self.menuBarItem = nil
|
||||
return self
|
||||
end
|
||||
|
||||
function obj.setDisplay(state)
|
||||
local result
|
||||
if state then
|
||||
result = obj.menuBarItem:setIcon(obj.spoonPath.."/caffeine-on.pdf")
|
||||
else
|
||||
result = obj.menuBarItem:setIcon(obj.spoonPath.."/caffeine-off.pdf")
|
||||
end
|
||||
end
|
||||
|
||||
function obj.clicked()
|
||||
obj.setDisplay(hs.caffeinate.toggle("displayIdle"))
|
||||
end
|
||||
|
||||
--- Caffeine:setState(on)
|
||||
--- Method
|
||||
--- Sets whether or not caffeination should be enabled
|
||||
---
|
||||
--- Parameters:
|
||||
--- * on - A boolean, true if screens should be kept awake, false to let macOS send them to sleep
|
||||
---
|
||||
--- Returns:
|
||||
--- * None
|
||||
function obj:setState(on)
|
||||
hs.caffeinate.set("displayIdle", on)
|
||||
obj.setDisplay(on)
|
||||
end
|
||||
|
||||
return obj
|
12
data/config.json
Normal file
12
data/config.json
Normal file
@ -0,0 +1,12 @@
|
||||
[
|
||||
{
|
||||
"youdaoAppid" : "",
|
||||
"youdaoAppSecret" : "",
|
||||
"dictEngine" : "百度",
|
||||
"isSyncTime" : "off",
|
||||
"rootPassword" : "",
|
||||
"caffeine" : "off",
|
||||
"baiduAppSecret" : "eI3BLUVURG5Zzb8Tdgdm",
|
||||
"baiduAppid" : "20201017000591957"
|
||||
}
|
||||
]
|
3
data/dictHistory.json
Normal file
3
data/dictHistory.json
Normal file
@ -0,0 +1,3 @@
|
||||
[
|
||||
|
||||
]
|
@ -1,4 +1,12 @@
|
||||
[
|
||||
{
|
||||
"subText" : "chrome:\/\/inspect",
|
||||
"text" : "chrome:\/\/inspect"
|
||||
},
|
||||
{
|
||||
"subText" : "chrome:\/\/version\/",
|
||||
"text" : "chrome:\/\/version\/"
|
||||
},
|
||||
{
|
||||
"subText" : "cmd|cat filename|显示或连接文件",
|
||||
"text" : "cat"
|
||||
@ -127,6 +135,10 @@
|
||||
"subText" : "cmd|vi ~\/.bash_profile|修改环境变量",
|
||||
"text" : "vi ~\/.bash_profile"
|
||||
},
|
||||
{
|
||||
"subText" : "cmd|which python|查看指令的路径",
|
||||
"text" : "which"
|
||||
},
|
||||
{
|
||||
"subText" : "code|java|author注释模板",
|
||||
"text" : "\/** \n* @Title: ${file_name} \n* @Package ${package_name} \n* @Description: ${todo}(用一句话描述该文件做什么) \n* @author sugood\n* @date ${date} ${time} \n* @version V1.0 \n*\/"
|
||||
|
234
icon/caffeine-off.pdf
Normal file
234
icon/caffeine-off.pdf
Normal file
File diff suppressed because one or more lines are too long
238
icon/caffeine-on.pdf
Normal file
238
icon/caffeine-on.pdf
Normal file
File diff suppressed because one or more lines are too long
BIN
icon/input_abc.pdf
Normal file
BIN
icon/input_abc.pdf
Normal file
Binary file not shown.
BIN
icon/input_cn.pdf
Normal file
BIN
icon/input_cn.pdf
Normal file
Binary file not shown.
BIN
icon/input_en.pdf
Normal file
BIN
icon/input_en.pdf
Normal file
Binary file not shown.
BIN
icon/input_u.pdf
Normal file
BIN
icon/input_u.pdf
Normal file
Binary file not shown.
12
init.lua
12
init.lua
@ -1,9 +1,15 @@
|
||||
hs.configdir = os.getenv('HOME') .. '/.hammerspoon'
|
||||
package.path = hs.configdir .. '/?.lua;' .. hs.configdir .. '/?/init.lua;' .. hs.configdir .. '/Spoons/?.spoon/init.lua;' .. package.path
|
||||
|
||||
require "modules/reload"
|
||||
require "modules/commons"
|
||||
require "modules/hotkey"
|
||||
require "modules/system"
|
||||
require "modules/windows"
|
||||
require "modules/launcher"
|
||||
require "modules/snippet"
|
||||
|
||||
-- 监听~./hammerspoon/data/中的文件,如果有改变就自动更新
|
||||
hs.pathwatcher.new(os.getenv("HOME") .. "/.hammerspoon/data", hs.reload):start()
|
||||
require "modules/timesync"
|
||||
require "modules/inputstat"
|
||||
require "modules/dict"
|
||||
require "modules/jsonFormat"
|
||||
require "modules/caffeine"
|
||||
|
16
modules/caffeine.lua
Normal file
16
modules/caffeine.lua
Normal file
@ -0,0 +1,16 @@
|
||||
---
|
||||
--- 控制空闲时是否允许屏幕睡眠
|
||||
--- Created by sugood(https://github.com/sugood).
|
||||
--- DateTime: 2020/10/24 14:13
|
||||
---
|
||||
|
||||
if config ~=nil and config[1].caffeine == 'on' then
|
||||
print("设置状态栏")
|
||||
local menuBarItem = hs.menubar.new()
|
||||
menuBarItem:setTitle("")
|
||||
menuBarItem:setIcon("~/.hammerspoon/icon/caffeine-on.pdf")
|
||||
hs.caffeinate.set("displayIdle", true)
|
||||
else
|
||||
hs.caffeinate.set("displayIdle", false)
|
||||
end
|
||||
|
226
modules/commons.lua
Normal file
226
modules/commons.lua
Normal file
@ -0,0 +1,226 @@
|
||||
---
|
||||
--- 公共函数
|
||||
--- Created by sugood(https://github.com/sugood).
|
||||
--- DateTime: 2020/10/24 14:13
|
||||
---
|
||||
local console = require("hs.console")
|
||||
version = "v0.1.1"
|
||||
configPath= "~/.hammerspoon/data/config.json"
|
||||
config = {}
|
||||
colorDialog = hs.dialog.color
|
||||
|
||||
function switchDict()
|
||||
if config[1].dictEngine == '百度' then
|
||||
config[1].dictEngine = '有道'
|
||||
else
|
||||
config[1].dictEngine = '百度'
|
||||
end
|
||||
hs.json.write(config,configPath, true, true)
|
||||
hs.reload()
|
||||
end
|
||||
|
||||
function switchTime()
|
||||
if config[1].isSyncTime == 'on' then
|
||||
config[1].isSyncTime = 'off'
|
||||
else
|
||||
if(stringIsEmpty(config[1].rootPassword)) then
|
||||
local result,subText = hs.dialog.textPrompt("输入开机密码", "时间同步操作需要开机密码", '', "确定", "取消", true)
|
||||
if result == "确定" and stringIsEmpty(subText) == false then
|
||||
config[1].rootPassword = subText
|
||||
config[1].isSyncTime = 'on'
|
||||
end
|
||||
else
|
||||
config[1].isSyncTime = 'on'
|
||||
end
|
||||
end
|
||||
hs.json.write(config,configPath, true, true)
|
||||
hs.reload()
|
||||
end
|
||||
|
||||
function switchCaffeine()
|
||||
if config[1].caffeine == 'on' then
|
||||
config[1].caffeine = 'off'
|
||||
else
|
||||
config[1].caffeine = 'on'
|
||||
end
|
||||
hs.json.write(config,configPath, true, true)
|
||||
hs.reload()
|
||||
end
|
||||
|
||||
--设置全局菜单栏
|
||||
function initMenu()
|
||||
macMenubar = hs.menubar.new()
|
||||
macMenubar:setTitle("")
|
||||
macMenubar:setIcon()
|
||||
macMenubar:setMenu( {
|
||||
{ title = "Reload config", fn = function()
|
||||
hs.reload()
|
||||
end },
|
||||
{ title = "Open console", fn = function() hs.openConsole() end },
|
||||
{ title = "Relaunch", fn = function() hs.relaunch() end },
|
||||
{ title = "-" },
|
||||
{ title = "翻译平台:" .. config[1].dictEngine, fn = function()
|
||||
if (hs.dialog.blockAlert("支持百度和有道翻译,确认切换?","有道翻译需先申请有道云API","确定","取消","informational") == "确定") then
|
||||
switchDict()
|
||||
end
|
||||
end },
|
||||
{ title = "输入appID", fn = function()
|
||||
if(config[1].dictEngine == '有道') then
|
||||
local result,subText = hs.dialog.textPrompt("输入appID", "请通过有道云API获取appkey", config[1].youdaoAppid, "确定", "取消", false)
|
||||
if result == "确定" then
|
||||
config[1].youdaoAppid = subText
|
||||
hs.json.write(config,configPath, true, true)
|
||||
end
|
||||
elseif(config[1].dictEngine == '百度') then
|
||||
local result,subText = hs.dialog.textPrompt("输入appID", "百度翻译可不修改", config[1].baiduAppid, "确定", "取消", true)
|
||||
if result == "确定" then
|
||||
config[1].baiduAppid = subText
|
||||
hs.json.write(config,configPath, true, true)
|
||||
end
|
||||
end
|
||||
end },
|
||||
{ title = "输入appSecret", fn = function()
|
||||
if(config[1].dictEngine == '有道') then
|
||||
local result,subText = hs.dialog.textPrompt("输入appSecret", "请通过有道云API获取appSecret", config[1].youdaoAppSecret, "确定", "取消", false)
|
||||
if result == "确定" then
|
||||
config[1].youdaoAppSecret = subText
|
||||
hs.json.write(config,configPath, true, true)
|
||||
end
|
||||
elseif(config[1].dictEngine == '百度') then
|
||||
local result,subText = hs.dialog.textPrompt("输入appSecret", "百度翻译可不修改", config[1].baiduAppSecret, "确定", "取消", true)
|
||||
if result == "确定" then
|
||||
config[1].baiduAppSecret = subText
|
||||
hs.json.write(config,configPath, true, true)
|
||||
end
|
||||
end
|
||||
end },
|
||||
{ title = "-" },
|
||||
{ title = "时间同步:" .. config[1].isSyncTime, fn = function()
|
||||
switchTime()
|
||||
end },
|
||||
{ title = "输入开机密码", fn = function()
|
||||
local result,subText = hs.dialog.textPrompt("输入开机密码", "时间同步操作需要开机密码", config[1].rootPassword, "确定", "取消", true)
|
||||
if result == "确定" then
|
||||
config[1].rootPassword = subText
|
||||
hs.json.write(config,configPath, true, true)
|
||||
end
|
||||
end },
|
||||
{ title = "-" },
|
||||
{ title = "屏幕取色", fn = function()
|
||||
hs.openConsole(true)
|
||||
colorDialog.show()
|
||||
colorDialog.mode("RGB")
|
||||
colorDialog.callback(function(a,b)
|
||||
if b then
|
||||
hs.closeConsole()
|
||||
end
|
||||
end)
|
||||
hs.closeConsole()
|
||||
end },
|
||||
{ title = "-" },
|
||||
{ title = "咖啡因:" .. config[1].caffeine, fn = function()
|
||||
switchCaffeine()
|
||||
end },
|
||||
{ title = "-" },
|
||||
{ title = "打开键盘偏好设置", fn = function() hs.osascript.applescript([[
|
||||
tell application "System Preferences"
|
||||
reveal anchor "InputSources" of pane "com.apple.preference.keyboard"
|
||||
activate
|
||||
end tell ]]
|
||||
) end },
|
||||
{ title = "-" },
|
||||
{ title = "关于", fn = function()
|
||||
if (hs.dialog.blockAlert("当前版本:"..version,"整理了一些能够提高效率的脚本,打开主页查看详细说明","确定","取消","informational") == "确定") then
|
||||
hs.urlevent.openURL("https://github.com/sugood/hammerspoon")
|
||||
end
|
||||
end },
|
||||
})
|
||||
end
|
||||
|
||||
function initData()
|
||||
if hs.json.read(configPath) ~= nil then
|
||||
config = hs.json.read(configPath)
|
||||
end
|
||||
initMenu()
|
||||
-- 修改全局alert样式
|
||||
hs.alert.defaultStyle.strokeColor = {white = 1, alpha = 0}
|
||||
hs.alert.defaultStyle.fillColor = {white = 0.05, alpha = 0.75}
|
||||
hs.alert.defaultStyle.radius = 10
|
||||
--清空打印信息
|
||||
console.clearConsole()
|
||||
--
|
||||
colorDialog.mode("RGB")
|
||||
end
|
||||
|
||||
initData()
|
||||
|
||||
-- 字符串判空
|
||||
function stringIsEmpty(str)
|
||||
return str == nil or str == ''
|
||||
end
|
||||
|
||||
--生成url编码
|
||||
function decodeURI(s)
|
||||
s = string.gsub(s, "([^%w%.%- ])", function(c) return string.format("%%%02X", string.byte(c)) end)
|
||||
return string.gsub(s, " ", "+")
|
||||
end
|
||||
|
||||
--截取UTF8字符
|
||||
function SubStringUTF8(str, startIndex, endIndex)
|
||||
if startIndex < 0 then
|
||||
startIndex = SubStringGetTotalIndex(str) + startIndex + 1;
|
||||
end
|
||||
|
||||
if endIndex ~= nil and endIndex < 0 then
|
||||
endIndex = SubStringGetTotalIndex(str) + endIndex + 1;
|
||||
end
|
||||
|
||||
if endIndex == nil then
|
||||
return string.sub(str, SubStringGetTrueIndex(str, startIndex));
|
||||
else
|
||||
return string.sub(str, SubStringGetTrueIndex(str, startIndex), SubStringGetTrueIndex(str, endIndex + 1) - 1);
|
||||
end
|
||||
end
|
||||
|
||||
--获取中英混合UTF8字符串的真实字符数量
|
||||
function SubStringGetTotalIndex(str)
|
||||
local curIndex = 0;
|
||||
local i = 1;
|
||||
local lastCount = 1;
|
||||
repeat
|
||||
lastCount = SubStringGetByteCount(str, i)
|
||||
i = i + lastCount;
|
||||
curIndex = curIndex + 1;
|
||||
until(lastCount == 0);
|
||||
return curIndex - 1;
|
||||
end
|
||||
|
||||
function SubStringGetTrueIndex(str, index)
|
||||
local curIndex = 0;
|
||||
local i = 1;
|
||||
local lastCount = 1;
|
||||
repeat
|
||||
lastCount = SubStringGetByteCount(str, i)
|
||||
i = i + lastCount;
|
||||
curIndex = curIndex + 1;
|
||||
until(curIndex >= index);
|
||||
return i - lastCount;
|
||||
end
|
||||
|
||||
--返回当前字符实际占用的字符数
|
||||
function SubStringGetByteCount(str, index)
|
||||
local curByte = string.byte(str, index)
|
||||
local byteCount = 1;
|
||||
if curByte == nil then
|
||||
byteCount = 0
|
||||
elseif curByte > 0 and curByte <= 127 then
|
||||
byteCount = 1
|
||||
elseif curByte>=192 and curByte<=223 then
|
||||
byteCount = 2
|
||||
elseif curByte>=224 and curByte<=239 then
|
||||
byteCount = 3
|
||||
elseif curByte>=240 and curByte<=247 then
|
||||
byteCount = 4
|
||||
end
|
||||
return byteCount;
|
||||
end
|
205
modules/dict.lua
Normal file
205
modules/dict.lua
Normal file
@ -0,0 +1,205 @@
|
||||
---
|
||||
--- 快速打开翻译,支持百度和有道翻译API
|
||||
--- 有道API需要用户自行申请。
|
||||
--- Created by sugood(https://github.com/sugood).
|
||||
--- DateTime: 2020/10/23 11:12
|
||||
---
|
||||
|
||||
|
||||
local chooser = require("hs.chooser")
|
||||
local menubar = hs.menubar.new()
|
||||
local dictHistoryPath= "~/.hammerspoon/data/dictHistory.json"
|
||||
local ydUrl = 'https://openapi.youdao.com/api'
|
||||
local bdUrl = 'https://fanyi-api.baidu.com/api/trans/vip/translate'
|
||||
local bdWeburl = 'https://fanyi.baidu.com/#'
|
||||
local ydWeburl = 'http://youdao.com/w/'
|
||||
|
||||
local mChooser
|
||||
local searchResult = {}
|
||||
local isFirst = true
|
||||
function truncate(q)
|
||||
if q == nil or q == '' then
|
||||
return ''
|
||||
end
|
||||
local len = SubStringGetTotalIndex(q)
|
||||
if (len <= 20) then
|
||||
return q
|
||||
else
|
||||
return SubStringUTF8(q,1,10)..len..SubStringUTF8(q,len-9)
|
||||
end
|
||||
end
|
||||
|
||||
function newWebview()
|
||||
local cscreen = hs.screen.mainScreen()
|
||||
local cres = cscreen:fullFrame()
|
||||
sheetView = hs.webview.newBrowser({
|
||||
x = cres.x+cres.w*0.15/2,
|
||||
y = cres.y+cres.h*0.25/2,
|
||||
w = cres.w*0.85,
|
||||
h = cres.h*0.75
|
||||
})
|
||||
sheetView:windowTitle("CheatSheets")
|
||||
sheetView:windowStyle("utility")
|
||||
sheetView:titleVisibility("hidden")
|
||||
sheetView:allowGestures(true)
|
||||
sheetView:allowNewWindows(false)
|
||||
sheetView:allowTextEntry(true)
|
||||
sheetView:closeOnEscape(true)
|
||||
sheetView:bringToFront(false)
|
||||
sheetView:darkMode(true)
|
||||
sheetView:reload(false)
|
||||
sheetView:level(hs.drawing.windowLevels.mainMenu)
|
||||
end
|
||||
|
||||
-- 右键弹出菜单
|
||||
local rightClickCallbackFn = function(index)
|
||||
if index and index > 0 then
|
||||
local selectResult = mChooser:selectedRowContents(index)
|
||||
if selectResult == nil or stringIsEmpty(selectResult.text) then
|
||||
return
|
||||
end
|
||||
menubar = hs.menubar.new(false)
|
||||
menubar:setTitle("Hidden Menu")
|
||||
menubar:setMenu( {
|
||||
{ title = "查看详情", fn = function()
|
||||
hs.dialog.blockAlert(selectResult.text, selectResult.subText,"确定","","informational")
|
||||
end },
|
||||
{ title = "查看网页", fn = function()
|
||||
sheetView:url(selectResult.webUrl):show()
|
||||
end },
|
||||
})
|
||||
menubar:popupMenu(hs.mouse.getAbsolutePosition(), true)
|
||||
end
|
||||
end
|
||||
|
||||
function getBaiduApi(q)
|
||||
headers = {ContentType = "application/x-www-form-urlencoded;charset=utf-8"}
|
||||
salt = tostring(hs.timer.secondsSinceEpoch()*1000)
|
||||
curtime = tostring(os.time())
|
||||
geturl = "q="..q.."&from=auto&to=auto&appid=".. config[1].baiduAppid .."&salt="..salt.."&sign="..hs.hash.MD5(config[1].baiduAppid ..q..salt..config[1].baiduAppSecret)
|
||||
--print('geturl:'..geturl)
|
||||
|
||||
hs.http.doAsyncRequest(bdUrl,'POST',geturl,headers,function(code, body, htable)
|
||||
if code ~= 200 then
|
||||
print('get weather error:'..code)
|
||||
return
|
||||
else
|
||||
searchResult = {}
|
||||
results = hs.json.decode(body)
|
||||
print('results:'..hs.inspect(results))
|
||||
if(results['trans_result']) then
|
||||
item = {}
|
||||
item.text = results['trans_result'][1].dst
|
||||
item.subText = q
|
||||
item.webUrl = bdWeburl..results['from'].."/"..results['to'].."/"..decodeURI(q)
|
||||
table.insert(searchResult,1,item)
|
||||
end
|
||||
mChooser:choices(searchResult)
|
||||
hs.json.write(searchResult,dictHistoryPath, true, true)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
function getYoudaoApi(q)
|
||||
headers = {ContentType = "application/x-www-form-urlencoded;charset=utf-8"}
|
||||
salt = tostring(hs.timer.secondsSinceEpoch()*1000)
|
||||
curtime = tostring(os.time())
|
||||
geturl = "q="..q.."&from=auto&to=auto&signType=v3&curtime="..curtime.."&appKey="..config[1].youdaoAppid..
|
||||
"&salt="..salt.."&sign="..hs.hash.SHA256(config[1].youdaoAppid..truncate(q)..salt..curtime..config[1].youdaoAppSecret)
|
||||
--print('geturl:'..geturl)
|
||||
|
||||
hs.http.doAsyncRequest(ydUrl,'POST',geturl,headers,function(code, body, htable)
|
||||
if code ~= 200 then
|
||||
print('get weather error:'..code)
|
||||
return
|
||||
else
|
||||
searchResult = {}
|
||||
results = hs.json.decode(body)
|
||||
print('results:'..hs.inspect(results))
|
||||
if(results['web']) then
|
||||
--逆序插入
|
||||
for i=#results['web'],1,-1 do
|
||||
item = {}
|
||||
item.text = table.concat(results['web'][i].value,", ")
|
||||
item.subText = results['web'][i].key
|
||||
item.webUrl = ydWeburl..decodeURI(item.subText)
|
||||
table.insert(searchResult,1,item)
|
||||
end
|
||||
end
|
||||
if(results['basic']) then
|
||||
if (results['basic']['exam_type']) then
|
||||
item = {}
|
||||
item.text = table.concat(results['basic']['exam_type'],', ')
|
||||
item.subText = q
|
||||
item.webUrl = ydWeburl..decodeURI(item.subText)
|
||||
table.insert(searchResult,1,item)
|
||||
end
|
||||
if (results['basic']['explains']) then
|
||||
for i=#results['basic']['explains'],1,-1 do
|
||||
item = {}
|
||||
item.text = results['basic']['explains'][i]
|
||||
item.subText = q
|
||||
item.webUrl = ydWeburl..decodeURI(item.subText)
|
||||
table.insert(searchResult,1,item)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
if(results['translation']) then
|
||||
item = {}
|
||||
item.text = table.concat(results['translation'])
|
||||
item.subText = q
|
||||
item.webUrl = ydWeburl..decodeURI(item.subText)
|
||||
table.insert(searchResult,1,item)
|
||||
end
|
||||
mChooser:choices(searchResult)
|
||||
hs.json.write(searchResult,dictHistoryPath, true, true)
|
||||
end
|
||||
end)
|
||||
end
|
||||
-- 粘贴选中的片段
|
||||
local completionFn = function(result)
|
||||
if result then
|
||||
hs.pasteboard.setContents(result.text)
|
||||
--hs.eventtap.keyStroke({ "cmd" }, "V")
|
||||
print("keywords:"..result.text)
|
||||
end
|
||||
end
|
||||
-- 监听输入框
|
||||
local queryChangedCallbackFn = function(result)
|
||||
print("changekeywords:"..result)
|
||||
if result and #result > 0 then
|
||||
if config[1].dictEngine == '百度' then
|
||||
getBaiduApi(result)
|
||||
else
|
||||
getYoudaoApi(result)
|
||||
end
|
||||
else
|
||||
if(isFirst) then
|
||||
isFirst = false
|
||||
else
|
||||
searchResult = {}
|
||||
mChooser:choices(searchResult)
|
||||
hs.json.write(searchResult,dictHistoryPath, true, true)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function initData()
|
||||
newWebview()
|
||||
-- 选取片段内容(按下快捷键时显示片段列表,点击选中的快捷键将自动粘贴)
|
||||
hs.hotkey.bind(hyperCmd, "F", function ()
|
||||
isFirst = true
|
||||
if hs.json.read(dictHistoryPath) ~= nil then
|
||||
searchResult = hs.json.read(dictHistoryPath)
|
||||
end
|
||||
mChooser = chooser.new(completionFn)
|
||||
:choices(searchResult)
|
||||
:queryChangedCallback(queryChangedCallbackFn)
|
||||
:rightClickCallback(rightClickCallbackFn)
|
||||
:searchSubText(true)
|
||||
:show()
|
||||
end)
|
||||
end
|
||||
|
||||
initData()
|
@ -1,4 +1,5 @@
|
||||
hyper = {"cmd", "ctrl", "alt"}
|
||||
hyperShift = {"alt", "shift"}
|
||||
hyperCtrl = {"alt", "ctrl"}
|
||||
hyperAlt = {"ctrl", "alt", "shift"}
|
||||
hyperAlt = {"ctrl", "alt", "shift"}
|
||||
hyperCmd = {"alt", "cmd"}
|
128
modules/inputstat.lua
Normal file
128
modules/inputstat.lua
Normal file
@ -0,0 +1,128 @@
|
||||
---
|
||||
--- 在状态栏中显示输入法的状态
|
||||
--- 例如:大小写状态,中英文状态,目前只适配搜狗输入法
|
||||
--- Created by sugood(https://github.com/sugood).
|
||||
--- DateTime: 2020/10/24 11:12
|
||||
---
|
||||
|
||||
local sougouId = 'com.sogou.inputmethod.sogou.pinyin'
|
||||
local shuangpinId = 'com.apple.inputmethod.SCIM.Shuangpin'
|
||||
local abcId = 'com.apple.keylayout.ABC'
|
||||
|
||||
local mEventtap
|
||||
function isChinese()
|
||||
-- 用于保存当前输入法
|
||||
local currentSourceID = hs.keycodes.currentSourceID()
|
||||
return (currentSourceID == sougouId or currentSourceID == shuangpinId)
|
||||
end
|
||||
|
||||
--解决hs.eventtap.new 有时候会卡死的问题。需要每秒检查下监听状态。如果卡死了就重新启动
|
||||
local listenerEvent = function()
|
||||
if mEventtap:isEnabled()==false then
|
||||
print("重启监听事件")
|
||||
mEventtap:start()
|
||||
end
|
||||
end
|
||||
function initData()
|
||||
local reverse = true
|
||||
local imgInputAbc = '~/.hammerspoon/icon/input_abc.pdf'
|
||||
local imgInputEn = '~/.hammerspoon/icon/input_en.pdf'
|
||||
local imgInputCn = '~/.hammerspoon/icon/input_cn.pdf'
|
||||
local imgInputU = '~/.hammerspoon/icon/input_u.pdf'
|
||||
|
||||
--初始化默认是英文输入法
|
||||
hs.keycodes.currentSourceID(abcId)
|
||||
if hs.hid.capslock.get() then
|
||||
macMenubar:setIcon(imgInputU)
|
||||
else
|
||||
if(isChinese()) then
|
||||
macMenubar:setIcon(imgInputCn)
|
||||
else
|
||||
macMenubar:setIcon(imgInputAbc)
|
||||
end
|
||||
end
|
||||
mEventtap = hs.eventtap.new({hs.eventtap.event.types.flagsChanged}, function(event)
|
||||
--获取shift按键信息
|
||||
if event:getKeyCode() == 56 and event:getFlags().shift then
|
||||
if (isChinese()) then
|
||||
hs.hid.led.set('caps',false)
|
||||
hs.alert.closeSpecific(showUUID)
|
||||
if reverse then
|
||||
reverse = false
|
||||
macMenubar:setIcon(imgInputEn)
|
||||
else
|
||||
reverse = true
|
||||
macMenubar:setIcon(imgInputCn)
|
||||
end
|
||||
else
|
||||
if hs.hid.capslock.get()==false then
|
||||
reverse = false
|
||||
macMenubar:setIcon(imgInputAbc)
|
||||
end
|
||||
end
|
||||
return
|
||||
end
|
||||
--获取capslock按键信息
|
||||
tab =hs.eventtap.checkKeyboardModifiers("capslock")
|
||||
local isCaptLock = tab["capslock"]
|
||||
if isCaptLock then
|
||||
if hs.hid.capslock.get() then
|
||||
hs.hid.led.set('caps',true)
|
||||
else
|
||||
hs.hid.led.set('caps',false)
|
||||
hs.alert.closeAll(0)
|
||||
hs.alert.show("键盘小写 🔤- OFF")
|
||||
if(isChinese()) then
|
||||
if(reverse) then
|
||||
macMenubar:setIcon(imgInputCn)
|
||||
else
|
||||
macMenubar:setIcon(imgInputEn)
|
||||
end
|
||||
else
|
||||
macMenubar:setIcon(imgInputAbc)
|
||||
end
|
||||
end
|
||||
else
|
||||
if hs.hid.capslock.get() then
|
||||
hs.hid.led.set('caps',true)
|
||||
hs.alert.closeAll(0)
|
||||
hs.alert.show("键盘大写 🅰️- ON")
|
||||
macMenubar:setIcon(imgInputU)
|
||||
else
|
||||
--print("小写2")
|
||||
hs.hid.led.set('caps',false)
|
||||
end
|
||||
end
|
||||
return false
|
||||
end)
|
||||
mEventtap:start()
|
||||
hs.timer.doEvery(1, listenerEvent)
|
||||
hs.keycodes.inputSourceChanged(function()
|
||||
-- 用于保存当前输入法
|
||||
local currentSourceID = hs.keycodes.currentSourceID()
|
||||
|
||||
-- 如果当前输入法和上一个输入法相同,则直接返回
|
||||
if currentSourceID == lastSourceID then
|
||||
return
|
||||
end
|
||||
-- 用于保存当前输入法
|
||||
local currentSourceID = hs.keycodes.currentSourceID()
|
||||
hs.alert.closeAll(0)
|
||||
-- 判断是系统自带的 ABC还是中文输入法
|
||||
if (currentSourceID == abcId) then
|
||||
--hs.alert.show("ABC")
|
||||
macMenubar:setIcon(imgInputAbc)
|
||||
reverse = false
|
||||
elseif (currentSourceID == sougouId or currentSourceID == shuangpinId) then
|
||||
--hs.alert.show("中文")
|
||||
reverse = true
|
||||
macMenubar:setIcon(imgInputCn)
|
||||
end
|
||||
-- 保存最后一个输入法源名称ds
|
||||
lastSourceID = currentSourceID
|
||||
end)
|
||||
end
|
||||
-- 初始化
|
||||
initData()
|
||||
|
||||
|
208
modules/jsonFormat.lua
Normal file
208
modules/jsonFormat.lua
Normal file
@ -0,0 +1,208 @@
|
||||
-----
|
||||
----- 格式化Json
|
||||
----- Created by sugood(https://github.com/sugood).
|
||||
----- DateTime: 2020/10/19 10:34
|
||||
-----
|
||||
--
|
||||
--
|
||||
|
||||
local function generateHtml()
|
||||
|
||||
local html = [[
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Json格式化高亮展示工具</title>
|
||||
|
||||
<style>
|
||||
body { height: 100%; margin:0; font-family:"微软雅黑"; font-size:12px; }
|
||||
.pdiv { height: 85%; position: absolute; }
|
||||
.title { height: auto; font-size:20px; text-align:center; margin-top: 5px; margin-bottom: 20px;}
|
||||
.author { height: auto; width: 100%; font-size:12px; text-align:center; margin-top: 30px; margin-bottom: 20px;}
|
||||
table { height: 100%; width:100%; border-collapse:collapse; }
|
||||
table .tdLeft { width:85%; text-align:left; padding-left: 10px;padding-right: 10px;}
|
||||
table .tdmid { width:150px; text-align:center; margin: 0px; padding: 0px;}
|
||||
table .tdRight { width:85%; padding-right: 30px;text-align:left; }
|
||||
table textarea { width:100%; height:100%; font-size:14px; padding-top: 10px; padding-left: 10px; outline: none; border-radius: 15px; border: 2px solid #8AC007; }
|
||||
#container { width:100%; height:100%; font-size:14px; padding-top: 10px; padding-left: 10px; border-radius: 15px; border: 2px solid #8AC007;}
|
||||
pre{white-space:pre-wrap; white-space:-moz-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word; margin: 0px; padding: 5px;}
|
||||
pre .string { color: green; }
|
||||
pre .number { color: darkorange; }
|
||||
pre .boolean { color: blue; }
|
||||
pre .null { color: magenta; }
|
||||
.key { color: red; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="pdiv">
|
||||
<div class="title" >Json格式化高亮展示工具</div>
|
||||
<table style="table-layout:fixed">
|
||||
<tr>
|
||||
<!-- <td class="tdLeft" nowrap>请输入要展示的Json:</td> -->
|
||||
<td class="tdLeft">
|
||||
<input style="width:auto; margin: 10px;" type="button" value="复制" onClick="copySource()">
|
||||
<textarea name = "jsonContent" id="jsonContent" ></textarea>
|
||||
</td>
|
||||
<td class="tdmid"><input style="width:80%;" type="button" value="格式化JSON >>" onClick="showJson()"></td>
|
||||
<td class="tdRight">
|
||||
<input style="width:auto; margin: 10px;" type="button" value="复制" onClick="copyResult()">
|
||||
<pre id="container"></pre>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="author">
|
||||
<a href="https://github.com/sugood" target="_blank">By: github.com/sugood</a>
|
||||
</div>
|
||||
<div class="tips" id="tips">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
<script type="text/javascript">
|
||||
|
||||
function copySource(){
|
||||
var obj = document.getElementById('jsonContent');
|
||||
//选择当前对象
|
||||
obj.select();
|
||||
try{
|
||||
if(document.execCommand("Copy","false",null)){
|
||||
alert("复制成功!");
|
||||
}
|
||||
}catch(err){
|
||||
alert("复制错误!");
|
||||
}
|
||||
}
|
||||
|
||||
function copyResult(){
|
||||
var text = document.getElementById('container').innerText;
|
||||
const input = document.createElement('textarea');
|
||||
input.value = text;
|
||||
input.setAttribute('readonly', 'readonly');
|
||||
document.body.appendChild(input);
|
||||
input.select();
|
||||
try{
|
||||
if(document.execCommand('Copy')){
|
||||
alert('复制成功');
|
||||
}
|
||||
}catch(err){
|
||||
alert("复制错误!");
|
||||
}
|
||||
document.body.removeChild(input);
|
||||
}
|
||||
|
||||
function syntaxHighlight(json) {
|
||||
if (typeof json != 'string') {
|
||||
json = JSON.stringify(json, undefined, 4);
|
||||
}
|
||||
json = json.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
|
||||
return json.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g, function (match) {
|
||||
var cls = 'number';
|
||||
if (/^"/.test(match)) {
|
||||
if (/:$/.test(match)) {
|
||||
cls = 'key';
|
||||
} else {
|
||||
cls = 'string';
|
||||
}
|
||||
} else if (/true|false/.test(match)) {
|
||||
cls = 'boolean';
|
||||
} else if (/null/.test(match)) {
|
||||
cls = 'null';
|
||||
}
|
||||
return '<span class="' + cls + '">' + match + '</span>';
|
||||
});
|
||||
}
|
||||
|
||||
function showJson(){
|
||||
var text = document.getElementById('jsonContent').value
|
||||
if (text!="" && text!=null){
|
||||
try {
|
||||
var result = JSON.stringify(JSON.parse(text), null, 4);//将字符串转换成json对象
|
||||
highLineResult = syntaxHighlight(result);
|
||||
document.getElementById('container').innerHTML= highLineResult;
|
||||
localStorage.setItem("jsonFormatSource",text);
|
||||
localStorage.setItem("jsonFormatResult",highLineResult);
|
||||
} catch(e) {
|
||||
document.getElementById('container').innerText= '异常信息:'+e ;
|
||||
}
|
||||
}else{
|
||||
document.getElementById("jsonContent").value = "请输入json文本";
|
||||
document.getElementById('container').innerHTML= "显示Json格式化后的效果";
|
||||
localStorage.setItem("jsonFormatSource","请输入json文本");
|
||||
localStorage.setItem("jsonFormatResult","显示Json格式化后的效果");
|
||||
}
|
||||
};
|
||||
|
||||
var jsonFormatSource = localStorage.getItem("jsonFormatSource");
|
||||
if (jsonFormatSource!="" && jsonFormatSource!=null){
|
||||
document.getElementById("jsonContent").value=localStorage.getItem("jsonFormatSource");
|
||||
}else{
|
||||
document.getElementById("jsonContent").value = "请输入json文本"
|
||||
}
|
||||
var jsonFormatResult = localStorage.getItem("jsonFormatResult");
|
||||
if (jsonFormatResult!="" && jsonFormatResult!=null){
|
||||
document.getElementById("container").innerHTML=localStorage.getItem("jsonFormatResult");
|
||||
}else{
|
||||
document.getElementById("jsonContent").value = "显示Json格式化后的效果"
|
||||
}
|
||||
|
||||
</script>
|
||||
</html>
|
||||
]]
|
||||
|
||||
return html
|
||||
end
|
||||
|
||||
|
||||
--- KSheet:hide()
|
||||
--- Method
|
||||
--- Hide the cheatsheet view.
|
||||
function hide(time)
|
||||
sheetView:hide(time)
|
||||
end
|
||||
|
||||
function init()
|
||||
local cscreen = hs.screen.mainScreen()
|
||||
local cres = cscreen:fullFrame()
|
||||
sheetView = hs.webview.newBrowser({
|
||||
x = cres.x+cres.w*0.15/2,
|
||||
y = cres.y+cres.h*0.25/2,
|
||||
w = cres.w*0.85,
|
||||
h = cres.h*0.75
|
||||
})
|
||||
sheetView:windowTitle("CheatSheets")
|
||||
sheetView:windowStyle("utility")
|
||||
sheetView:titleVisibility("hidden")
|
||||
sheetView:allowGestures(true)
|
||||
sheetView:allowNewWindows(false)
|
||||
sheetView:allowTextEntry(true)
|
||||
sheetView:closeOnEscape(true)
|
||||
sheetView:bringToFront(false)
|
||||
sheetView:darkMode(true)
|
||||
sheetView:reload(false)
|
||||
sheetView:level(hs.drawing.windowLevels.mainMenu)
|
||||
end
|
||||
|
||||
--- KSheet:show()
|
||||
--- Method
|
||||
--- Show current application's keybindings in a view.
|
||||
function show(time)
|
||||
local webcontent = generateHtml()
|
||||
sheetView:html(webcontent, "http://localhost")
|
||||
sheetView:show(time)
|
||||
end
|
||||
|
||||
function toggle()
|
||||
if sheetView and sheetView:hswindow() and sheetView:hswindow():isVisible() then
|
||||
hide(2)
|
||||
else
|
||||
show(2)
|
||||
end
|
||||
end
|
||||
|
||||
init()
|
||||
|
||||
-- 添加片段(按下快捷键时做一个复制操作,并记录复制的内容到片段列表中)
|
||||
hs.hotkey.bind(hyperCmd, "G", function ()
|
||||
toggle()
|
||||
end)
|
@ -1,7 +1,5 @@
|
||||
local chooser = require("hs.chooser")
|
||||
local console = require("hs.console")
|
||||
|
||||
console.clearConsole()
|
||||
local historyPath= "~/.hammerspoon/data/history.json"
|
||||
local maxLength = 1000
|
||||
local history = {}
|
||||
@ -24,10 +22,7 @@ function duplicate(table,keys)
|
||||
end
|
||||
return false
|
||||
end
|
||||
-- 字符串判空
|
||||
function isEmpty(str)
|
||||
return str == nil or str == ''
|
||||
end
|
||||
|
||||
-- 查询text是否存在并返回索引index
|
||||
-- 等于0为没有查询到,大于0为查询到
|
||||
function searchByText(table,text)
|
||||
@ -120,7 +115,7 @@ end
|
||||
local rightClickCallbackFn = function(index)
|
||||
if index and index > 0 then
|
||||
local selectResult = mChooser:selectedRowContents(index)
|
||||
if selectResult == nil or isEmpty(selectResult.text) then
|
||||
if selectResult == nil or stringIsEmpty(selectResult.text) then
|
||||
return
|
||||
end
|
||||
index = searchByText(history,selectResult.text)
|
||||
@ -160,7 +155,7 @@ local rightClickCallbackFn = function(index)
|
||||
end
|
||||
end
|
||||
-- 选取片段内容(按下快捷键时显示片段列表,点击选中的快捷键将自动粘贴)
|
||||
hs.hotkey.bind({ "ctrl", "cmd" }, "V", function ()
|
||||
hs.hotkey.bind(hyperCmd, "V", function ()
|
||||
mChooser = chooser.new(completionFn)
|
||||
:choices(history)
|
||||
:rightClickCallback(rightClickCallbackFn)
|
||||
@ -168,7 +163,7 @@ hs.hotkey.bind({ "ctrl", "cmd" }, "V", function ()
|
||||
:show()
|
||||
end)
|
||||
-- 添加片段(按下快捷键时做一个复制操作,并记录复制的内容到片段列表中)
|
||||
hs.hotkey.bind({"ctrl", "cmd"}, "A", function ()
|
||||
hs.hotkey.bind(hyperCmd, "X", function ()
|
||||
bindCopyKey()
|
||||
if hs.dialog.blockAlert("添加片段:‘|’为分隔符,建议按如下格式","内容|keyword|示例|说明","确定","取消","informational") == "确定" then
|
||||
addToHistory()
|
||||
|
59
modules/timesync.lua
Normal file
59
modules/timesync.lua
Normal file
@ -0,0 +1,59 @@
|
||||
---
|
||||
--- 时间同步,开启后在系统或屏幕唤醒后自动同步一次时间
|
||||
--- Created by sugood(https://github.com/sugood).
|
||||
--- DateTime: 2020/10/23 11:12
|
||||
---
|
||||
|
||||
function execTimeSync()
|
||||
local shell_command = 'expect ~/.hammerspoon/timesync/timesync.sh '.. config[1].rootPassword
|
||||
result = table.pack(hs.execute(shell_command,true))
|
||||
print(result[1])
|
||||
end
|
||||
function caffeinateCallback(eventType)
|
||||
if (eventType == hs.caffeinate.watcher.screensDidSleep) then
|
||||
print("screensDidSleep")
|
||||
elseif (eventType == hs.caffeinate.watcher.screensDidWake) then
|
||||
execTimeSync()
|
||||
hs.reload()
|
||||
print("screensDidWake")
|
||||
elseif (eventType == hs.caffeinate.watcher.systemDidWake) then
|
||||
execTimeSync()
|
||||
hs.reload()
|
||||
print("systemDidWake")
|
||||
elseif (eventType == hs.caffeinate.watcher.screensDidLock) then
|
||||
print("screensDidLock")
|
||||
elseif (eventType == hs.caffeinate.watcher.screensDidUnlock) then
|
||||
print("screensDidUnlock")
|
||||
end
|
||||
end
|
||||
|
||||
function initData()
|
||||
if config ~=nil and config[1].isSyncTime == 'on' then
|
||||
caffeinateWatcher = hs.caffeinate.watcher.new(caffeinateCallback)
|
||||
caffeinateWatcher:start()
|
||||
|
||||
-- 添加片段(按下快捷键时做一个复制操作,并记录复制的内容到片段列表中)
|
||||
hs.hotkey.bind(hyperCmd, "T", function ()
|
||||
if hs.json.read(configPath) ~= nil then
|
||||
config = hs.json.read(configPath)
|
||||
end
|
||||
if(stringIsEmpty(config[1].rootPassword)) then
|
||||
local result,subText = hs.dialog.textPrompt("输入开机密码", "时间同步操作需要开机密码", '', "确定", "取消", true)
|
||||
if result == "确定" then
|
||||
if(stringIsEmpty(subText) == false) then
|
||||
config[1].rootPassword = subText
|
||||
hs.json.write(config,configPath, true, true)
|
||||
execTimeSync()
|
||||
hs.alert.show('同步时间')
|
||||
end
|
||||
end
|
||||
else
|
||||
execTimeSync()
|
||||
hs.alert.show('同步时间')
|
||||
end
|
||||
end)
|
||||
end
|
||||
end
|
||||
-- 初始化,读取本地数据
|
||||
initData()
|
||||
|
15
timesync/timesync.sh
Executable file
15
timesync/timesync.sh
Executable file
@ -0,0 +1,15 @@
|
||||
#timesyne.sh
|
||||
#expect的安装路径
|
||||
#/usr/local/bin/expect这个路径安装完expect之后 which expect可以查看
|
||||
#!/usr/local/bin/expect
|
||||
|
||||
set timeout 10
|
||||
set passwd [lindex $argv 0]
|
||||
|
||||
spawn sudo sntp -sS ntp.aliyun.com
|
||||
#根据输出传递数据,在这里是等待密码提示显示
|
||||
expect "*assword*"
|
||||
send "$passwd\n"
|
||||
#interact
|
||||
expect eof
|
||||
exit
|
Loading…
Reference in New Issue
Block a user