1
0
mirror of https://github.com/weechat/weechat.git synced 2026-07-01 07:16:37 +02:00

add some gui_input features : clipboard and a 'translate_chars' function

This commit is contained in:
Emmanuel Bouthenot
2005-07-12 10:06:10 +00:00
parent 07a820ced6
commit 505b43d15b
10 changed files with 192 additions and 0 deletions
+7
View File
@@ -2421,6 +2421,9 @@ gui_init ()
refresh ();
/* init clipboard buffer */
gui_input_clipboard = NULL;
/* create new window/buffer */
if (gui_window_new (0, 0, COLS, LINES))
{
@@ -2445,6 +2448,10 @@ gui_end ()
{
t_gui_window *ptr_win;
/* free clipboard buffer */
if (gui_input_clipboard)
free(gui_input_clipboard);
/* delete all windows */
for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window)
{
+2
View File
@@ -62,6 +62,8 @@ gui_input_default_key_bindings ()
gui_key_bind ( /* ^K */ "ctrl-K", "delete_end_line");
gui_key_bind ( /* ^U */ "ctrl-U", "delete_beginning_line");
gui_key_bind ( /* ^W */ "ctrl-W", "delete_previous_word");
gui_key_bind ( /* ^Y */ "ctrl-Y", "clipboard_paste");
gui_key_bind ( /* ^T */ "ctrl-T", "transpose_chars");
gui_key_bind ( /* home */ "meta2-1~", "home");
gui_key_bind ( /* home */ "meta2-H", "home");
gui_key_bind ( /* home */ "meta2-7~", "home");
+79
View File
@@ -56,6 +56,7 @@ t_gui_buffer *last_gui_buffer = NULL; /* pointer to last buffer */
t_gui_buffer *buffer_before_dcc = NULL; /* buffer before dcc switch */
t_gui_infobar *gui_infobar; /* pointer to infobar content */
char *gui_input_clipboard = NULL; /* buffer to store clipboard content */
/*
* gui_window_new: create a new window
@@ -921,6 +922,10 @@ gui_input_delete_previous_word ()
num_char_deleted = gui_current_window->buffer->input_buffer_pos - i;
num_char_end = gui_current_window->buffer->input_buffer_size -
gui_current_window->buffer->input_buffer_pos;
gui_input_clipboard_copy(gui_current_window->buffer->input_buffer +
gui_current_window->buffer->input_buffer_pos - num_char_deleted,
num_char_deleted);
for (j = 0; j < num_char_end; j++)
gui_current_window->buffer->input_buffer[i + j] =
@@ -953,6 +958,9 @@ gui_input_delete_next_word ()
i++;
}
num_char_deleted = i - gui_current_window->buffer->input_buffer_pos;
gui_input_clipboard_copy(gui_current_window->buffer->input_buffer +
gui_current_window->buffer->input_buffer_pos, num_char_deleted);
for (j = i; j < gui_current_window->buffer->input_buffer_size; j++)
gui_current_window->buffer->input_buffer[j - num_char_deleted] =
@@ -974,6 +982,9 @@ gui_input_delete_begin_of_line ()
{
int i;
gui_input_clipboard_copy(gui_current_window->buffer->input_buffer,
gui_current_window->buffer->input_buffer_pos);
for (i = gui_current_window->buffer->input_buffer_pos;
i < gui_current_window->buffer->input_buffer_size; i++)
gui_current_window->buffer->input_buffer[i - gui_current_window->buffer->input_buffer_pos] =
@@ -995,6 +1006,10 @@ gui_input_delete_begin_of_line ()
void
gui_input_delete_end_of_line ()
{
gui_input_clipboard_copy(gui_current_window->buffer->input_buffer +
gui_current_window->buffer->input_buffer_pos,
gui_current_window->buffer->input_buffer_size-1);
gui_current_window->buffer->input_buffer[gui_current_window->buffer->input_buffer_pos] = ' ';
gui_current_window->buffer->input_buffer_size = gui_current_window->buffer->input_buffer_pos ;
gui_current_window->buffer->input_buffer[gui_current_window->buffer->input_buffer_size] = '\0';
@@ -1018,6 +1033,70 @@ gui_input_delete_line ()
gui_current_window->buffer->completion.position = -1;
}
/*
* gui_input_transpose_chars: transpose chars (on lth left) at cursor pos
*/
void
gui_input_transpose_chars ()
{
char buf;
int curpos;
if (gui_current_window->buffer->input_buffer_pos > 0)
{
curpos = gui_current_window->buffer->input_buffer_pos;
if (curpos == gui_current_window->buffer->input_buffer_size)
curpos--;
else
gui_current_window->buffer->input_buffer_pos++;
buf = gui_current_window->buffer->input_buffer[curpos];
gui_current_window->buffer->input_buffer[curpos] =
gui_current_window->buffer->input_buffer[curpos-1];
gui_current_window->buffer->input_buffer[curpos-1] = buf;
gui_draw_buffer_input (gui_current_window->buffer, 0);
gui_current_window->buffer->completion.position = -1;
}
}
/*
* gui_input_clipboard_paste: paste clipboard at cursor pos in input line
*/
void
gui_input_clipboard_paste ()
{
if (gui_input_clipboard)
{
gui_input_insert_string(gui_input_clipboard, gui_current_window->buffer->input_buffer_pos);
gui_current_window->buffer->input_buffer_pos += strlen(gui_input_clipboard);
gui_draw_buffer_input (gui_current_window->buffer, 0);
gui_current_window->buffer->completion.position = -1;
}
}
/*
* gui_input_clipboard_copy: copy string into clipboard
*/
void
gui_input_clipboard_copy (char *buffer, int size)
{
if (gui_input_clipboard != NULL)
free(gui_input_clipboard);
gui_input_clipboard = (char *) malloc( (size + 1) * sizeof(*gui_input_clipboard));
if (gui_input_clipboard)
{
memcpy(gui_input_clipboard, buffer, size);
gui_input_clipboard[size] = '\0';
}
}
/*
* gui_input_home: home key
*/
+4
View File
@@ -57,6 +57,10 @@ t_gui_key_function gui_key_functions[] =
N_("delete previous word") },
{ "delete_next_word", gui_input_delete_next_word,
N_("delete next word") },
{ "clipboard_paste", gui_input_clipboard_paste,
N_("paste current clipboard content") },
{ "transpose_chars", gui_input_transpose_chars,
N_("transpose chars") },
{ "home", gui_input_home,
N_("go to beginning of line") },
{ "end", gui_input_end,
+4
View File
@@ -291,6 +291,7 @@ extern t_gui_infobar *gui_infobar;
extern t_gui_key *gui_keys;
extern t_gui_key *last_gui_key;
extern t_gui_key_function gui_key_functions[];
extern char *gui_input_clipboard;
/* GUI independent functions: windows & buffers */
@@ -304,6 +305,8 @@ extern void gui_infobar_remove ();
extern void gui_buffer_free (t_gui_buffer *, int);
extern t_gui_line *gui_new_line (t_gui_buffer *);
extern t_gui_message *gui_new_message (t_gui_buffer *);
extern void gui_input_clipboard_paste ();
extern void gui_input_clipboard_copy (char *, int);
extern void gui_input_insert_char ();
extern void gui_input_return ();
extern void gui_input_tab ();
@@ -314,6 +317,7 @@ extern void gui_input_delete_next_word ();
extern void gui_input_delete_begin_of_line ();
extern void gui_input_delete_end_of_line ();
extern void gui_input_delete_line ();
extern void gui_input_transpose_chars ();
extern void gui_input_home ();
extern void gui_input_end ();
extern void gui_input_left ();
+7
View File
@@ -2421,6 +2421,9 @@ gui_init ()
refresh ();
/* init clipboard buffer */
gui_input_clipboard = NULL;
/* create new window/buffer */
if (gui_window_new (0, 0, COLS, LINES))
{
@@ -2445,6 +2448,10 @@ gui_end ()
{
t_gui_window *ptr_win;
/* free clipboard buffer */
if (gui_input_clipboard)
free(gui_input_clipboard);
/* delete all windows */
for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window)
{
+2
View File
@@ -62,6 +62,8 @@ gui_input_default_key_bindings ()
gui_key_bind ( /* ^K */ "ctrl-K", "delete_end_line");
gui_key_bind ( /* ^U */ "ctrl-U", "delete_beginning_line");
gui_key_bind ( /* ^W */ "ctrl-W", "delete_previous_word");
gui_key_bind ( /* ^Y */ "ctrl-Y", "clipboard_paste");
gui_key_bind ( /* ^T */ "ctrl-T", "transpose_chars");
gui_key_bind ( /* home */ "meta2-1~", "home");
gui_key_bind ( /* home */ "meta2-H", "home");
gui_key_bind ( /* home */ "meta2-7~", "home");
+79
View File
@@ -56,6 +56,7 @@ t_gui_buffer *last_gui_buffer = NULL; /* pointer to last buffer */
t_gui_buffer *buffer_before_dcc = NULL; /* buffer before dcc switch */
t_gui_infobar *gui_infobar; /* pointer to infobar content */
char *gui_input_clipboard = NULL; /* buffer to store clipboard content */
/*
* gui_window_new: create a new window
@@ -921,6 +922,10 @@ gui_input_delete_previous_word ()
num_char_deleted = gui_current_window->buffer->input_buffer_pos - i;
num_char_end = gui_current_window->buffer->input_buffer_size -
gui_current_window->buffer->input_buffer_pos;
gui_input_clipboard_copy(gui_current_window->buffer->input_buffer +
gui_current_window->buffer->input_buffer_pos - num_char_deleted,
num_char_deleted);
for (j = 0; j < num_char_end; j++)
gui_current_window->buffer->input_buffer[i + j] =
@@ -953,6 +958,9 @@ gui_input_delete_next_word ()
i++;
}
num_char_deleted = i - gui_current_window->buffer->input_buffer_pos;
gui_input_clipboard_copy(gui_current_window->buffer->input_buffer +
gui_current_window->buffer->input_buffer_pos, num_char_deleted);
for (j = i; j < gui_current_window->buffer->input_buffer_size; j++)
gui_current_window->buffer->input_buffer[j - num_char_deleted] =
@@ -974,6 +982,9 @@ gui_input_delete_begin_of_line ()
{
int i;
gui_input_clipboard_copy(gui_current_window->buffer->input_buffer,
gui_current_window->buffer->input_buffer_pos);
for (i = gui_current_window->buffer->input_buffer_pos;
i < gui_current_window->buffer->input_buffer_size; i++)
gui_current_window->buffer->input_buffer[i - gui_current_window->buffer->input_buffer_pos] =
@@ -995,6 +1006,10 @@ gui_input_delete_begin_of_line ()
void
gui_input_delete_end_of_line ()
{
gui_input_clipboard_copy(gui_current_window->buffer->input_buffer +
gui_current_window->buffer->input_buffer_pos,
gui_current_window->buffer->input_buffer_size-1);
gui_current_window->buffer->input_buffer[gui_current_window->buffer->input_buffer_pos] = ' ';
gui_current_window->buffer->input_buffer_size = gui_current_window->buffer->input_buffer_pos ;
gui_current_window->buffer->input_buffer[gui_current_window->buffer->input_buffer_size] = '\0';
@@ -1018,6 +1033,70 @@ gui_input_delete_line ()
gui_current_window->buffer->completion.position = -1;
}
/*
* gui_input_transpose_chars: transpose chars (on lth left) at cursor pos
*/
void
gui_input_transpose_chars ()
{
char buf;
int curpos;
if (gui_current_window->buffer->input_buffer_pos > 0)
{
curpos = gui_current_window->buffer->input_buffer_pos;
if (curpos == gui_current_window->buffer->input_buffer_size)
curpos--;
else
gui_current_window->buffer->input_buffer_pos++;
buf = gui_current_window->buffer->input_buffer[curpos];
gui_current_window->buffer->input_buffer[curpos] =
gui_current_window->buffer->input_buffer[curpos-1];
gui_current_window->buffer->input_buffer[curpos-1] = buf;
gui_draw_buffer_input (gui_current_window->buffer, 0);
gui_current_window->buffer->completion.position = -1;
}
}
/*
* gui_input_clipboard_paste: paste clipboard at cursor pos in input line
*/
void
gui_input_clipboard_paste ()
{
if (gui_input_clipboard)
{
gui_input_insert_string(gui_input_clipboard, gui_current_window->buffer->input_buffer_pos);
gui_current_window->buffer->input_buffer_pos += strlen(gui_input_clipboard);
gui_draw_buffer_input (gui_current_window->buffer, 0);
gui_current_window->buffer->completion.position = -1;
}
}
/*
* gui_input_clipboard_copy: copy string into clipboard
*/
void
gui_input_clipboard_copy (char *buffer, int size)
{
if (gui_input_clipboard != NULL)
free(gui_input_clipboard);
gui_input_clipboard = (char *) malloc( (size + 1) * sizeof(*gui_input_clipboard));
if (gui_input_clipboard)
{
memcpy(gui_input_clipboard, buffer, size);
gui_input_clipboard[size] = '\0';
}
}
/*
* gui_input_home: home key
*/
+4
View File
@@ -57,6 +57,10 @@ t_gui_key_function gui_key_functions[] =
N_("delete previous word") },
{ "delete_next_word", gui_input_delete_next_word,
N_("delete next word") },
{ "clipboard_paste", gui_input_clipboard_paste,
N_("paste current clipboard content") },
{ "transpose_chars", gui_input_transpose_chars,
N_("transpose chars") },
{ "home", gui_input_home,
N_("go to beginning of line") },
{ "end", gui_input_end,
+4
View File
@@ -291,6 +291,7 @@ extern t_gui_infobar *gui_infobar;
extern t_gui_key *gui_keys;
extern t_gui_key *last_gui_key;
extern t_gui_key_function gui_key_functions[];
extern char *gui_input_clipboard;
/* GUI independent functions: windows & buffers */
@@ -304,6 +305,8 @@ extern void gui_infobar_remove ();
extern void gui_buffer_free (t_gui_buffer *, int);
extern t_gui_line *gui_new_line (t_gui_buffer *);
extern t_gui_message *gui_new_message (t_gui_buffer *);
extern void gui_input_clipboard_paste ();
extern void gui_input_clipboard_copy (char *, int);
extern void gui_input_insert_char ();
extern void gui_input_return ();
extern void gui_input_tab ();
@@ -314,6 +317,7 @@ extern void gui_input_delete_next_word ();
extern void gui_input_delete_begin_of_line ();
extern void gui_input_delete_end_of_line ();
extern void gui_input_delete_line ();
extern void gui_input_transpose_chars ();
extern void gui_input_home ();
extern void gui_input_end ();
extern void gui_input_left ();