mirror of https://github.com/einverne/dotfiles.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
3.5 KiB
97 lines
3.5 KiB
4 years ago
|
local obj={}
|
||
|
obj.__index = obj
|
||
|
|
||
|
obj.name = "justNote"
|
||
|
obj.version = "1.0"
|
||
|
obj.author = "ashfinal <[email protected]>"
|
||
|
|
||
|
-- 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()
|
||
|
|
||
|
-- Define the source's overview. A unique `keyword` key should exist, so this source can be found.
|
||
|
obj.overview = {text="Type n ⇥ to Note something.", image=hs.image.imageFromPath(obj.spoonPath .. "/resources/justnote.png"), keyword="n"}
|
||
|
-- Define the notice when a long-time request is being executed. It could be `nil`.
|
||
|
obj.notice = nil
|
||
|
-- Define the hotkeys, which will be enabled/disabled automatically. You need to add your keybindings into this table manually.
|
||
|
obj.hotkeys = {}
|
||
|
|
||
|
local function justNoteRequest()
|
||
|
local note_history = hs.settings.get("just.another.note") or {}
|
||
|
if #note_history == 0 then
|
||
|
local chooser_data = {{text="Write something and press Enter.", subText="Your notes is automatically saved, selected item will be erased.", image=hs.image.imageFromPath(obj.spoonPath .. "/resources/justnote.png")}}
|
||
|
return chooser_data
|
||
|
else
|
||
|
local chooser_data = hs.fnutils.imap(note_history, function(item)
|
||
|
return {uuid=item.uuid, text=item.content, subText=item.ctime, image=hs.image.imageFromPath(obj.spoonPath .. "/resources/justnote.png"), output="noteremove", arg=item.uuid}
|
||
|
end)
|
||
|
return chooser_data
|
||
|
end
|
||
|
end
|
||
|
-- Define the function which will be called when the `keyword` triggers a new source. The returned value is a table. Read more: http://www.hammerspoon.org/docs/hs.chooser.html#choices
|
||
|
obj.init_func = justNoteRequest
|
||
|
-- Insert a friendly tip at the head so users know what to do next.
|
||
|
obj.description = nil
|
||
|
-- As the user is typing, the callback function will be called for every keypress. The returned value is a table.
|
||
|
|
||
|
local function isInNoteHistory(value, tbl)
|
||
|
for idx,val in pairs(tbl) do
|
||
|
if val.uuid == value then
|
||
|
return true
|
||
|
end
|
||
|
end
|
||
|
return false
|
||
|
end
|
||
|
|
||
|
local function justNoteStore()
|
||
|
if spoon.HSearch then
|
||
|
local querystr = string.gsub(spoon.HSearch.chooser:query(), "%s+$", "")
|
||
|
if string.len(querystr) > 0 then
|
||
|
local query_hash = hs.hash.SHA1(querystr)
|
||
|
local note_history = hs.settings.get("just.another.note") or {}
|
||
|
if not isInNoteHistory(query_hash, note_history) then
|
||
|
table.insert(note_history, {uuid=query_hash, ctime="Created at "..os.date(), content=querystr})
|
||
|
hs.settings.set("just.another.note", note_history)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local store_trigger = hs.hotkey.new("", "return", nil, function()
|
||
|
justNoteStore()
|
||
|
if spoon.HSearch then
|
||
|
local chooser_data = justNoteRequest()
|
||
|
spoon.HSearch.chooser:choices(chooser_data)
|
||
|
spoon.HSearch.chooser:query("")
|
||
|
end
|
||
|
end)
|
||
|
table.insert(obj.hotkeys, store_trigger)
|
||
|
|
||
|
obj.callback = nil
|
||
|
|
||
|
-- Define a new output type
|
||
|
local function removeNote(arg)
|
||
|
local note_history = hs.settings.get("just.another.note") or {}
|
||
|
for idx,val in pairs(note_history) do
|
||
|
if val.uuid == arg then
|
||
|
table.remove(note_history, idx)
|
||
|
hs.settings.set("just.another.note", note_history)
|
||
|
end
|
||
|
local chooser_data = justNoteRequest()
|
||
|
if spoon.HSearch then
|
||
|
spoon.HSearch.chooser:choices(chooser_data)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
obj.new_output = {
|
||
|
name = "noteremove",
|
||
|
func = removeNote
|
||
|
}
|
||
|
|
||
|
|
||
|
return obj
|