[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[tyndur-devel] [PATCH 4/4] kedit: Erweitertes Pos1/Ende



+ kedit: Pos1 springt erst an den Anfang der Zeile, beim zweiten
  Tastendruck zum ersten Nicht-Leerzeichen. Ende geht analog.

Signed-off-by: Kevin Wolf <kevin@xxxxxxxxxx>
---
 src/modules/pas/kedit/kedit_input.pas |   28 ++++++++++++++++++++++++++--
 1 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/src/modules/pas/kedit/kedit_input.pas b/src/modules/pas/kedit/kedit_input.pas
index 030ba95..aaf5683 100644
--- a/src/modules/pas/kedit/kedit_input.pas
+++ b/src/modules/pas/kedit/kedit_input.pas
@@ -172,13 +172,37 @@ end;
 
 procedure uih_cursor_to_start_of_line(state: pkedit_state);
 begin
-    state^.cursX := 1;
+    with state^ do begin
+        if cursX = 1 then begin
+            // Wenn der Cursor schon auf der ersten Spalte ist, zum ersten
+            // Nichtleerzeichen auf der Zeile springen
+            while (length(text^[cursY]) > cursX)
+                and (text^[cursY][cursX] = ' ')
+            do begin
+                // Ansonsten Cursor in die erste Spalte setzen
+                Inc(cursX)
+            end;
+        end else begin
+            cursX := 1;
+        end;
+    end;
 end;
 
 procedure uih_cursor_to_end_of_line(state: pkedit_state);
+var
+    text_end: integer;
 begin
     with state^ do begin
-        cursX := Length(RTrim(text^[cursY]));
+        text_end := Length(RTrim(text^[cursY]));
+        if cursX = text_end + 1 then begin
+            // Wenn der Cursor schon hinter dem letzten Zeichen des Texts (ohne
+            // abschliessende Leerzeichen) steht, ganz ans Ende der Zeile
+            // springen
+            cursX := Length(text^[cursY]);
+        end else begin
+            // Ansonsten Cursor ans Ende des Texts setzen
+            cursX := text_end;
+        end;
         if cursX < 255 then Inc(cursX);
     end;
 end;
-- 
1.6.0.2