about summary refs log tree commit diff stats
path: root/commands.lua
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2022-09-03 14:13:22 -0700
committerKartik K. Agaram <vc@akkartik.com>2022-09-03 14:13:22 -0700
commite1c5a42f311fdafd88506726bbe480f3fcc2d1a3 (patch)
tree6628729cc55947d0bd5d306704e88b57680c3514 /commands.lua
parent9c72ff1bb4fc1ba08acfb0324079da6fe49f3a4a (diff)
downloadtext.love-e1c5a42f311fdafd88506726bbe480f3fcc2d1a3.tar.gz
editing source code from within the app
integrated from pong.love via text.love:
  https://merveilles.town/@akkartik/108933336531898243
Diffstat (limited to 'commands.lua')
-rw-r--r--commands.lua100
1 files changed, 100 insertions, 0 deletions
diff --git a/commands.lua b/commands.lua
new file mode 100644
index 0000000..037205f
--- /dev/null
+++ b/commands.lua
@@ -0,0 +1,100 @@
+Menu_background_color = {r=0.6, g=0.8, b=0.6}
+Menu_border_color = {r=0.6, g=0.7, b=0.6}
+Menu_command_color = {r=0.2, g=0.2, b=0.2}
+Menu_highlight_color = {r=0.5, g=0.7, b=0.3}
+
+function source.draw_menu_bar()
+  if App.run_tests then return end  -- disable in tests
+  App.color(Menu_background_color)
+  love.graphics.rectangle('fill', 0,0, App.screen.width, Menu_status_bar_height)
+  App.color(Menu_border_color)
+  love.graphics.rectangle('line', 0,0, App.screen.width, Menu_status_bar_height)
+  App.color(Menu_command_color)
+  Menu_cursor = 5
+  if Show_file_navigator then
+    source.draw_file_navigator()
+    return
+  end
+  add_hotkey_to_menu('ctrl+e: run')
+  if Focus == 'edit' then
+    add_hotkey_to_menu('ctrl+g: switch file')
+    if Show_log_browser_side then
+      add_hotkey_to_menu('ctrl+l: hide log browser')
+    else
+      add_hotkey_to_menu('ctrl+l: show log browser')
+    end
+    if Editor_state.expanded then
+      add_hotkey_to_menu('ctrl+b: collapse debug prints')
+    else
+      add_hotkey_to_menu('ctrl+b: expand debug prints')
+    end
+    add_hotkey_to_menu('ctrl+d: create/edit debug print')
+    add_hotkey_to_menu('ctrl+f: find in file')
+    add_hotkey_to_menu('alt+left alt+right: prev/next word')
+  elseif Focus == 'log_browser' then
+    -- nothing yet
+  else
+    assert(false, 'unknown focus "'..Focus..'"')
+  end
+  add_hotkey_to_menu('ctrl+z ctrl+y: undo/redo')
+  add_hotkey_to_menu('ctrl+x ctrl+c ctrl+v: cut/copy/paste')
+  add_hotkey_to_menu('ctrl+= ctrl+- ctrl+0: zoom')
+end
+
+function add_hotkey_to_menu(s)
+  if Text_cache[s] == nil then
+    Text_cache[s] = App.newText(love.graphics.getFont(), s)
+  end
+  local width = App.width(Text_cache[s])
+  if Menu_cursor + width > App.screen.width - 5 then
+    return
+  end
+  App.color(Menu_command_color)
+  App.screen.draw(Text_cache[s], Menu_cursor,5)
+  Menu_cursor = Menu_cursor + width + 30
+end
+
+function source.draw_file_navigator()
+  for i,file in ipairs(File_navigation.candidates) do
+    if file == 'source' then
+      App.color(Menu_border_color)
+      love.graphics.line(Menu_cursor-10,2, Menu_cursor-10,Menu_status_bar_height-2)
+    end
+    add_file_to_menu(file, i == File_navigation.index)
+  end
+end
+
+function add_file_to_menu(s, cursor_highlight)
+  if Text_cache[s] == nil then
+    Text_cache[s] = App.newText(love.graphics.getFont(), s)
+  end
+  local width = App.width(Text_cache[s])
+  if Menu_cursor + width > App.screen.width - 5 then
+    return
+  end
+  if cursor_highlight then
+    App.color(Menu_highlight_color)
+    love.graphics.rectangle('fill', Menu_cursor-5,5-2, App.width(Text_cache[s])+5*2,Editor_state.line_height+2*2)
+  end
+  App.color(Menu_command_color)
+  App.screen.draw(Text_cache[s], Menu_cursor,5)
+  Menu_cursor = Menu_cursor + width + 30
+end
+
+function keychord_pressed_on_file_navigator(chord, key)
+  if chord == 'escape' then
+    Show_file_navigator = false
+  elseif chord == 'return' then
+    local candidate = guess_source(File_navigation.candidates[File_navigation.index]..'.lua')
+    source.switch_to_file(candidate)
+    Show_file_navigator = false
+  elseif chord == 'left' then
+    if File_navigation.index > 1 then
+      File_navigation.index = File_navigation.index-1
+    end
+  elseif chord == 'right' then
+    if File_navigation.index < #File_navigation.candidates then
+      File_navigation.index = File_navigation.index+1
+    end
+  end
+end