finally saving files, such wow
parent
a8dbc09085
commit
838664f2b5
|
@ -401,6 +401,8 @@ update_file_buffer_index_from_cursor :: proc(buffer: ^FileBuffer) {
|
|||
|
||||
file_buffer_line_length :: proc(buffer: ^FileBuffer, index: FileBufferIndex) -> int {
|
||||
line_length := 0;
|
||||
if len(buffer.content_slices) <= 0 do return line_length
|
||||
|
||||
first_character := buffer.content_slices[index.slice_index][index.content_index];
|
||||
|
||||
left_it := new_file_buffer_iter_with_cursor(buffer, Cursor { index = index });
|
||||
|
@ -717,7 +719,9 @@ new_file_buffer :: proc(allocator: mem.Allocator, file_path: string, base_dir: s
|
|||
buffer := FileBuffer {
|
||||
allocator = allocator,
|
||||
directory = dir,
|
||||
file_path = fi.fullpath[4:],
|
||||
file_path = fi.fullpath,
|
||||
// TODO: fix this windows issue
|
||||
// file_path = fi.fullpath[4:],
|
||||
extension = extension,
|
||||
|
||||
original_content = slice.clone_to_dynamic(original_content),
|
||||
|
@ -731,7 +735,12 @@ new_file_buffer :: proc(allocator: mem.Allocator, file_path: string, base_dir: s
|
|||
input_buffer = make([dynamic]u8, 0, 1024),
|
||||
};
|
||||
|
||||
append(&buffer.content_slices, buffer.original_content[:]);
|
||||
if len(buffer.original_content) > 0 {
|
||||
append(&buffer.content_slices, buffer.original_content[:]);
|
||||
} else {
|
||||
append(&buffer.added_content, '\n')
|
||||
append(&buffer.content_slices, buffer.added_content[:])
|
||||
}
|
||||
|
||||
return buffer, error();
|
||||
} else {
|
||||
|
@ -739,6 +748,23 @@ new_file_buffer :: proc(allocator: mem.Allocator, file_path: string, base_dir: s
|
|||
}
|
||||
}
|
||||
|
||||
save_buffer_to_disk :: proc(state: ^State, buffer: ^FileBuffer) -> (error: os.Error) {
|
||||
fd := os.open(buffer.file_path, flags = os.O_RDWR) or_return;
|
||||
defer os.close(fd);
|
||||
|
||||
offset: i64 = 0
|
||||
for content_slice in buffer.content_slices {
|
||||
os.write_at(fd, content_slice, offset) or_return
|
||||
|
||||
offset += i64(len(content_slice))
|
||||
}
|
||||
os.flush(fd)
|
||||
|
||||
log.infof("written %v bytes", offset)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
next_buffer :: proc(state: ^State, prev_buffer: ^int) -> int {
|
||||
index := prev_buffer^;
|
||||
|
||||
|
|
|
@ -73,6 +73,13 @@ register_default_input_actions :: proc(input_map: ^core.InputActions) {
|
|||
}, "decrease font size");
|
||||
}
|
||||
|
||||
// Save file
|
||||
core.register_ctrl_key_action(input_map, .S, proc(state: ^State) {
|
||||
if err := core.save_buffer_to_disk(state, core.current_buffer(state)); err != nil {
|
||||
log.errorf("failed to save buffer to disk: %v", err)
|
||||
}
|
||||
}, "Save file")
|
||||
|
||||
core.register_key_action(input_map, .G, core.new_input_actions(), "Go commands");
|
||||
register_default_go_actions(&(&input_map.key_actions[.G]).action.(core.InputActions));
|
||||
|
||||
|
|
|
@ -336,7 +336,7 @@ main :: proc() {
|
|||
defer ttf.Quit();
|
||||
|
||||
sdl_window := sdl2.CreateWindow(
|
||||
"odin_editor - [now with more ui]",
|
||||
"odin_editor - [less plugins more speed]",
|
||||
sdl2.WINDOWPOS_UNDEFINED,
|
||||
sdl2.WINDOWPOS_UNDEFINED,
|
||||
640,
|
||||
|
|
|
@ -142,6 +142,22 @@ render_file_buffer :: proc(state: ^core.State, s: ^ui.State, buffer: ^core.FileB
|
|||
{
|
||||
ui.open_element(s, fmt.tprintf("%s", state.mode), {})
|
||||
ui.close_element(s)
|
||||
|
||||
ui.open_element(s, nil, { kind = {ui.Grow{}, ui.Grow{}}})
|
||||
ui.close_element(s)
|
||||
|
||||
ui.open_element(
|
||||
s,
|
||||
fmt.tprintf(
|
||||
"%v:%v - Slice %v:%v",
|
||||
buffer.cursor.line + 1,
|
||||
buffer.cursor.col + 1,
|
||||
buffer.cursor.index.slice_index,
|
||||
buffer.cursor.index.content_index
|
||||
),
|
||||
{}
|
||||
)
|
||||
ui.close_element(s)
|
||||
}
|
||||
ui.close_element(s)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue