mirror of https://github.com/MidnightCommander/mc
Use events for operate with clipboard (copy/paste to external clipboard, save/load to file)
Signed-off-by: Slava Zanko <slavazanko@gmail.com>
This commit is contained in:
parent
c2dfb82f61
commit
62207c8d4d
|
@ -34,6 +34,13 @@ typedef struct
|
||||||
va_list ap;
|
va_list ap;
|
||||||
} ev_vfs_print_message_t;
|
} ev_vfs_print_message_t;
|
||||||
|
|
||||||
|
/* MCEVENT_GROUP_CORE:clipboard_text_from_file */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char **text;
|
||||||
|
gboolean ret;
|
||||||
|
} ev_clipboard_text_from_file_t;
|
||||||
|
|
||||||
|
|
||||||
/*** global variables defined in .c file *********************************************************/
|
/*** global variables defined in .c file *********************************************************/
|
||||||
|
|
||||||
|
|
|
@ -42,19 +42,18 @@
|
||||||
#include "lib/tty/tty.h"
|
#include "lib/tty/tty.h"
|
||||||
#include "lib/tty/mouse.h"
|
#include "lib/tty/mouse.h"
|
||||||
#include "lib/tty/key.h" /* XCTRL and ALT macros */
|
#include "lib/tty/key.h" /* XCTRL and ALT macros */
|
||||||
#include "lib/vfs/vfs.h"
|
|
||||||
#include "lib/fileloc.h"
|
#include "lib/fileloc.h"
|
||||||
#include "lib/skin.h"
|
#include "lib/skin.h"
|
||||||
#include "lib/strutil.h"
|
#include "lib/strutil.h"
|
||||||
#include "lib/util.h"
|
#include "lib/util.h"
|
||||||
#include "lib/keybind.h" /* global_keymap_t */
|
#include "lib/keybind.h" /* global_keymap_t */
|
||||||
#include "lib/widget.h"
|
#include "lib/widget.h"
|
||||||
|
#include "lib/event.h" /* mc_event_raise() */
|
||||||
|
|
||||||
#include "input_complete.h"
|
#include "input_complete.h"
|
||||||
|
|
||||||
#include "src/main.h" /* home_dir */
|
#include "src/main.h" /* home_dir */
|
||||||
#include "src/filemanager/midnight.h" /* current_panel */
|
#include "src/filemanager/midnight.h" /* current_panel */
|
||||||
#include "src/clipboard.h" /* copy_file_to_ext_clip, paste_to_file_from_ext_clip */
|
|
||||||
|
|
||||||
/*** global variables ****************************************************************************/
|
/*** global variables ****************************************************************************/
|
||||||
|
|
||||||
|
@ -85,124 +84,6 @@ const global_keymap_t *input_map;
|
||||||
static char *kill_buffer = NULL;
|
static char *kill_buffer = NULL;
|
||||||
|
|
||||||
/*** file scope functions ************************************************************************/
|
/*** file scope functions ************************************************************************/
|
||||||
|
|
||||||
static gboolean
|
|
||||||
save_text_to_clip_file (const char *text)
|
|
||||||
{
|
|
||||||
int file;
|
|
||||||
char *fname = NULL;
|
|
||||||
ssize_t ret;
|
|
||||||
size_t str_len;
|
|
||||||
|
|
||||||
fname = g_build_filename (mc_config_get_cache_path (), EDIT_CLIP_FILE, NULL);
|
|
||||||
file = mc_open (fname, O_CREAT | O_WRONLY | O_TRUNC,
|
|
||||||
S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH | O_BINARY);
|
|
||||||
g_free (fname);
|
|
||||||
|
|
||||||
if (file == -1)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
str_len = strlen (text);
|
|
||||||
ret = mc_write (file, (char *) text, str_len);
|
|
||||||
mc_close (file);
|
|
||||||
return ret == (ssize_t) str_len;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
load_text_from_clip_file (char **text)
|
|
||||||
{
|
|
||||||
char buf[BUF_LARGE];
|
|
||||||
FILE *f;
|
|
||||||
char *fname = NULL;
|
|
||||||
gboolean first = TRUE;
|
|
||||||
|
|
||||||
fname = g_build_filename (mc_config_get_cache_path (), EDIT_CLIP_FILE, NULL);
|
|
||||||
f = fopen (fname, "r");
|
|
||||||
g_free (fname);
|
|
||||||
|
|
||||||
if (f == NULL)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
*text = NULL;
|
|
||||||
|
|
||||||
while (fgets (buf, sizeof (buf), f))
|
|
||||||
{
|
|
||||||
size_t len;
|
|
||||||
|
|
||||||
len = strlen (buf);
|
|
||||||
if (len > 0)
|
|
||||||
{
|
|
||||||
if (buf[len - 1] == '\n')
|
|
||||||
buf[len - 1] = '\0';
|
|
||||||
|
|
||||||
if (first)
|
|
||||||
{
|
|
||||||
first = FALSE;
|
|
||||||
*text = g_strdup (buf);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* remove \n on EOL */
|
|
||||||
char *tmp;
|
|
||||||
|
|
||||||
tmp = g_strconcat (*text, " ", buf, (char *) NULL);
|
|
||||||
g_free (*text);
|
|
||||||
*text = tmp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fclose (f);
|
|
||||||
|
|
||||||
return (*text != NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
panel_save_curent_file_to_clip_file (void)
|
|
||||||
{
|
|
||||||
gboolean res = FALSE;
|
|
||||||
|
|
||||||
if (current_panel->marked == 0)
|
|
||||||
res = save_text_to_clip_file (selection (current_panel)->fname);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
gboolean first = TRUE;
|
|
||||||
char *flist = NULL;
|
|
||||||
|
|
||||||
for (i = 0; i < current_panel->count; i++)
|
|
||||||
if (current_panel->dir.list[i].f.marked != 0)
|
|
||||||
{ /* Skip the unmarked ones */
|
|
||||||
if (first)
|
|
||||||
{
|
|
||||||
flist = g_strdup (current_panel->dir.list[i].fname);
|
|
||||||
first = FALSE;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Add empty lines after the file */
|
|
||||||
char *tmp;
|
|
||||||
|
|
||||||
tmp =
|
|
||||||
g_strconcat (flist, "\n", current_panel->dir.list[i].fname, (char *) NULL);
|
|
||||||
g_free (flist);
|
|
||||||
flist = tmp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (flist != NULL)
|
|
||||||
{
|
|
||||||
res = save_text_to_clip_file (flist);
|
|
||||||
g_free (flist);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -571,9 +452,9 @@ copy_region (WInput * in, int x_first, int x_last)
|
||||||
if (last == first)
|
if (last == first)
|
||||||
{
|
{
|
||||||
/* Copy selected files to clipboard */
|
/* Copy selected files to clipboard */
|
||||||
panel_save_curent_file_to_clip_file ();
|
mc_event_raise (MCEVENT_GROUP_FILEMANAGER, "panel_save_curent_file_to_clip_file", NULL);
|
||||||
/* try use external clipboard utility */
|
/* try use external clipboard utility */
|
||||||
copy_file_to_ext_clip ();
|
mc_event_raise (MCEVENT_GROUP_CORE, "clipboard_file_to_ext_clip", NULL);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -584,9 +465,9 @@ copy_region (WInput * in, int x_first, int x_last)
|
||||||
|
|
||||||
kill_buffer = g_strndup (in->buffer + first, last - first);
|
kill_buffer = g_strndup (in->buffer + first, last - first);
|
||||||
|
|
||||||
save_text_to_clip_file (kill_buffer);
|
mc_event_raise (MCEVENT_GROUP_CORE, "clipboard_text_to_file", kill_buffer);
|
||||||
/* try use external clipboard utility */
|
/* try use external clipboard utility */
|
||||||
copy_file_to_ext_clip ();
|
mc_event_raise (MCEVENT_GROUP_CORE, "clipboard_file_to_ext_clip", NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
@ -669,11 +550,15 @@ static void
|
||||||
ins_from_clip (WInput * in)
|
ins_from_clip (WInput * in)
|
||||||
{
|
{
|
||||||
char *p = NULL;
|
char *p = NULL;
|
||||||
|
ev_clipboard_text_from_file_t event_data;
|
||||||
|
|
||||||
/* try use external clipboard utility */
|
/* try use external clipboard utility */
|
||||||
paste_to_file_from_ext_clip ();
|
mc_event_raise (MCEVENT_GROUP_CORE, "clipboard_file_from_ext_clip", NULL);
|
||||||
|
|
||||||
if (load_text_from_clip_file (&p))
|
|
||||||
|
event_data.text = &p;
|
||||||
|
mc_event_raise (MCEVENT_GROUP_CORE, "clipboard_text_from_file", &event_data);
|
||||||
|
if (event_data.ret)
|
||||||
{
|
{
|
||||||
char *pp;
|
char *pp;
|
||||||
|
|
||||||
|
|
120
src/clipboard.c
120
src/clipboard.c
|
@ -33,6 +33,9 @@
|
||||||
#include "lib/fileloc.h"
|
#include "lib/fileloc.h"
|
||||||
#include "lib/mcconfig.h"
|
#include "lib/mcconfig.h"
|
||||||
#include "lib/util.h"
|
#include "lib/util.h"
|
||||||
|
#include "lib/event.h"
|
||||||
|
|
||||||
|
#include "lib/vfs/vfs.h"
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "src/execute.h"
|
#include "src/execute.h"
|
||||||
|
@ -58,15 +61,22 @@ char *clipboard_paste_path = NULL;
|
||||||
/*** public functions ****************************************************************************/
|
/*** public functions ****************************************************************************/
|
||||||
/* --------------------------------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* event callback */
|
||||||
gboolean
|
gboolean
|
||||||
copy_file_to_ext_clip (void)
|
clipboard_file_to_ext_clip (const gchar * event_group_name, const gchar * event_name,
|
||||||
|
gpointer init_data, gpointer data)
|
||||||
{
|
{
|
||||||
char *tmp, *cmd;
|
char *tmp, *cmd;
|
||||||
int res = 0;
|
int res = 0;
|
||||||
const char *d = getenv ("DISPLAY");
|
const char *d = getenv ("DISPLAY");
|
||||||
|
|
||||||
|
(void) event_group_name;
|
||||||
|
(void) event_name;
|
||||||
|
(void) init_data;
|
||||||
|
(void) data;
|
||||||
|
|
||||||
if (d == NULL || clipboard_store_path == NULL || clipboard_store_path[0] == '\0')
|
if (d == NULL || clipboard_store_path == NULL || clipboard_store_path[0] == '\0')
|
||||||
return FALSE;
|
return TRUE;
|
||||||
|
|
||||||
tmp = concat_dir_and_file (mc_config_get_cache_path (), EDIT_CLIP_FILE);
|
tmp = concat_dir_and_file (mc_config_get_cache_path (), EDIT_CLIP_FILE);
|
||||||
cmd = g_strconcat (clipboard_store_path, " ", tmp, " 2>/dev/null", (char *) NULL);
|
cmd = g_strconcat (clipboard_store_path, " ", tmp, " 2>/dev/null", (char *) NULL);
|
||||||
|
@ -81,15 +91,22 @@ copy_file_to_ext_clip (void)
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* event callback */
|
||||||
gboolean
|
gboolean
|
||||||
paste_to_file_from_ext_clip (void)
|
clipboard_file_from_ext_clip (const gchar * event_group_name, const gchar * event_name,
|
||||||
|
gpointer init_data, gpointer data)
|
||||||
{
|
{
|
||||||
char *tmp, *cmd;
|
char *tmp, *cmd;
|
||||||
int res = 0;
|
int res = 0;
|
||||||
const char *d = getenv ("DISPLAY");
|
const char *d = getenv ("DISPLAY");
|
||||||
|
|
||||||
|
(void) event_group_name;
|
||||||
|
(void) event_name;
|
||||||
|
(void) init_data;
|
||||||
|
(void) data;
|
||||||
|
|
||||||
if (d == NULL || clipboard_paste_path == NULL || clipboard_paste_path[0] == '\0')
|
if (d == NULL || clipboard_paste_path == NULL || clipboard_paste_path[0] == '\0')
|
||||||
return FALSE;
|
return TRUE;
|
||||||
|
|
||||||
tmp = concat_dir_and_file (mc_config_get_cache_path (), EDIT_CLIP_FILE);
|
tmp = concat_dir_and_file (mc_config_get_cache_path (), EDIT_CLIP_FILE);
|
||||||
cmd = g_strconcat (clipboard_paste_path, " > ", tmp, " 2>/dev/null", (char *) NULL);
|
cmd = g_strconcat (clipboard_paste_path, " > ", tmp, " 2>/dev/null", (char *) NULL);
|
||||||
|
@ -103,3 +120,98 @@ paste_to_file_from_ext_clip (void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* event callback */
|
||||||
|
gboolean
|
||||||
|
clipboard_text_to_file (const gchar * event_group_name, const gchar * event_name,
|
||||||
|
gpointer init_data, gpointer data)
|
||||||
|
{
|
||||||
|
int file;
|
||||||
|
char *fname = NULL;
|
||||||
|
ssize_t ret;
|
||||||
|
size_t str_len;
|
||||||
|
const char *text = (const char *) data;
|
||||||
|
|
||||||
|
(void) event_group_name;
|
||||||
|
(void) event_name;
|
||||||
|
(void) init_data;
|
||||||
|
|
||||||
|
if (text == NULL)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
fname = g_build_filename (mc_config_get_cache_path (), EDIT_CLIP_FILE, NULL);
|
||||||
|
file = mc_open (fname, O_CREAT | O_WRONLY | O_TRUNC,
|
||||||
|
S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH | O_BINARY);
|
||||||
|
g_free (fname);
|
||||||
|
|
||||||
|
if (file == -1)
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
str_len = strlen (text);
|
||||||
|
ret = mc_write (file, (char *) text, str_len);
|
||||||
|
mc_close (file);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* event callback */
|
||||||
|
gboolean
|
||||||
|
clipboard_text_from_file (const gchar * event_group_name, const gchar * event_name,
|
||||||
|
gpointer init_data, gpointer data)
|
||||||
|
{
|
||||||
|
char buf[BUF_LARGE];
|
||||||
|
FILE *f;
|
||||||
|
char *fname = NULL;
|
||||||
|
gboolean first = TRUE;
|
||||||
|
ev_clipboard_text_from_file_t *event_data = (ev_clipboard_text_from_file_t *) data;
|
||||||
|
|
||||||
|
(void) event_group_name;
|
||||||
|
(void) event_name;
|
||||||
|
(void) init_data;
|
||||||
|
|
||||||
|
fname = g_build_filename (mc_config_get_cache_path (), EDIT_CLIP_FILE, NULL);
|
||||||
|
f = fopen (fname, "r");
|
||||||
|
g_free (fname);
|
||||||
|
|
||||||
|
if (f == NULL)
|
||||||
|
{
|
||||||
|
event_data->ret = FALSE;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
*(event_data->text) = NULL;
|
||||||
|
|
||||||
|
while (fgets (buf, sizeof (buf), f))
|
||||||
|
{
|
||||||
|
size_t len;
|
||||||
|
|
||||||
|
len = strlen (buf);
|
||||||
|
if (len > 0)
|
||||||
|
{
|
||||||
|
if (buf[len - 1] == '\n')
|
||||||
|
buf[len - 1] = '\0';
|
||||||
|
|
||||||
|
if (first)
|
||||||
|
{
|
||||||
|
first = FALSE;
|
||||||
|
*(event_data->text) = g_strdup (buf);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* remove \n on EOL */
|
||||||
|
char *tmp;
|
||||||
|
|
||||||
|
tmp = g_strconcat (*(event_data->text), " ", buf, (char *) NULL);
|
||||||
|
g_free (*(event_data->text));
|
||||||
|
*(event_data->text) = tmp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose (f);
|
||||||
|
event_data->ret = (*(event_data->text) != NULL);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
|
|
@ -18,8 +18,15 @@ extern char *clipboard_paste_path;
|
||||||
|
|
||||||
/*** declarations of public functions ************************************************************/
|
/*** declarations of public functions ************************************************************/
|
||||||
|
|
||||||
gboolean copy_file_to_ext_clip (void);
|
gboolean clipboard_file_to_ext_clip (const gchar * event_group_name, const gchar * event_name,
|
||||||
gboolean paste_to_file_from_ext_clip (void);
|
gpointer init_data, gpointer data);
|
||||||
|
gboolean clipboard_file_from_ext_clip (const gchar * event_group_name, const gchar * event_name,
|
||||||
|
gpointer init_data, gpointer data);
|
||||||
|
|
||||||
|
gboolean clipboard_text_to_file (const gchar * event_group_name, const gchar * event_name,
|
||||||
|
gpointer init_data, gpointer data);
|
||||||
|
gboolean clipboard_text_from_file (const gchar * event_group_name, const gchar * event_name,
|
||||||
|
gpointer init_data, gpointer data);
|
||||||
|
|
||||||
/*** inline functions ****************************************************************************/
|
/*** inline functions ****************************************************************************/
|
||||||
|
|
||||||
|
|
|
@ -56,13 +56,13 @@
|
||||||
#include "lib/vfs/vfs.h"
|
#include "lib/vfs/vfs.h"
|
||||||
#include "lib/widget.h"
|
#include "lib/widget.h"
|
||||||
#include "lib/charsets.h"
|
#include "lib/charsets.h"
|
||||||
|
#include "lib/event.h" /* mc_event_raise() */
|
||||||
|
|
||||||
#include "src/history.h"
|
#include "src/history.h"
|
||||||
#include "src/setup.h" /* option_tab_spacing */
|
#include "src/setup.h" /* option_tab_spacing */
|
||||||
#include "src/help.h" /* interactive_display() */
|
#include "src/help.h" /* interactive_display() */
|
||||||
#include "src/selcodepage.h"
|
#include "src/selcodepage.h"
|
||||||
#include "src/keybind-defaults.h"
|
#include "src/keybind-defaults.h"
|
||||||
#include "src/clipboard.h" /* copy_file_to_ext_clip, paste_to_file_from_ext_clip */
|
|
||||||
#include "src/util.h" /* check_for_default() */
|
#include "src/util.h" /* check_for_default() */
|
||||||
#include "src/filemanager/layout.h" /* mc_refresh() */
|
#include "src/filemanager/layout.h" /* mc_refresh() */
|
||||||
|
|
||||||
|
@ -2602,7 +2602,7 @@ edit_copy_to_X_buf_cmd (WEdit * edit)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
/* try use external clipboard utility */
|
/* try use external clipboard utility */
|
||||||
copy_file_to_ext_clip ();
|
mc_event_raise (MCEVENT_GROUP_CORE, "clipboard_file_to_ext_clip", NULL);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -2621,7 +2621,7 @@ edit_cut_to_X_buf_cmd (WEdit * edit)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
/* try use external clipboard utility */
|
/* try use external clipboard utility */
|
||||||
copy_file_to_ext_clip ();
|
mc_event_raise (MCEVENT_GROUP_CORE, "clipboard_file_to_ext_clip", NULL);
|
||||||
|
|
||||||
edit_block_delete_cmd (edit);
|
edit_block_delete_cmd (edit);
|
||||||
edit_mark_cmd (edit, 1);
|
edit_mark_cmd (edit, 1);
|
||||||
|
@ -2635,7 +2635,7 @@ edit_paste_from_X_buf_cmd (WEdit * edit)
|
||||||
{
|
{
|
||||||
gchar *tmp;
|
gchar *tmp;
|
||||||
/* try use external clipboard utility */
|
/* try use external clipboard utility */
|
||||||
paste_to_file_from_ext_clip ();
|
mc_event_raise (MCEVENT_GROUP_CORE, "clipboard_file_from_ext_clip", NULL);
|
||||||
tmp = concat_dir_and_file (mc_config_get_cache_path (), EDIT_CLIP_FILE);
|
tmp = concat_dir_and_file (mc_config_get_cache_path (), EDIT_CLIP_FILE);
|
||||||
edit_insert_file (edit, tmp);
|
edit_insert_file (edit, tmp);
|
||||||
g_free (tmp);
|
g_free (tmp);
|
||||||
|
|
|
@ -27,6 +27,8 @@
|
||||||
|
|
||||||
#include "lib/event.h"
|
#include "lib/event.h"
|
||||||
|
|
||||||
|
#include "clipboard.h" /* clipboard events */
|
||||||
|
|
||||||
#include "events_init.h"
|
#include "events_init.h"
|
||||||
|
|
||||||
/*** global variables ****************************************************************************/
|
/*** global variables ****************************************************************************/
|
||||||
|
@ -51,6 +53,11 @@ events_init (GError ** error)
|
||||||
/* *INDENT-OFF* */
|
/* *INDENT-OFF* */
|
||||||
event_init_t standard_events[] =
|
event_init_t standard_events[] =
|
||||||
{
|
{
|
||||||
|
{MCEVENT_GROUP_CORE, "clipboard_file_to_ext_clip", clipboard_file_to_ext_clip, NULL},
|
||||||
|
{MCEVENT_GROUP_CORE, "clipboard_file_from_ext_clip", clipboard_file_from_ext_clip, NULL},
|
||||||
|
{MCEVENT_GROUP_CORE, "clipboard_text_to_file", clipboard_text_to_file, NULL},
|
||||||
|
{MCEVENT_GROUP_CORE, "clipboard_text_from_file", clipboard_text_from_file, NULL},
|
||||||
|
|
||||||
{NULL, NULL, NULL, NULL}
|
{NULL, NULL, NULL, NULL}
|
||||||
};
|
};
|
||||||
/* *INDENT-ON* */
|
/* *INDENT-ON* */
|
||||||
|
|
|
@ -3425,6 +3425,53 @@ event_update_panels (const gchar * event_group_name, const gchar * event_name,
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* event callback */
|
||||||
|
static gboolean
|
||||||
|
panel_save_curent_file_to_clip_file (const gchar * event_group_name, const gchar * event_name,
|
||||||
|
gpointer init_data, gpointer data)
|
||||||
|
{
|
||||||
|
(void) event_group_name;
|
||||||
|
(void) event_name;
|
||||||
|
(void) init_data;
|
||||||
|
(void) data;
|
||||||
|
|
||||||
|
if (current_panel->marked == 0)
|
||||||
|
mc_event_raise (MCEVENT_GROUP_CORE, "clipboard_text_to_file",
|
||||||
|
(gpointer) selection (current_panel)->fname);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
gboolean first = TRUE;
|
||||||
|
char *flist = NULL;
|
||||||
|
|
||||||
|
for (i = 0; i < current_panel->count; i++)
|
||||||
|
if (current_panel->dir.list[i].f.marked != 0)
|
||||||
|
{ /* Skip the unmarked ones */
|
||||||
|
if (first)
|
||||||
|
{
|
||||||
|
flist = g_strdup (current_panel->dir.list[i].fname);
|
||||||
|
first = FALSE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Add empty lines after the file */
|
||||||
|
char *tmp;
|
||||||
|
|
||||||
|
tmp =
|
||||||
|
g_strconcat (flist, "\n", current_panel->dir.list[i].fname, (char *) NULL);
|
||||||
|
g_free (flist);
|
||||||
|
flist = tmp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mc_event_raise (MCEVENT_GROUP_CORE, "clipboard_text_to_file", (gpointer) flist);
|
||||||
|
g_free (flist);
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
/*** public functions ****************************************************************************/
|
/*** public functions ****************************************************************************/
|
||||||
/* --------------------------------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
@ -4124,6 +4171,8 @@ panel_init (void)
|
||||||
panel_history_show_list_sign = mc_skin_get ("widget-panel", "history-show-list-sign", "^");
|
panel_history_show_list_sign = mc_skin_get ("widget-panel", "history-show-list-sign", "^");
|
||||||
|
|
||||||
mc_event_add (MCEVENT_GROUP_FILEMANAGER, "update_panels", event_update_panels, NULL, NULL);
|
mc_event_add (MCEVENT_GROUP_FILEMANAGER, "update_panels", event_update_panels, NULL, NULL);
|
||||||
|
mc_event_add (MCEVENT_GROUP_FILEMANAGER, "panel_save_curent_file_to_clip_file",
|
||||||
|
panel_save_curent_file_to_clip_file, NULL, NULL);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue