add duplicate line function

This commit is contained in:
2025-12-11 09:41:09 -05:00
parent 83a2de0386
commit cfa6e37b85
2 changed files with 18 additions and 2 deletions

View File

@@ -12,7 +12,7 @@
],
"build_systems": [
{
"cmd": ["odin", "build", "src", "-debug"],
"cmd": ["odin", "build", "src", "-debug", "-o:none"],
"name": "odit",
"selector": "source.odin",
"working_dir": "${project_path}"

View File

@@ -2,7 +2,7 @@
- DONE implement movement up and down by paragraph
- DONE implement scrolling/viewport
- DONE implement deletion by word
- TODO implement selection
- DONE implement selection
- TODO implement duplicate selection/line
- TODO implement move selection/line up/down
- TODO implement copy/cut/paste
@@ -16,6 +16,7 @@ package main
import "core:fmt"
import "core:mem"
import "core:os"
import "core:slice"
import "core:strings"
import utf8 "core:unicode/utf8"
import r "vendor:raylib"
@@ -129,6 +130,21 @@ main :: proc() {
fmt.println("Wrote file!")
}
if r.IsKeyDown(.LEFT_SUPER) && r.IsKeyDown(.LEFT_SHIFT) && r.IsKeyPressed(.D) {
if selection.active {
earliest := selection_earliest()
latest := selection_latest()
#reverse for line, index in lines[earliest.line:latest.line + 1] {
new_line, _ := slice.clone_to_dynamic(line[:])
inject_at(&lines, latest.line + 1, new_line)
}
// NOTE: should we move the selection as well?
} else {
new_line, _ := slice.clone_to_dynamic(current_line()[:])
inject_at(&lines, cursor.line + 1, new_line)
cursor.line += 1
}
}
cursor_padding := 3
// move viewport up