瀏覽代碼

switching to ncurses

Bernardo Magri 1 月之前
父節點
當前提交
44cde67b8b
共有 3 個文件被更改,包括 75 次插入18 次删除
  1. 31 15
      CMakeLists.txt
  2. 43 3
      init.lua
  3. 1 0
      shell.nix

+ 31 - 15
CMakeLists.txt

@@ -24,16 +24,19 @@ endif()
 # Dependencies
 include(FetchContent)
 
-# FTXUI for TUI
-FetchContent_Declare(
-    ftxui
-    GIT_REPOSITORY https://github.com/ArthurSonzogni/FTXUI.git
-    GIT_TAG v5.0.0
-)
-set(FTXUI_BUILD_DOCS OFF CACHE BOOL "" FORCE)
-set(FTXUI_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
-set(FTXUI_ENABLE_INSTALL OFF CACHE BOOL "" FORCE)
-FetchContent_MakeAvailable(ftxui)
+# ncurses for TUI (better control key support)
+find_package(Curses REQUIRED)
+
+# Optional: Keep FTXUI for comparison (commented out for now)
+# FetchContent_Declare(
+#     ftxui
+#     GIT_REPOSITORY https://github.com/ArthurSonzogni/FTXUI.git
+#     GIT_TAG v5.0.0
+# )
+# set(FTXUI_BUILD_DOCS OFF CACHE BOOL "" FORCE)
+# set(FTXUI_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
+# set(FTXUI_ENABLE_INSTALL OFF CACHE BOOL "" FORCE)
+# FetchContent_MakeAvailable(ftxui)
 
 # Lua and sol2
 find_package(Lua 5.4 REQUIRED)
@@ -65,18 +68,31 @@ target_link_libraries(lumacs_core PUBLIC
     ${LUA_LIBRARIES}
 )
 
-# TUI executable (FTXUI-based)
+# TUI executable (ncurses-based) 
 add_executable(lumacs
-    src/main.cpp
+    src/main_ncurses.cpp
 )
 
 target_link_libraries(lumacs PRIVATE
     lumacs_core
-    ftxui::screen
-    ftxui::dom
-    ftxui::component
+    ${CURSES_LIBRARIES}
 )
 
+target_include_directories(lumacs PRIVATE
+    ${CURSES_INCLUDE_DIR}
+)
+
+# Keep old FTXUI version for comparison (temporarily disabled)
+# add_executable(lumacs_ftxui
+#     src/main.cpp
+# )
+# target_link_libraries(lumacs_ftxui PRIVATE
+#     lumacs_core
+#     ftxui::screen
+#     ftxui::dom
+#     ftxui::component
+# )
+
 # Enable testing
 enable_testing()
 add_subdirectory(tests EXCLUDE_FROM_ALL)

+ 43 - 3
init.lua

@@ -309,7 +309,7 @@ editor.buffer:on_buffer_event(function(event_data)
     end
 end)
 
--- Manual highlight key (C-l) for any language
+-- Manual highlight key (original C-l for syntax highlighting)
 bind_key("C-l", function()
     highlight_buffer()
 
@@ -324,5 +324,45 @@ bind_key("C-l", function()
     message(string.format("Highlighted! Applied %d styled ranges", styles_count))
 end)
 
--- Welcome message
-message("Lumacs ready! C-s=save, C-l=highlight, M-arrows=swap lines, C-i=info, Esc/Q=quit")
+-- Test Escape key binding
+bind_key("Escape", function()
+    message("Escape pressed! (Direct binding works)")
+end)
+
+-- C-x sequence bindings (Emacs style)
+bind_key("C-x o", function()
+    editor:next_window()
+    message("Switched window with C-x o")
+end)
+
+bind_key("C-x 2", function()
+    editor:split_horizontally()
+    message("Split horizontally with C-x 2")
+end)
+
+bind_key("C-x 3", function()
+    editor:split_vertically()
+    message("Split vertically with C-x 3")
+end)
+
+bind_key("C-x 0", function()
+    editor:close_window()
+    message("Closed window with C-x 0")
+end)
+
+-- Test control keys (ncurses versions)
+bind_key("C-k", function()
+    message("C-k pressed! (Control key working with ncurses)")
+end)
+
+bind_key("C-s", function()
+    local buf = editor.buffer
+    if buf:save() then
+        message("Buffer saved with C-s (ncurses)!")
+    else
+        message("Failed to save buffer")
+    end
+end)
+
+-- Welcome message for ncurses version
+message("Lumacs (ncurses) ready! C-l=highlight, C-k=test, C-s=save, M-arrows=swap, C-x sequences, Esc=test")

+ 1 - 0
shell.nix

@@ -13,6 +13,7 @@ pkgs.mkShell {
 
     # Dependencies
     lua5_4
+    ncurses
 
     # Development tools
     clang-tools  # clangd, clang-format, clang-tidy