diff --git a/data/.gitignore b/data/.gitignore new file mode 100644 index 0000000..c99e0e8 --- /dev/null +++ b/data/.gitignore @@ -0,0 +1 @@ +/config.json \ No newline at end of file diff --git a/data/history.json b/data/history.json new file mode 100644 index 0000000..084aa0e --- /dev/null +++ b/data/history.json @@ -0,0 +1,26 @@ +[ + { + "subText" : "cmd|ps -aux grep server |查看服务名 ", + "text" : "ps -aux|grep server" + }, + { + "subText" : "cmd|lsof -i:8080 |查看端口占用 ", + "text" : "lsof -i:8080" + }, + { + "subText" : "cmd|tar -zcvf dist.tar.gz dist |压缩 ", + "text" : "tar -zcvf dist.tar.gz dist" + }, + { + "subText" : "cmd|tar -zxvf dist.tar.gz |解压 ", + "text" : "tar -zxvf dist.tar.gz" + }, + { + "subText" : "docker|docker speedtest | docker测速,9001端口 ", + "text" : "docker run --restart=always -d -p 9001:80 -it badapple9\/speedtest-x" + }, + { + "subText" : "go|go build | golang 交叉编译为linux ", + "text" : "CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o server main.go" + }, +] \ No newline at end of file diff --git a/init.lua b/init.lua index 6d52fec..22aa7db 100644 --- a/init.lua +++ b/init.lua @@ -1,6 +1,7 @@ hs.configdir = os.getenv('HOME') .. '/.hammerspoon' package.path = hs.configdir .. '/?.lua;' .. hs.configdir .. '/?/init.lua;' .. hs.configdir .. '/Spoons/?.spoon/init.lua;' .. package.path -~/.gitconfig~/.gitconfig -require "modules/commons" + +require "modules/reload" +require "modules/hotkey" require "modules/snippet" \ No newline at end of file diff --git a/modules/commons.lua b/modules/commons.lua deleted file mode 100644 index dd20e13..0000000 --- a/modules/commons.lua +++ /dev/null @@ -1,290 +0,0 @@ ---- ---- 公共函数 ---- Created by sugood(https://github.com/sugood). ---- DateTime: 2020/10/24 14:13 ---- -local console = require("hs.console") -version = "v0.2.0" -configPath= "~/.hammerspoon/data/config.json" -initConfigPath= "~/.hammerspoon/data/initConfig.json" -config = {} -colorDialog = hs.dialog.color - ---检查文件是否存在 -function checkFileExist(path) - local file = hs.fs.pathToAbsolute(path) - return file ~= nil -end - ---复制文件 -function copyFile(source,destination) - print(destination) - local sourcefile = io.open(source, "r") - local destinationfile = io.open(destination, "w") - destinationfile:write(sourcefile:read("*all")) - sourcefile:close() - destinationfile:close() -end - -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 switchSysInfo() - if config[1].showSysInfo == 'on' then - config[1].showSysInfo = 'off' - else - config[1].showSysInfo = '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() - openColorDialog() - end }, - { title = "-" }, - { title = "咖啡因:" .. config[1].caffeine, fn = function() - switchCaffeine() - end }, - { title = "-" }, - { title = "系统状态:" .. config[1].showSysInfo, fn = function() - switchSysInfo() - 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(checkFileExist(configPath) == false) then - print("初始化配置文件") - --获取绝对路径,io.open只支持绝对路径 - local source = hs.fs.pathToAbsolute(initConfigPath) - local destination = string.gsub(source, "initConfig.json$", "config.json") - copyFile(source,destination) - end - - 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.50} - 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 - ---判断是否复制成功 -function isCopySuccess() - local num = hs.pasteboard.changeCount() - print("复制前数量:"..num) - hs.eventtap.keyStroke({ "cmd" }, "C") - local numAfter = hs.pasteboard.changeCount() - print("复制后数量:"..numAfter) - return numAfter > num -end - -function openColorDialog() - hs.openConsole(true) - colorDialog.show() - colorDialog.mode("RGB") - colorDialog.callback(function(a,b) - if b then - hs.closeConsole() - end - end) - hs.closeConsole() -end - ---设置颜色拾取快键键 -hs.hotkey.bind(hyperCmd, "P", function () - openColorDialog() -end) - ---设置咖啡因开关 -hs.hotkey.bind(hyperCmd, "S", function () - switchCaffeine() -end) \ No newline at end of file diff --git a/modules/hotkey.lua b/modules/hotkey.lua new file mode 100644 index 0000000..f550982 --- /dev/null +++ b/modules/hotkey.lua @@ -0,0 +1,5 @@ +hyper = {"cmd", "ctrl", "alt"} +hyperShift = {"alt", "shift"} +hyperCtrl = {"alt", "ctrl"} +hyperAlt = {"ctrl", "alt", "shift"} +hyperCmd = {"alt", "cmd"} \ No newline at end of file diff --git a/modules/reload.lua b/modules/reload.lua new file mode 100644 index 0000000..be2bae1 --- /dev/null +++ b/modules/reload.lua @@ -0,0 +1,18 @@ +local pathwatcher = require "hs.pathwatcher" +local alert = require "hs.alert" + +-- http://www.hammerspoon.org/go/#fancyreload +function reloadConfig(files) + doReload = false + for _, file in pairs(files) do + if file:sub(-4) == ".lua" then + doReload = true + end + end + if doReload then + hs.reload() + end +end + +pathwatcher.new(os.getenv("HOME") .. "/.hammerspoon", reloadConfig):start() +alert.show("Hammerspoon Config Reloaded")