فهرست منبع

GTextEditor: The Home key should jump to the first non-space character

Press Home twice to get to column 0. This feels way more natural.
Andreas Kling 5 سال پیش
والد
کامیت
4fa8acf6ea
2فایلهای تغییر یافته به همراه15 افزوده شده و 1 حذف شده
  1. 14 1
      Libraries/LibGUI/GTextEditor.cpp
  2. 1 0
      Libraries/LibGUI/GTextEditor.h

+ 14 - 1
Libraries/LibGUI/GTextEditor.cpp

@@ -568,8 +568,12 @@ void GTextEditor::keydown_event(GKeyEvent& event)
         return;
     }
     if (!event.ctrl() && event.key() == KeyCode::Key_Home) {
+        int first_nonspace_column = current_line().first_non_whitespace_column();
         toggle_selection_if_needed_for_event(event);
-        set_cursor(m_cursor.line(), 0);
+        if (m_cursor.column() == first_nonspace_column)
+            set_cursor(m_cursor.line(), 0);
+        else
+            set_cursor(m_cursor.line(), first_nonspace_column);
         if (event.shift() && m_selection.start().is_valid()) {
             m_selection.set_end(m_cursor);
             did_update_selection();
@@ -1447,6 +1451,15 @@ int GTextEditor::Line::visual_line_containing(int column) const
     return visual_line_index;
 }
 
+int GTextEditor::Line::first_non_whitespace_column() const
+{
+    for (int i = 0; i < length(); ++i) {
+        if (!isspace(m_text[i]))
+            return i;
+    }
+    return length();
+}
+
 void GTextEditor::add_custom_context_menu_action(GAction& action)
 {
     m_custom_context_menu_actions.append(action);

+ 1 - 0
Libraries/LibGUI/GTextEditor.h

@@ -233,6 +233,7 @@ private:
         void clear();
         void recompute_visual_lines();
         int visual_line_containing(int column) const;
+        int first_non_whitespace_column() const;
 
         template<typename Callback>
         void for_each_visual_line(Callback) const;