|
|
@@ -192,7 +192,7 @@ bool LuaApi::execute_key_binding(const std::string& key) {
|
|
|
it->second();
|
|
|
return true;
|
|
|
} catch (const sol::error& e) {
|
|
|
- std::cerr << "Lua error executing key binding '" << key << "': " << e.what() << std::endl;
|
|
|
+ std::cerr << "Lua error executing key binding '" << key << "': " << e.what() << "\n";
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
@@ -200,7 +200,7 @@ bool LuaApi::execute_key_binding(const std::string& key) {
|
|
|
// Manual C functions implementations
|
|
|
int LuaApi::get_active_buffer_line_count_lua() {
|
|
|
if (!core_ || !core_->active_window() || !core_->active_window()->buffer_ptr()) {
|
|
|
- std::cerr << "[DEBUG_MANUAL] get_active_buffer_line_count_lua: Core, active window or buffer is null!" << std::endl;
|
|
|
+ std::cerr << "[DEBUG_MANUAL] get_active_buffer_line_count_lua: Core, active window or buffer is null!\n";
|
|
|
return 0;
|
|
|
}
|
|
|
return static_cast<int>(core_->buffer().line_count());
|
|
|
@@ -208,15 +208,42 @@ int LuaApi::get_active_buffer_line_count_lua() {
|
|
|
|
|
|
void LuaApi::lua_editor_move_right() {
|
|
|
if (!core_) {
|
|
|
- std::cerr << "[DEBUG_MANUAL] lua_editor_move_right: Core is null!" << std::endl;
|
|
|
+ std::cerr << "[DEBUG_MANUAL] lua_editor_move_right: Core is null!\n";
|
|
|
return;
|
|
|
}
|
|
|
core_->move_right();
|
|
|
}
|
|
|
|
|
|
+void LuaApi::lua_editor_new_buffer(const std::string& name) {
|
|
|
+ if (!core_) {
|
|
|
+ std::cerr << "[DEBUG_MANUAL] lua_editor_new_buffer: Core is null!\n";
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ core_->new_buffer(name);
|
|
|
+}
|
|
|
+
|
|
|
+sol::optional<std::string> LuaApi::lua_editor_get_buffer_by_name(const std::string& name) {
|
|
|
+ if (!core_) {
|
|
|
+ std::cerr << "[DEBUG_MANUAL] lua_editor_get_buffer_by_name: Core is null!\n";
|
|
|
+ return sol::nullopt;
|
|
|
+ }
|
|
|
+ if (auto buffer = core_->get_buffer_by_name(name)) {
|
|
|
+ return buffer->name(); // Return name as a string to avoid complex Buffer usertype issues
|
|
|
+ }
|
|
|
+ return sol::nullopt;
|
|
|
+}
|
|
|
+
|
|
|
+void LuaApi::lua_editor_set_message(const std::string& message) {
|
|
|
+ if (!core_) {
|
|
|
+ std::cerr << "[DEBUG_MANUAL] lua_editor_set_message: Core is null!\n";
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ core_->set_message(message);
|
|
|
+}
|
|
|
+
|
|
|
void LuaApi::lua_config_set_string(const std::string& key, const std::string& value) {
|
|
|
if (!core_) {
|
|
|
- std::cerr << "[DEBUG_MANUAL] lua_config_set_string: Core is null!" << std::endl;
|
|
|
+ std::cerr << "[DEBUG_MANUAL] lua_config_set_string: Core is null!\n";
|
|
|
return;
|
|
|
}
|
|
|
core_->config().set(key, value);
|
|
|
@@ -224,12 +251,44 @@ void LuaApi::lua_config_set_string(const std::string& key, const std::string& va
|
|
|
|
|
|
std::string LuaApi::lua_config_get_string(const std::string& key, const std::string& default_val) {
|
|
|
if (!core_) {
|
|
|
- std::cerr << "[DEBUG_MANUAL] lua_config_get_string: Core is null!" << std::endl;
|
|
|
+ std::cerr << "[DEBUG_MANUAL] lua_config_get_string: Core is null!\n";
|
|
|
return default_val;
|
|
|
}
|
|
|
return core_->config().get<std::string>(key, default_val);
|
|
|
}
|
|
|
|
|
|
+void LuaApi::lua_config_set_bool(const std::string& key, bool value) {
|
|
|
+ if (!core_) {
|
|
|
+ std::cerr << "[DEBUG_MANUAL] lua_config_set_bool: Core is null!\n";
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ core_->config().set(key, value);
|
|
|
+}
|
|
|
+
|
|
|
+bool LuaApi::lua_config_get_bool(const std::string& key, bool default_val) {
|
|
|
+ if (!core_) {
|
|
|
+ std::cerr << "[DEBUG_MANUAL] lua_config_get_bool: Core is null!\n";
|
|
|
+ return default_val;
|
|
|
+ }
|
|
|
+ return core_->config().get<bool>(key, default_val);
|
|
|
+}
|
|
|
+
|
|
|
+void LuaApi::lua_config_set_int(const std::string& key, int value) {
|
|
|
+ if (!core_) {
|
|
|
+ std::cerr << "[DEBUG_MANUAL] lua_config_set_int: Core is null!\n";
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ core_->config().set(key, value);
|
|
|
+}
|
|
|
+
|
|
|
+int LuaApi::lua_config_get_int(const std::string& key, int default_val) {
|
|
|
+ if (!core_) {
|
|
|
+ std::cerr << "[DEBUG_MANUAL] lua_config_get_int: Core is null!\n";
|
|
|
+ return default_val;
|
|
|
+ }
|
|
|
+ return core_->config().get<int>(key, default_val);
|
|
|
+}
|
|
|
+
|
|
|
void LuaApi::setup_api() {
|
|
|
register_types();
|
|
|
register_functions();
|
|
|
@@ -418,41 +477,7 @@ void LuaApi::register_types() {
|
|
|
})
|
|
|
);
|
|
|
|
|
|
- // Buffer type
|
|
|
- lua_.new_usertype<Buffer>("Buffer",
|
|
|
- sol::no_constructor,
|
|
|
- "line_count", &Buffer::line_count,
|
|
|
- "line", &Buffer::line,
|
|
|
- "name", &Buffer::name,
|
|
|
- "is_modified", &Buffer::is_modified,
|
|
|
- "content", &Buffer::content,
|
|
|
- "insert", &Buffer::insert,
|
|
|
- "insert_char", &Buffer::insert_char,
|
|
|
- "insert_newline", &Buffer::insert_newline,
|
|
|
- "erase", &Buffer::erase,
|
|
|
- "erase_char", &Buffer::erase_char,
|
|
|
- "replace", &Buffer::replace,
|
|
|
- "find", &Buffer::find,
|
|
|
- "find_backward", &Buffer::find_backward,
|
|
|
- "clear", &Buffer::clear,
|
|
|
- "save", &Buffer::save,
|
|
|
- // Styling methods
|
|
|
- "set_style", &Buffer::set_style,
|
|
|
- "get_line_styles", &Buffer::get_line_styles,
|
|
|
- "clear_styles", &Buffer::clear_styles,
|
|
|
- "clear_line_styles", &Buffer::clear_line_styles,
|
|
|
- // Event system
|
|
|
- "on_buffer_event", &Buffer::on_buffer_event,
|
|
|
- // Language
|
|
|
- "language", sol::property(&Buffer::language, &Buffer::set_language),
|
|
|
- // Mark and Region
|
|
|
- "set_mark", &Buffer::set_mark,
|
|
|
- "deactivate_mark", &Buffer::deactivate_mark,
|
|
|
- "mark", sol::property(&Buffer::mark),
|
|
|
- "has_active_mark", &Buffer::has_active_mark,
|
|
|
- "get_region", &Buffer::get_region,
|
|
|
- "get_text_in_range", &Buffer::get_text_in_range
|
|
|
- );
|
|
|
+
|
|
|
|
|
|
|
|
|
|
|
|
@@ -551,23 +576,15 @@ void LuaApi::register_types() {
|
|
|
// EditorCore type
|
|
|
lua_.new_usertype<EditorCore>("EditorCore",
|
|
|
sol::no_constructor,
|
|
|
- "buffer", sol::property([](EditorCore& e) -> Buffer& { return e.buffer(); }),
|
|
|
- "cursor", sol::property(&EditorCore::cursor, &EditorCore::set_cursor),
|
|
|
- "move_up", &EditorCore::move_up,
|
|
|
- "move_down", &EditorCore::move_down,
|
|
|
- "move_left", &EditorCore::move_left,
|
|
|
- "move_right", &EditorCore::move_right,
|
|
|
- "move_to_line_start", &EditorCore::move_to_line_start,
|
|
|
- "move_to_line_end", &EditorCore::move_to_line_end,
|
|
|
- "move_forward_word", &EditorCore::move_forward_word,
|
|
|
- "move_backward_word", &EditorCore::move_backward_word,
|
|
|
+
|
|
|
+
|
|
|
"page_up", &EditorCore::page_up,
|
|
|
"page_down", &EditorCore::page_down,
|
|
|
"goto_beginning", &EditorCore::goto_beginning,
|
|
|
"goto_end", &EditorCore::goto_end,
|
|
|
"goto_line", &EditorCore::goto_line,
|
|
|
"load_file", &EditorCore::load_file,
|
|
|
- "new_buffer", &EditorCore::new_buffer,
|
|
|
+
|
|
|
"split_horizontally", &EditorCore::split_horizontally,
|
|
|
"split_vertically", &EditorCore::split_vertically,
|
|
|
"close_window", &EditorCore::close_active_window,
|
|
|
@@ -606,7 +623,7 @@ void LuaApi::register_types() {
|
|
|
"string_rectangle", &EditorCore::string_rectangle,
|
|
|
// Buffer management
|
|
|
"get_buffer_names", &EditorCore::get_buffer_names,
|
|
|
- "get_buffer_by_name", &EditorCore::get_buffer_by_name,
|
|
|
+
|
|
|
"switch_buffer_in_window", &EditorCore::switch_buffer_in_window,
|
|
|
"close_buffer", &EditorCore::close_buffer,
|
|
|
"get_all_buffer_info", &EditorCore::get_all_buffer_info,
|
|
|
@@ -614,8 +631,7 @@ void LuaApi::register_types() {
|
|
|
"theme_manager", sol::property([](EditorCore& e) -> ThemeManager& { return e.theme_manager(); }),
|
|
|
"set_theme", [](EditorCore& e, const std::string& theme_name) { e.theme_manager().set_active_theme(theme_name); }, // Corrected
|
|
|
"active_theme", sol::property([](EditorCore& e) -> const Theme& { return *e.theme_manager().active_theme(); }), // Corrected
|
|
|
- // Configuration
|
|
|
- "config", sol::property([](EditorCore& e) -> Config& { return e.config(); }),
|
|
|
+
|
|
|
|
|
|
// Key binding (method on EditorCore)
|
|
|
"bind_key", [this](EditorCore& core, std::string key, sol::function callback, sol::optional<std::string> description) {
|
|
|
@@ -716,8 +732,7 @@ void LuaApi::register_types() {
|
|
|
core.command_system().register_command(name, command_func, description, interactive.value_or(true), interactive_spec.value_or(""), aliases);
|
|
|
},
|
|
|
|
|
|
- // Message display
|
|
|
- "message", &EditorCore::set_message,
|
|
|
+
|
|
|
|
|
|
// Define face (method on EditorCore)
|
|
|
"define_face", [](EditorCore& core, std::string name, const FaceAttributes& attrs) {
|
|
|
@@ -773,6 +788,41 @@ void LuaApi::register_functions() {
|
|
|
return core_->command_system().get_command_interactive_spec(command_name);
|
|
|
};
|
|
|
|
|
|
+ // New manual bindings for core interactions
|
|
|
+ lua_["lumacs_get_active_buffer_line_count"] = [this]() {
|
|
|
+ return this->get_active_buffer_line_count_lua();
|
|
|
+ };
|
|
|
+ lua_["lumacs_editor_move_right"] = [this]() {
|
|
|
+ this->lua_editor_move_right();
|
|
|
+ };
|
|
|
+ lua_["lumacs_editor_new_buffer"] = [this](const std::string& name) {
|
|
|
+ this->lua_editor_new_buffer(name);
|
|
|
+ };
|
|
|
+ lua_["lumacs_editor_get_buffer_by_name"] = [this](const std::string& name) {
|
|
|
+ return this->lua_editor_get_buffer_by_name(name);
|
|
|
+ };
|
|
|
+ lua_["lumacs_editor_set_message"] = [this](const std::string& message) {
|
|
|
+ this->lua_editor_set_message(message);
|
|
|
+ };
|
|
|
+ lua_["lumacs_config_set_string"] = [this](const std::string& key, const std::string& value) {
|
|
|
+ this->lua_config_set_string(key, value);
|
|
|
+ };
|
|
|
+ lua_["lumacs_config_get_string"] = [this](const std::string& key, const std::string& default_val) {
|
|
|
+ return this->lua_config_get_string(key, default_val);
|
|
|
+ };
|
|
|
+ lua_["lumacs_config_set_bool"] = [this](const std::string& key, bool value) {
|
|
|
+ this->lua_config_set_bool(key, value);
|
|
|
+ };
|
|
|
+ lua_["lumacs_config_get_bool"] = [this](const std::string& key, bool default_val) {
|
|
|
+ return this->lua_config_get_bool(key, default_val);
|
|
|
+ };
|
|
|
+ lua_["lumacs_config_set_int"] = [this](const std::string& key, int value) {
|
|
|
+ this->lua_config_set_int(key, value);
|
|
|
+ };
|
|
|
+ lua_["lumacs_config_get_int"] = [this](const std::string& key, int default_val) {
|
|
|
+ return this->lua_config_get_int(key, default_val);
|
|
|
+ };
|
|
|
+
|
|
|
// Completion functions
|
|
|
lua_["get_completion_candidates"] = [this](int mode_int, std::string input) {
|
|
|
MinibufferMode mode = static_cast<MinibufferMode>(mode_int);
|