hammerspoon: sync
This commit is contained in:
112
hammerspoon/.hammerspoon/keyboard/markdown.lua
Normal file
112
hammerspoon/.hammerspoon/keyboard/markdown.lua
Normal 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)
|
||||
Reference in New Issue
Block a user