Pārlūkot izejas kodu

Adding function buffer_remove_char_mv_cur

Vinicius Teshima 1 gadu atpakaļ
vecāks
revīzija
1976223e03
2 mainītis faili ar 32 papildinājumiem un 6 dzēšanām
  1. 28 4
      src/buffer.h
  2. 4 2
      src/main.c

+ 28 - 4
src/buffer.h

@@ -15,7 +15,9 @@ struct buffer buffer_mv_cur_up(struct buffer buf);
 struct buffer buffer_mv_cur_down(struct buffer buf);
 
 struct buffer buffer_insert_char(struct buffer buf, size_t index, char c);
+struct buffer buffer_remove_char_mv_cur(struct buffer buf, size_t index);
 struct buffer buffer_remove_char(struct buffer buf, size_t index);
+
 #if defined(BUFFER_IMP) || defined(IMP)
 
 struct buffer
@@ -83,27 +85,49 @@ buffer_insert_char(struct buffer buf, size_t index, char c)
 }
 
 struct buffer
-buffer_remove_char(struct buffer buf, size_t index)
+buffer_remove_char_mv_cur(struct buffer buf, size_t index)
 {
 	if ( buf.data.size == 0 ) {
 		return buf;
 	}
 
+	if ( index > buf.data.size ) {
+		return buf;
+	}
+
 	if ( buf.data.size == index ) {
 		buf.data.items[--buf.data.size] = 0;
 		--buf.cur;
 		return buf;
 	}
 
-	/* if ( buf.data.items[buf.data.size-1] == '\n' ) { */
-	/* } */
-
 	DA_DELETE(buf.data, index);
 	--buf.cur;
 
 	return buf;
 }
 
+struct buffer
+buffer_remove_char(struct buffer buf, size_t index)
+{
+	if ( buf.data.size == 0 ) {
+		return buf;
+	}
+
+	if ( index > buf.data.size ) {
+		return buf;
+	}
+
+	if ( buf.data.size == index ) {
+		buf.data.items[--buf.data.size] = 0;
+		return buf;
+	}
+
+	DA_DELETE(buf.data, index);
+
+	return buf;
+}
+
 #endif /* defined(BUFFER_IMP) || defined(IMP) */
 
 #endif

+ 4 - 2
src/main.c

@@ -40,7 +40,6 @@ main(int32_t argc, char **argv)
 
 	struct app app = app_create("ged");
 
-
 	app.font = font_create(app.rdr, font_path, 7, 18);
 	app.font.scale = 2.0;
 
@@ -81,7 +80,10 @@ handle_events(struct app app, struct buffer buf)
 		case SDL_KEYDOWN: {
 			switch ( e.key.keysym.sym ) {
 			case SDLK_BACKSPACE: {
-				buf = buffer_remove_char(buf, buf.cur-1);
+				buf = buffer_remove_char_mv_cur(buf, buf.cur-1);
+			} break;
+			case SDLK_DELETE: {
+				buf = buffer_remove_char(buf, buf.cur);
 			} break;
 			case SDLK_RETURN: {
 				buf = buffer_insert_char(buf, buf.cur, '\n');