summaryrefslogtreecommitdiff
path: root/init.lua
diff options
context:
space:
mode:
Diffstat (limited to 'init.lua')
-rw-r--r--init.lua75
1 files changed, 75 insertions, 0 deletions
diff --git a/init.lua b/init.lua
new file mode 100644
index 0000000..9930ba7
--- /dev/null
+++ b/init.lua
@@ -0,0 +1,75 @@
+local open_prompt = {
+ active = false,
+ text = "",
+ buffer = editor.aux_buffer_new(),
+}
+
+local function hide_open_prompt()
+ open_prompt.active = false
+ open_prompt.text = ""
+ editor.aux_buffer_set_text(open_prompt.buffer, "")
+end
+
+local function show_open_prompt()
+ open_prompt.active = true
+ open_prompt.text = ""
+ editor.aux_buffer_set_text(open_prompt.buffer, "open file: ")
+end
+
+local function refresh_open_prompt()
+ editor.aux_buffer_set_text(open_prompt.buffer, "open file: " .. open_prompt.text)
+end
+
+lemacs.keys.bind_leader("f", function()
+ if not open_prompt.active then
+ show_open_prompt()
+ end
+end)
+
+lemacs.hooks.add("intercept_key", function(key)
+ if not open_prompt.active then
+ return false
+ end
+
+ if key == "escape" then
+ hide_open_prompt()
+ return true
+ end
+
+ if key == "backspace" then
+ open_prompt.text = open_prompt.text:sub(1, #open_prompt.text - 1)
+ refresh_open_prompt()
+ return true
+ end
+
+ if key == "enter" then
+ local path = open_prompt.text
+ hide_open_prompt()
+ if path ~= "" then
+ editor.open_file(path)
+ end
+ return true
+ end
+
+ return open_prompt.active
+end)
+
+lemacs.hooks.add("intercept_text", function(text)
+ if not open_prompt.active then
+ return false
+ end
+
+ open_prompt.text = open_prompt.text .. text
+ refresh_open_prompt()
+ return true
+end)
+
+lemacs.hooks.add("after_layout", function()
+ if not open_prompt.active then
+ return
+ end
+
+ local width = editor.screen_width()
+ local y = editor.screen_height() - 24
+ lemacs.ui.add_view(1, open_prompt.buffer, 0, y, width, 24, false, 42, 44, 54, 245, 232, 232, 236, 255)
+end)