|
|
@@ -248,6 +248,7 @@ protected:
|
|
|
bool on_key_pressed(guint keyval, guint /*keycode*/, Gdk::ModifierType state) {
|
|
|
// 1. Resolve the base key name
|
|
|
std::string key_name = resolve_key(keyval, state);
|
|
|
+ std::cout << "[DEBUG] Raw keyval: " << keyval << ", resolved to: '" << key_name << "'" << std::endl;
|
|
|
if (key_name.empty()) return false;
|
|
|
|
|
|
// 2. Handle Modifiers
|
|
|
@@ -257,6 +258,9 @@ protected:
|
|
|
bool is_meta = (state_uint & static_cast<unsigned int>(Gdk::ModifierType::META_MASK)) != 0;
|
|
|
bool is_lumacs_meta = is_alt || is_meta;
|
|
|
|
|
|
+ std::cout << "[DEBUG] Modifiers - Ctrl: " << is_control << ", Alt: " << is_alt
|
|
|
+ << ", Meta: " << is_meta << std::endl;
|
|
|
+
|
|
|
// 3. Handle Minibuffer Input Logic (Command/Buffer/File modes)
|
|
|
// If in a special mode, we might consume the key directly instead of passing to Lua bindings,
|
|
|
// UNLESS it's a control sequence like C-g or Return.
|
|
|
@@ -317,15 +321,41 @@ protected:
|
|
|
if (is_control && key_name.length() == 1) key_name = "C-" + key_name;
|
|
|
if (is_lumacs_meta) key_name = "M-" + key_name; // Use combined meta/alt
|
|
|
|
|
|
- // std::cout << "Key: " << key_name << std::endl;
|
|
|
+ std::cout << "Key: " << key_name << std::endl; // Enable debug output
|
|
|
KeyResult result = core_->lua_api()->process_key(key_name);
|
|
|
|
|
|
- // Fallback: Insert printable characters if unbound
|
|
|
- if (result == KeyResult::Unbound && key_name.size() == 1 &&
|
|
|
- key_name[0] >= 32 && key_name[0] <= 126) {
|
|
|
- auto cursor = core_->cursor();
|
|
|
- core_->buffer().insert_char(cursor, key_name[0]);
|
|
|
- core_->set_cursor({cursor.line, cursor.column + 1});
|
|
|
+ // Fallback handlers for common editing keys
|
|
|
+ if (result == KeyResult::Unbound) {
|
|
|
+ // Return - insert newline
|
|
|
+ if (key_name == "Return") {
|
|
|
+ auto cursor = core_->cursor();
|
|
|
+ core_->buffer().insert_newline(cursor);
|
|
|
+ core_->set_cursor({cursor.line + 1, 0});
|
|
|
+ }
|
|
|
+ // Backspace - delete character
|
|
|
+ else if (key_name == "Backspace") {
|
|
|
+ auto cursor = core_->cursor();
|
|
|
+ core_->buffer().erase_char(cursor);
|
|
|
+ if (cursor.column > 0) {
|
|
|
+ core_->set_cursor({cursor.line, cursor.column - 1});
|
|
|
+ } else if (cursor.line > 0) {
|
|
|
+ // Join with previous line
|
|
|
+ const auto& prev_line = core_->buffer().line(cursor.line - 1);
|
|
|
+ size_t prev_line_len = prev_line.length();
|
|
|
+ core_->set_cursor({cursor.line - 1, prev_line_len});
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // Delete - delete character forward
|
|
|
+ else if (key_name == "Delete") {
|
|
|
+ auto cursor = core_->cursor();
|
|
|
+ core_->buffer().erase_char({cursor.line, cursor.column + 1});
|
|
|
+ }
|
|
|
+ // Insert printable characters if unbound
|
|
|
+ else if (key_name.size() == 1 && key_name[0] >= 32 && key_name[0] <= 126) {
|
|
|
+ auto cursor = core_->cursor();
|
|
|
+ core_->buffer().insert_char(cursor, key_name[0]);
|
|
|
+ core_->set_cursor({cursor.line, cursor.column + 1});
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// Request redraw after processing input
|