hammerspoon: sync

This commit is contained in:
Konstantin Bukley
2021-01-14 14:28:52 +02:00
parent 284c85d37d
commit dc5f007df8
12 changed files with 1117 additions and 0 deletions

View File

@@ -0,0 +1,112 @@
function wrapSelectedText(wrapCharacters)
-- Preserve the current contents of the system clipboard
local originalClipboardContents = hs.pasteboard.getContents()
-- Copy the currently-selected text to the system clipboard
keyUpDown('cmd', 'c')
-- Allow some time for the command+c keystroke to fire asynchronously before
-- we try to read from the clipboard
hs.timer.doAfter(0.2, function()
-- Construct the formatted output and paste it over top of the
-- currently-selected text
local selectedText = hs.pasteboard.getContents()
local wrappedText = wrapCharacters .. selectedText .. wrapCharacters
hs.pasteboard.setContents(wrappedText)
keyUpDown('cmd', 'v')
-- Allow some time for the command+v keystroke to fire asynchronously before
-- we restore the original clipboard
hs.timer.doAfter(0.2, function()
hs.pasteboard.setContents(originalClipboardContents)
end)
end)
end
function inlineLink()
-- Fetch URL from the system clipboard
local linkUrl = hs.pasteboard.getContents()
-- Copy the currently-selected text to use as the link text
keyUpDown('cmd', 'c')
-- Allow some time for the command+c keystroke to fire asynchronously before
-- we try to read from the clipboard
hs.timer.doAfter(0.2, function()
-- Construct the formatted output and paste it over top of the
-- currently-selected text
local linkText = hs.pasteboard.getContents()
local markdown = '[' .. linkText .. '](' .. linkUrl .. ')'
hs.pasteboard.setContents(markdown)
keyUpDown('cmd', 'v')
-- Allow some time for the command+v keystroke to fire asynchronously before
-- we restore the original clipboard
hs.timer.doAfter(0.2, function()
hs.pasteboard.setContents(linkUrl)
end)
end)
end
--------------------------------------------------------------------------------
-- Define Markdown Mode
--
-- Markdown Mode allows you to perform common Markdown-formatting tasks anywhere
-- that you're editing text. Use Control+m to turn on Markdown mode. Then, use
-- any shortcut below to perform a formatting action. For example, to format the
-- selected text as bold in Markdown, hit Control+m, and then b.
--
-- b => wrap the selected text in double asterisks ("b" for "bold")
-- c => wrap the selected text in backticks ("c" for "code")
-- i => wrap the selected text in single asterisks ("i" for "italic")
-- s => wrap the selected text in double tildes ("s" for "strikethrough")
-- l => convert the currently-selected text to an inline link, using a URL
-- from the clipboard ("l" for "link")
--------------------------------------------------------------------------------
markdownMode = hs.hotkey.modal.new({}, 'F20')
local message = require('keyboard.status-message')
markdownMode.statusMessage = message.new('Markdown Mode (control-m)')
markdownMode.entered = function()
markdownMode.statusMessage:show()
end
markdownMode.exited = function()
markdownMode.statusMessage:hide()
end
-- Bind the given key to call the given function and exit Markdown mode
function markdownMode.bindWithAutomaticExit(mode, key, fn)
mode:bind({}, key, function()
mode:exit()
fn()
end)
end
markdownMode:bindWithAutomaticExit('b', function()
wrapSelectedText('**')
end)
markdownMode:bindWithAutomaticExit('i', function()
wrapSelectedText('*')
end)
markdownMode:bindWithAutomaticExit('s', function()
wrapSelectedText('~~')
end)
markdownMode:bindWithAutomaticExit('l', function()
inlineLink()
end)
markdownMode:bindWithAutomaticExit('c', function()
wrapSelectedText('`')
end)
-- Use Control+m to toggle Markdown Mode
hs.hotkey.bind({'ctrl'}, 'm', function()
markdownMode:enter()
end)
markdownMode:bind({'ctrl'}, 'm', function()
markdownMode:exit()
end)