began moving clipboard to direct API
This commit is contained in:
parent
6ec67c0913
commit
fc2c5ba4d7
|
@ -120,8 +120,8 @@ enum Command_ID{
|
||||||
|
|
||||||
cmdid_word_complete,
|
cmdid_word_complete,
|
||||||
|
|
||||||
cmdid_copy,
|
//cmdid_copy,
|
||||||
cmdid_cut,
|
//cmdid_cut,
|
||||||
cmdid_paste,
|
cmdid_paste,
|
||||||
cmdid_paste_next,
|
cmdid_paste_next,
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,9 @@
|
||||||
#define DIRECTORY_CD_SIG(n) int n(Application_Links *app, char *dir, int *len, int capacity, char *rel_path, int rel_len)
|
#define DIRECTORY_CD_SIG(n) int n(Application_Links *app, char *dir, int *len, int capacity, char *rel_path, int rel_len)
|
||||||
#define GET_FILE_LIST_SIG(n) File_List n(Application_Links *app, char *dir, int len)
|
#define GET_FILE_LIST_SIG(n) File_List n(Application_Links *app, char *dir, int len)
|
||||||
#define FREE_FILE_LIST_SIG(n) void n(Application_Links *app, File_List list)
|
#define FREE_FILE_LIST_SIG(n) void n(Application_Links *app, File_List list)
|
||||||
|
#define CLIPBOARD_POST_SIG(n) int n(Application_Links *app, char *str, int len)
|
||||||
|
#define CLIPBOARD_COUNT_SIG(n) int n(Application_Links *app)
|
||||||
|
#define CLIPBOARD_INDEX_SIG(n) int n(Application_Links *app, int index, char *out)
|
||||||
#define GET_BUFFER_FIRST_SIG(n) Buffer_Summary n(Application_Links *app)
|
#define GET_BUFFER_FIRST_SIG(n) Buffer_Summary n(Application_Links *app)
|
||||||
#define GET_BUFFER_NEXT_SIG(n) void n(Application_Links *app, Buffer_Summary *buffer)
|
#define GET_BUFFER_NEXT_SIG(n) void n(Application_Links *app, Buffer_Summary *buffer)
|
||||||
#define GET_BUFFER_SIG(n) Buffer_Summary n(Application_Links *app, int index)
|
#define GET_BUFFER_SIG(n) Buffer_Summary n(Application_Links *app, int index)
|
||||||
|
@ -49,6 +52,9 @@ extern "C"{
|
||||||
typedef DIRECTORY_CD_SIG(Directory_CD_Function);
|
typedef DIRECTORY_CD_SIG(Directory_CD_Function);
|
||||||
typedef GET_FILE_LIST_SIG(Get_File_List_Function);
|
typedef GET_FILE_LIST_SIG(Get_File_List_Function);
|
||||||
typedef FREE_FILE_LIST_SIG(Free_File_List_Function);
|
typedef FREE_FILE_LIST_SIG(Free_File_List_Function);
|
||||||
|
typedef CLIPBOARD_POST_SIG(Clipboard_Post_Function);
|
||||||
|
typedef CLIPBOARD_COUNT_SIG(Clipboard_Count_Function);
|
||||||
|
typedef CLIPBOARD_INDEX_SIG(Clipboard_Index_Function);
|
||||||
typedef GET_BUFFER_FIRST_SIG(Get_Buffer_First_Function);
|
typedef GET_BUFFER_FIRST_SIG(Get_Buffer_First_Function);
|
||||||
typedef GET_BUFFER_NEXT_SIG(Get_Buffer_Next_Function);
|
typedef GET_BUFFER_NEXT_SIG(Get_Buffer_Next_Function);
|
||||||
typedef GET_BUFFER_SIG(Get_Buffer_Function);
|
typedef GET_BUFFER_SIG(Get_Buffer_Function);
|
||||||
|
@ -95,6 +101,9 @@ struct Application_Links{
|
||||||
Directory_CD_Function *directory_cd;
|
Directory_CD_Function *directory_cd;
|
||||||
Get_File_List_Function *get_file_list;
|
Get_File_List_Function *get_file_list;
|
||||||
Free_File_List_Function *free_file_list;
|
Free_File_List_Function *free_file_list;
|
||||||
|
Clipboard_Post_Function *clipboard_post;
|
||||||
|
Clipboard_Count_Function *clipboard_count;
|
||||||
|
Clipboard_Index_Function *clipboard_index;
|
||||||
Get_Buffer_First_Function *get_buffer_first;
|
Get_Buffer_First_Function *get_buffer_first;
|
||||||
Get_Buffer_Next_Function *get_buffer_next;
|
Get_Buffer_Next_Function *get_buffer_next;
|
||||||
Get_Buffer_Function *get_buffer;
|
Get_Buffer_Function *get_buffer;
|
||||||
|
@ -143,6 +152,9 @@ app_links->file_exists = external_file_exists;\
|
||||||
app_links->directory_cd = external_directory_cd;\
|
app_links->directory_cd = external_directory_cd;\
|
||||||
app_links->get_file_list = external_get_file_list;\
|
app_links->get_file_list = external_get_file_list;\
|
||||||
app_links->free_file_list = external_free_file_list;\
|
app_links->free_file_list = external_free_file_list;\
|
||||||
|
app_links->clipboard_post = external_clipboard_post;\
|
||||||
|
app_links->clipboard_count = external_clipboard_count;\
|
||||||
|
app_links->clipboard_index = external_clipboard_index;\
|
||||||
app_links->get_buffer_first = external_get_buffer_first;\
|
app_links->get_buffer_first = external_get_buffer_first;\
|
||||||
app_links->get_buffer_next = external_get_buffer_next;\
|
app_links->get_buffer_next = external_get_buffer_next;\
|
||||||
app_links->get_buffer = external_get_buffer;\
|
app_links->get_buffer = external_get_buffer;\
|
||||||
|
|
|
@ -290,7 +290,7 @@ default_keys(Bind_Helper *context){
|
||||||
|
|
||||||
bind(context, ' ', MDFR_CTRL, set_mark);
|
bind(context, ' ', MDFR_CTRL, set_mark);
|
||||||
bind(context, 'a', MDFR_CTRL, replace_in_range);
|
bind(context, 'a', MDFR_CTRL, replace_in_range);
|
||||||
bind(context, 'c', MDFR_CTRL, cmdid_copy);
|
bind(context, 'c', MDFR_CTRL, copy);
|
||||||
bind(context, 'd', MDFR_CTRL, delete_range);
|
bind(context, 'd', MDFR_CTRL, delete_range);
|
||||||
bind(context, 'e', MDFR_CTRL, cmdid_center_view);
|
bind(context, 'e', MDFR_CTRL, cmdid_center_view);
|
||||||
bind(context, 'E', MDFR_CTRL, cmdid_left_adjust_view);
|
bind(context, 'E', MDFR_CTRL, cmdid_left_adjust_view);
|
||||||
|
@ -312,7 +312,7 @@ default_keys(Bind_Helper *context){
|
||||||
bind(context, 'v', MDFR_CTRL, cmdid_paste);
|
bind(context, 'v', MDFR_CTRL, cmdid_paste);
|
||||||
bind(context, 'V', MDFR_CTRL, cmdid_paste_next);
|
bind(context, 'V', MDFR_CTRL, cmdid_paste_next);
|
||||||
bind(context, 'w', MDFR_ALT, cmdid_hide_scrollbar);
|
bind(context, 'w', MDFR_ALT, cmdid_hide_scrollbar);
|
||||||
bind(context, 'x', MDFR_CTRL, cmdid_cut);
|
bind(context, 'x', MDFR_CTRL, cut);
|
||||||
bind(context, 'y', MDFR_CTRL, cmdid_redo);
|
bind(context, 'y', MDFR_CTRL, cmdid_redo);
|
||||||
bind(context, 'z', MDFR_CTRL, cmdid_undo);
|
bind(context, 'z', MDFR_CTRL, cmdid_undo);
|
||||||
|
|
||||||
|
|
|
@ -215,6 +215,57 @@ CUSTOM_COMMAND_SIG(move_right){
|
||||||
true);
|
true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Clipboard
|
||||||
|
//
|
||||||
|
|
||||||
|
static int
|
||||||
|
clipboard_copy(Application_Links *app, int start, int end, Buffer_Summary *buffer_out){
|
||||||
|
Buffer_Summary buffer = get_active_buffer(app);
|
||||||
|
int result = false;
|
||||||
|
|
||||||
|
if (0 <= start && start <= end && end <= buffer.size){
|
||||||
|
int size = (end - start);
|
||||||
|
char *str = (char*)app->memory;
|
||||||
|
|
||||||
|
if (size > app->memory_size){
|
||||||
|
app->buffer_read_range(app, &buffer, start, end, str);
|
||||||
|
app->clipboard_post(app, str, size);
|
||||||
|
if (buffer_out){*buffer_out = buffer;}
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
clipboard_cut(Application_Links *app, int start, int end, Buffer_Summary *buffer_out){
|
||||||
|
Buffer_Summary buffer = {0};
|
||||||
|
int result = false;
|
||||||
|
|
||||||
|
if (clipboard_copy(app, start, end, &buffer)){
|
||||||
|
app->buffer_replace_range(app, &buffer, start, end, 0, 0);
|
||||||
|
if (buffer_out){*buffer_out = buffer;}
|
||||||
|
}
|
||||||
|
|
||||||
|
return(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
CUSTOM_COMMAND_SIG(copy){
|
||||||
|
View_Summary view = app->get_active_view(app);
|
||||||
|
Range range = get_range(&view);
|
||||||
|
clipboard_copy(app, range.min, range.max, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
CUSTOM_COMMAND_SIG(cut){
|
||||||
|
View_Summary view = app->get_active_view(app);
|
||||||
|
Range range = get_range(&view);
|
||||||
|
clipboard_cut(app, range.min, range.max, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Various Forms of Seek
|
// Various Forms of Seek
|
||||||
//
|
//
|
||||||
|
|
6
4ed.cpp
6
4ed.cpp
|
@ -531,6 +531,7 @@ COMMAND_DECL(word_complete){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
COMMAND_DECL(copy){
|
COMMAND_DECL(copy){
|
||||||
USE_MODELS(models);
|
USE_MODELS(models);
|
||||||
REQ_READABLE_VIEW(view);
|
REQ_READABLE_VIEW(view);
|
||||||
|
@ -558,6 +559,7 @@ COMMAND_DECL(cut){
|
||||||
view_cursor_move(view, next_cursor_pos);
|
view_cursor_move(view, next_cursor_pos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
COMMAND_DECL(paste){
|
COMMAND_DECL(paste){
|
||||||
|
|
||||||
|
@ -1160,8 +1162,8 @@ setup_command_table(){
|
||||||
|
|
||||||
SET(word_complete);
|
SET(word_complete);
|
||||||
|
|
||||||
SET(copy);
|
//SET(copy);
|
||||||
SET(cut);
|
//SET(cut);
|
||||||
SET(paste);
|
SET(paste);
|
||||||
SET(paste_next);
|
SET(paste_next);
|
||||||
|
|
||||||
|
|
|
@ -295,6 +295,44 @@ FREE_FILE_LIST_SIG(external_free_file_list){
|
||||||
system->set_file_list(&list, make_string(0, 0));
|
system->set_file_list(&list, make_string(0, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CLIPBOARD_POST_SIG(external_clipboard_post){
|
||||||
|
Command_Data *cmd = (Command_Data*)app->cmd_context;
|
||||||
|
System_Functions *system = cmd->system;
|
||||||
|
Models *models = cmd->models;
|
||||||
|
General_Memory *general = &models->mem.general;
|
||||||
|
Working_Set *working = &models->working_set;
|
||||||
|
int result = false;
|
||||||
|
|
||||||
|
String *dest = working_set_next_clipboard_string(general, working, len);
|
||||||
|
copy(dest, make_string(str, len));
|
||||||
|
system->post_clipboard(*dest);
|
||||||
|
|
||||||
|
return(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
CLIPBOARD_COUNT_SIG(external_clipboard_count){
|
||||||
|
Command_Data *cmd = (Command_Data*)app->cmd_context;
|
||||||
|
Working_Set *working = &cmd->models->working_set;
|
||||||
|
int count = working->clipboard_size;
|
||||||
|
return(count);
|
||||||
|
}
|
||||||
|
|
||||||
|
CLIPBOARD_INDEX_SIG(external_clipboard_index){
|
||||||
|
Command_Data *cmd = (Command_Data*)app->cmd_context;
|
||||||
|
Working_Set *working = &cmd->models->working_set;
|
||||||
|
|
||||||
|
int size = 0;
|
||||||
|
String *str = working_set_clipboard_index(working, index);
|
||||||
|
if (str){
|
||||||
|
size = str->size;
|
||||||
|
if (out){
|
||||||
|
copy_fast_unsafe(out, *str);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return(size);
|
||||||
|
}
|
||||||
|
|
||||||
GET_BUFFER_FIRST_SIG(external_get_buffer_first){
|
GET_BUFFER_FIRST_SIG(external_get_buffer_first){
|
||||||
Command_Data *cmd = (Command_Data*)app->cmd_context;
|
Command_Data *cmd = (Command_Data*)app->cmd_context;
|
||||||
Working_Set *working_set = &cmd->models->working_set;
|
Working_Set *working_set = &cmd->models->working_set;
|
||||||
|
|
|
@ -2438,15 +2438,28 @@ working_set_next_clipboard_string(General_Memory *general, Working_Set *working,
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal String*
|
||||||
|
working_set_clipboard_index(Working_Set *working, i32 index){
|
||||||
|
String *result = 0;
|
||||||
|
i32 size = working->clipboard_size;
|
||||||
|
i32 current = working->clipboard_current;
|
||||||
|
if (index >= 0 && size > 0){
|
||||||
|
index = index % size;
|
||||||
|
index = current + size - index;
|
||||||
|
index = index % size;
|
||||||
|
result = &working->clipboards[index];
|
||||||
|
}
|
||||||
|
return(result);
|
||||||
|
}
|
||||||
|
|
||||||
internal String*
|
internal String*
|
||||||
working_set_clipboard_head(Working_Set *working){
|
working_set_clipboard_head(Working_Set *working){
|
||||||
String *result = 0;
|
String *result = 0;
|
||||||
if (working->clipboard_size > 0){
|
if (working->clipboard_size > 0){
|
||||||
i32 clipboard_index = working->clipboard_current;
|
working->clipboard_rolling = 0;
|
||||||
working->clipboard_rolling = clipboard_index;
|
result = working_set_clipboard_index(working, working->clipboard_rolling);
|
||||||
result = &working->clipboards[clipboard_index];
|
|
||||||
}
|
}
|
||||||
return result;
|
return(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal String*
|
internal String*
|
||||||
|
@ -2454,14 +2467,11 @@ working_set_clipboard_roll_down(Working_Set *working){
|
||||||
String *result = 0;
|
String *result = 0;
|
||||||
if (working->clipboard_size > 0){
|
if (working->clipboard_size > 0){
|
||||||
i32 clipboard_index = working->clipboard_rolling;
|
i32 clipboard_index = working->clipboard_rolling;
|
||||||
--clipboard_index;
|
++clipboard_index;
|
||||||
if (clipboard_index < 0){
|
|
||||||
clipboard_index = working->clipboard_size-1;
|
|
||||||
}
|
|
||||||
working->clipboard_rolling = clipboard_index;
|
working->clipboard_rolling = clipboard_index;
|
||||||
result = &working->clipboards[clipboard_index];
|
result = working_set_clipboard_index(working, working->clipboard_rolling);
|
||||||
}
|
}
|
||||||
return result;
|
return(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
|
|
|
@ -22,8 +22,9 @@ popd
|
||||||
|
|
||||||
pushd ..\build
|
pushd ..\build
|
||||||
REM call "..\code\buildsuper.bat" ..\code\4coder_default_bindings.cpp
|
REM call "..\code\buildsuper.bat" ..\code\4coder_default_bindings.cpp
|
||||||
call "..\code\buildsuper.bat" ..\code\power\4coder_experiments.cpp
|
REM call "..\code\buildsuper.bat" ..\code\power\4coder_experiments.cpp
|
||||||
REM call "..\code\buildsuper.bat" ..\code\power\4coder_casey.cpp
|
call "..\code\buildsuper.bat" ..\code\power\4coder_casey.cpp
|
||||||
|
call "..\code\buildsuper.bat" ..\4vim\4coder_chronal.cpp
|
||||||
if %ERRORLEVEL% neq 0 (set FirstError=1)
|
if %ERRORLEVEL% neq 0 (set FirstError=1)
|
||||||
|
|
||||||
set EXPORTS=/EXPORT:app_get_functions
|
set EXPORTS=/EXPORT:app_get_functions
|
||||||
|
|
|
@ -11,6 +11,11 @@ int Directory_CD(Application_Links *app, char *dir, int *len, int capacity, char
|
||||||
File_List Get_File_List(Application_Links *app, char *dir, int len);
|
File_List Get_File_List(Application_Links *app, char *dir, int len);
|
||||||
void Free_File_List(Application_Links *app, File_List list);
|
void Free_File_List(Application_Links *app, File_List list);
|
||||||
|
|
||||||
|
// Clipboard
|
||||||
|
int Clipboard_Post(Application_Links *app, char *str, int len);
|
||||||
|
int Clipboard_Count(Application_Links *app);
|
||||||
|
int Clipboard_Index(Application_Links *app, int index, char *out);
|
||||||
|
|
||||||
// Direct buffer manipulation
|
// Direct buffer manipulation
|
||||||
Buffer_Summary Get_Buffer_First(Application_Links *app);
|
Buffer_Summary Get_Buffer_First(Application_Links *app);
|
||||||
void Get_Buffer_Next(Application_Links *app, Buffer_Summary *buffer);
|
void Get_Buffer_Next(Application_Links *app, Buffer_Summary *buffer);
|
||||||
|
|
|
@ -1288,13 +1288,13 @@ DEFINE_MODAL_KEY(modal_m, casey_save_and_make_without_asking);
|
||||||
DEFINE_MODAL_KEY(modal_n, casey_goto_next_error);
|
DEFINE_MODAL_KEY(modal_n, casey_goto_next_error);
|
||||||
DEFINE_MODAL_KEY(modal_o, query_replace);
|
DEFINE_MODAL_KEY(modal_o, query_replace);
|
||||||
DEFINE_MODAL_KEY(modal_p, replace_in_range);
|
DEFINE_MODAL_KEY(modal_p, replace_in_range);
|
||||||
DEFINE_MODAL_KEY(modal_q, cmdid_copy);
|
DEFINE_MODAL_KEY(modal_q, copy);
|
||||||
DEFINE_MODAL_KEY(modal_r, reverse_search); // NOTE(allen): I've modified my default search so you can use it now.
|
DEFINE_MODAL_KEY(modal_r, reverse_search); // NOTE(allen): I've modified my default search so you can use it now.
|
||||||
DEFINE_MODAL_KEY(modal_s, search);
|
DEFINE_MODAL_KEY(modal_s, search);
|
||||||
DEFINE_MODAL_KEY(modal_t, casey_load_todo);
|
DEFINE_MODAL_KEY(modal_t, casey_load_todo);
|
||||||
DEFINE_MODAL_KEY(modal_u, cmdid_undo);
|
DEFINE_MODAL_KEY(modal_u, cmdid_undo);
|
||||||
DEFINE_MODAL_KEY(modal_v, casey_switch_buffer_other_window);
|
DEFINE_MODAL_KEY(modal_v, casey_switch_buffer_other_window);
|
||||||
DEFINE_MODAL_KEY(modal_w, cmdid_cut);
|
DEFINE_MODAL_KEY(modal_w, cut);
|
||||||
DEFINE_MODAL_KEY(modal_x, casey_find_corresponding_file_other_window);
|
DEFINE_MODAL_KEY(modal_x, casey_find_corresponding_file_other_window);
|
||||||
DEFINE_MODAL_KEY(modal_y, cmdid_redo);
|
DEFINE_MODAL_KEY(modal_y, cmdid_redo);
|
||||||
DEFINE_MODAL_KEY(modal_z, cmdid_interactive_open);
|
DEFINE_MODAL_KEY(modal_z, cmdid_interactive_open);
|
||||||
|
|
Loading…
Reference in New Issue