瀏覽代碼

feat: Expose FindFileMode to Lua API and handle it in NcursesEditor

Bernardo Magri 1 月之前
父節點
當前提交
ab8c740468
共有 4 個文件被更改,包括 12 次插入1 次删除
  1. 1 1
      .gitignore
  2. 5 0
      include/lumacs/editor_core.hpp
  3. 1 0
      src/lua_api.cpp
  4. 5 0
      src/main_ncurses.cpp

+ 1 - 1
.gitignore

@@ -18,7 +18,7 @@ Makefile
 *.dylib
 *.dll
 *.exe
-lumacs
+/lumacs
 
 # IDE
 .vscode/

+ 5 - 0
include/lumacs/editor_core.hpp

@@ -25,6 +25,7 @@ enum class EditorEvent {
                 CommandMode,         // Trigger command mode (minibuffer)
                 BufferSwitchMode,    // Trigger buffer switch mode
                 KillBufferMode,      // Trigger kill buffer mode
+        FindFileMode,        // Trigger find file mode
         ISearchMode,         // Trigger incremental search mode
         ISearchBackwardMode, // Trigger incremental search mode (backward)
     Quit
@@ -64,6 +65,10 @@ public:
         emit_event(EditorEvent::KillBufferMode);
     }
 
+    void enter_find_file_mode() {
+        emit_event(EditorEvent::FindFileMode);
+    }
+
     void enter_isearch_mode() {
         emit_event(EditorEvent::ISearchMode);
     }

+ 1 - 0
src/lua_api.cpp

@@ -379,6 +379,7 @@ void LuaApi::register_types() {
         "command_mode", &EditorCore::enter_command_mode,
         "buffer_switch_mode", &EditorCore::enter_buffer_switch_mode,
         "kill_buffer_mode", &EditorCore::enter_kill_buffer_mode,
+        "find_file_mode", &EditorCore::enter_find_file_mode,
         "isearch_mode", &EditorCore::enter_isearch_mode,
         "isearch_backward_mode", &EditorCore::enter_isearch_backward_mode,
         "quit", &EditorCore::request_quit,

+ 5 - 0
src/main_ncurses.cpp

@@ -198,6 +198,11 @@ private:
             command_buffer_.clear();
             reset_completion();
             reset_history_navigation();
+        } else if (event == EditorEvent::FindFileMode) {
+            mode_ = Mode::FindFile;
+            command_buffer_.clear();
+            reset_completion();
+            reset_history_navigation();
         } else if (event == EditorEvent::ISearchMode) {
             mode_ = Mode::ISearch;
             isearch_query_.clear();