Improve cutbuffer handling

* Adds two new keys which you can bind in /bind:
  yank_next_cutbuffer: Revert to the previous last deleted text
  append_next_kill: Append next deletion
* Consecutive kills are now appended to the current cutbuffer
This commit is contained in:
ailin-nemui 2016-03-21 09:14:01 +01:00
commit aec2466e36
3 changed files with 194 additions and 62 deletions

View file

@ -1,12 +1,16 @@
#ifndef __GUI_ENTRY_H
#define __GUI_ENTRY_H
typedef struct {
int cutbuffer_len;
unichar *cutbuffer;
} GUI_ENTRY_CUTBUFFER_REC;
typedef struct {
int text_len, text_alloc; /* as shorts, not chars */
unichar *text;
int cutbuffer_len;
unichar *cutbuffer;
GSList *kill_ring;
/* all as shorts, not chars */
int xpos, ypos, width; /* entry position in screen */
@ -18,6 +22,10 @@ typedef struct {
int redraw_needed_from;
unsigned int utf8:1;
unsigned int previous_append_next_kill:1;
unsigned int append_next_kill:1;
unsigned int yank_preceded:1;
} GUI_ENTRY_REC;
typedef enum {
@ -47,11 +55,12 @@ void gui_entry_insert_text(GUI_ENTRY_REC *entry, const char *str);
void gui_entry_insert_char(GUI_ENTRY_REC *entry, unichar chr);
char *gui_entry_get_cutbuffer(GUI_ENTRY_REC *entry);
char *gui_entry_get_next_cutbuffer(GUI_ENTRY_REC *entry);
void gui_entry_erase_to(GUI_ENTRY_REC *entry, int pos, CUTBUFFER_UPDATE_OP update_cutbuffer);
void gui_entry_erase(GUI_ENTRY_REC *entry, int size, CUTBUFFER_UPDATE_OP update_cutbuffer);
void gui_entry_erase_cell(GUI_ENTRY_REC *entry);
void gui_entry_erase_word(GUI_ENTRY_REC *entry, int to_space, CUTBUFFER_UPDATE_OP cutbuffer_op);
void gui_entry_erase_next_word(GUI_ENTRY_REC *entry, int to_space);
void gui_entry_erase_next_word(GUI_ENTRY_REC *entry, int to_space, CUTBUFFER_UPDATE_OP cutbuffer_op);
void gui_entry_transpose_chars(GUI_ENTRY_REC *entry);
void gui_entry_transpose_words(GUI_ENTRY_REC *entry);