static void do_link (link_type_t link_type, const char *fname) { char *dest = NULL, *src = NULL; if (link_type == LINK_HARDLINK) { src = g_strdup_printf (_("Link %s to:"), str_trunc (fname, 46)); dest = input_expand_dialog (_("Link"), src, MC_HISTORY_FM_LINK, ""); if (!dest || !*dest) goto cleanup; save_cwds_stat (); if (-1 == mc_link (fname, dest)) message (D_ERROR, MSG_ERROR, _("link: %s"), unix_error_string (errno)); } else { char *s; char *d; /* suggest the full path for symlink, and either the full or relative path to the file it points to */ s = concat_dir_and_file (current_panel->cwd, fname); if (get_other_type () == view_listing) d = concat_dir_and_file (other_panel->cwd, fname); else d = g_strdup (fname); if (link_type == LINK_SYMLINK_RELATIVE) s = diff_two_paths (other_panel->cwd, s); symlink_dialog (s, d, &dest, &src); g_free (d); g_free (s); if (!dest || !*dest || !src || !*src) goto cleanup; save_cwds_stat (); if (-1 == mc_symlink (dest, src)) message (D_ERROR, MSG_ERROR, _("symlink: %s"), unix_error_string (errno)); } update_panels (UP_OPTIMIZE, UP_KEEPSEL); repaint_screen (); cleanup: g_free (src); g_free (dest); }
void edit_symlink_cmd (void) { if (S_ISLNK (selection (current_panel)->st.st_mode)) { char buffer[MC_MAXPATHLEN]; char *p = NULL; int i; char *q; vfs_path_t *p_vpath; p = selection (current_panel)->fname; p_vpath = vfs_path_from_str (p); q = g_strdup_printf (_("Symlink '%s\' points to:"), str_trunc (p, 32)); i = readlink (p, buffer, MC_MAXPATHLEN - 1); if (i > 0) { char *dest; buffer[i] = 0; dest = input_expand_dialog (_("Edit symlink"), q, MC_HISTORY_FM_EDIT_LINK, buffer, INPUT_COMPLETE_FILENAMES); if (dest) { if (*dest && strcmp (buffer, dest)) { save_cwds_stat (); if (mc_unlink (p_vpath) == -1) { message (D_ERROR, MSG_ERROR, _("edit symlink, unable to remove %s: %s"), p, unix_error_string (errno)); } else { vfs_path_t *dest_vpath; dest_vpath = vfs_path_from_str_flags (dest, VPF_NO_CANON); if (mc_symlink (dest_vpath, p_vpath) == -1) message (D_ERROR, MSG_ERROR, _("edit symlink: %s"), unix_error_string (errno)); vfs_path_free (dest_vpath); } update_panels (UP_OPTIMIZE, UP_KEEPSEL); repaint_screen (); } g_free (dest); } } g_free (q); vfs_path_free (p_vpath); } else { message (D_ERROR, MSG_ERROR, _("'%s' is not a symbolic link"), selection (current_panel)->fname); } }
void mkdir_cmd (void) { char *tempdir; char *dir; dir = input_expand_dialog (_("Create a new Directory"), _(" Enter directory name:"), ""); if (!dir || !*dir) return; if (dir[0] == '/' || dir[0] == '~') tempdir = g_strdup (dir); else tempdir = concat_dir_and_file (current_panel->cwd, dir); g_free (dir); save_cwds_stat (); if (my_mkdir (tempdir, 0777) == 0) { update_panels (UP_OPTIMIZE, tempdir); repaint_screen (); select_item (current_panel); g_free (tempdir); return; } g_free (tempdir); message (1, MSG_ERROR, " %s ", unix_error_string (errno)); }
void mkdir_cmd (void) { char *dir, *absdir; dir = input_expand_dialog (_("Create a new Directory"), _(" Enter directory name:"), MC_HISTORY_FM_MKDIR, ""); if (!dir) return; if (dir[0] == '/' || dir[0] == '~') absdir = g_strdup (dir); else absdir = mhl_str_dir_plus_file (current_panel->cwd, dir); save_cwds_stat (); if (my_mkdir (absdir, 0777) == 0) { update_panels (UP_OPTIMIZE, dir); repaint_screen (); select_item (current_panel); } else { message (1, MSG_ERROR, " %s ", unix_error_string (errno)); } g_free (absdir); g_free (dir); }
void suspend_cmd (void) { save_cwds_stat (); do_suspend_cmd (); update_panels (UP_OPTIMIZE, UP_KEEPSEL); do_refresh (); }
/* Invoked by F16. Move/rename, default to the same panel. */ void ren_cmd_local (void) { save_cwds_stat (); if (panel_operate (current_panel, OP_MOVE, 1)){ update_panels (UP_OPTIMIZE, UP_KEEPSEL); repaint_screen (); } }
static void do_link (int symbolic_link, const char *fname) { char *dest = NULL, *src = NULL; if (!symbolic_link) { src = g_strdup_printf (_("Link %s to:"), name_trunc (fname, 46)); dest = input_expand_dialog (_(" Link "), src, ""); if (!dest || !*dest) goto cleanup; save_cwds_stat (); if (-1 == mc_link (fname, dest)) message (1, MSG_ERROR, _(" link: %s "), unix_error_string (errno)); } else { char *s; char *d; /* suggest the full path for symlink */ s = concat_dir_and_file (current_panel->cwd, fname); if (get_other_type () == view_listing) { d = concat_dir_and_file (other_panel->cwd, fname); } else { d = g_strdup (fname); } symlink_dialog (s, d, &dest, &src); g_free (d); g_free (s); if (!dest || !*dest || !src || !*src) goto cleanup; save_cwds_stat (); if (-1 == mc_symlink (dest, src)) message (1, MSG_ERROR, _(" symlink: %s "), unix_error_string (errno)); } update_panels (UP_OPTIMIZE, UP_KEEPSEL); repaint_screen (); cleanup: g_free (src); g_free (dest); }
void delete_cmd (void) { save_cwds_stat (); if (panel_operate (current_panel, OP_DELETE, 0)){ update_panels (UP_OPTIMIZE, UP_KEEPSEL); repaint_screen (); } }
void copy_cmd_local (void) { save_cwds_stat (); if (panel_operate (current_panel, OP_COPY, TRUE)) { update_panels (UP_OPTIMIZE, UP_KEEPSEL); repaint_screen (); } }
void edit_symlink_cmd (void) { if (S_ISLNK (selection (current_panel)->st.st_mode)) { char buffer[MC_MAXPATHLEN]; char *p = NULL; int i; char *dest, *q; p = selection (current_panel)->fname; q = g_strdup_printf (_("Symlink `%s\' points to:"), str_trunc (p, 32)); i = readlink (p, buffer, MC_MAXPATHLEN - 1); if (i > 0) { buffer[i] = 0; dest = input_expand_dialog (_("Edit symlink"), q, MC_HISTORY_FM_EDIT_LINK, buffer); if (dest) { if (*dest && strcmp (buffer, dest)) { save_cwds_stat (); if (-1 == mc_unlink (p)) { message (D_ERROR, MSG_ERROR, _("edit symlink, unable to remove %s: %s"), p, unix_error_string (errno)); } else { if (-1 == mc_symlink (dest, p)) message (D_ERROR, MSG_ERROR, _("edit symlink: %s"), unix_error_string (errno)); } update_panels (UP_OPTIMIZE, UP_KEEPSEL); repaint_screen (); } g_free (dest); } } g_free (q); } else { message (D_ERROR, MSG_ERROR, _("`%s' is not a symbolic link"), selection (current_panel)->fname); } }
void mkdir_cmd (void) { char *dir; const char *name = ""; /* If 'on' then automatically fills name with current selected item name */ if (auto_fill_mkdir_name && !DIR_IS_DOTDOT (selection (current_panel)->fname)) name = selection (current_panel)->fname; dir = input_expand_dialog (_("Create a new Directory"), _("Enter directory name:"), MC_HISTORY_FM_MKDIR, name, INPUT_COMPLETE_FILENAMES); if (dir != NULL && *dir != '\0') { vfs_path_t *absdir; if (dir[0] == '/' || dir[0] == '~') absdir = vfs_path_from_str (dir); else { /* possible escaped '~' */ /* allow create directory with name '~' */ char *tmpdir = dir; if (dir[0] == '\\' && dir[1] == '~') tmpdir = dir + 1; absdir = vfs_path_append_new (current_panel->cwd_vpath, tmpdir, NULL); } save_cwds_stat (); if (my_mkdir (absdir, 0777) == 0) { update_panels (UP_OPTIMIZE, dir); repaint_screen (); select_item (current_panel); } else { message (D_ERROR, MSG_ERROR, "%s", unix_error_string (errno)); } vfs_path_free (absdir); } g_free (dir); }
/* event callback */ gboolean execute_suspend (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 (mc_global.mc_run_mode == MC_RUN_FULL) save_cwds_stat (); do_suspend_cmd (); if (mc_global.mc_run_mode == MC_RUN_FULL) update_panels (UP_OPTIMIZE, UP_KEEPSEL); do_refresh (); return TRUE; }
void mkdir_cmd (void) { char *dir, *absdir; const char *name = ""; /* If 'on' then automatically fills name with current selected item name */ if (auto_fill_mkdir_name && strcmp (selection (current_panel)->fname, "..") != 0) name = selection (current_panel)->fname; dir = input_expand_dialog (_("Create a new Directory"), _("Enter directory name:"), MC_HISTORY_FM_MKDIR, name); if (!dir) return; if (*dir) { if (dir[0] == '/' || dir[0] == '~') absdir = g_strdup (dir); else absdir = concat_dir_and_file (current_panel->cwd, dir); save_cwds_stat (); if (my_mkdir (absdir, 0777) == 0) { update_panels (UP_OPTIMIZE, dir); repaint_screen (); select_item (current_panel); } else { message (D_ERROR, MSG_ERROR, "%s", unix_error_string (errno)); } g_free (absdir); } g_free (dir); }
static void do_link (link_type_t link_type, const char *fname) { char *dest = NULL, *src = NULL; vfs_path_t *fname_vpath, *dest_vpath = NULL; fname_vpath = vfs_path_from_str (fname); if (link_type == LINK_HARDLINK) { src = g_strdup_printf (_("Link %s to:"), str_trunc (fname, 46)); dest = input_expand_dialog (_("Link"), src, MC_HISTORY_FM_LINK, "", INPUT_COMPLETE_FILENAMES); if (!dest || !*dest) goto cleanup; save_cwds_stat (); dest_vpath = vfs_path_from_str (dest); if (-1 == mc_link (fname_vpath, dest_vpath)) message (D_ERROR, MSG_ERROR, _("link: %s"), unix_error_string (errno)); } else { vfs_path_t *s, *d; /* suggest the full path for symlink, and either the full or relative path to the file it points to */ s = vfs_path_append_new (current_panel->cwd_vpath, fname, NULL); if (get_other_type () == view_listing) d = vfs_path_append_new (other_panel->cwd_vpath, fname, NULL); else d = vfs_path_from_str (fname); if (link_type == LINK_SYMLINK_RELATIVE) { char *s_str; s_str = diff_two_paths (other_panel->cwd_vpath, s); vfs_path_free (s); s = vfs_path_from_str_flags (s_str, VPF_NO_CANON); g_free (s_str); } symlink_dialog (s, d, &dest, &src); vfs_path_free (d); vfs_path_free (s); if (!dest || !*dest || !src || !*src) goto cleanup; save_cwds_stat (); dest_vpath = vfs_path_from_str_flags (dest, VPF_NO_CANON); s = vfs_path_from_str (src); if (mc_symlink (dest_vpath, s) == -1) message (D_ERROR, MSG_ERROR, _("symlink: %s"), unix_error_string (errno)); vfs_path_free (s); } update_panels (UP_OPTIMIZE, UP_KEEPSEL); repaint_screen (); cleanup: vfs_path_free (fname_vpath); vfs_path_free (dest_vpath); g_free (src); g_free (dest); }
void do_executev (const char *shell, int flags, char *const argv[]) { #ifdef ENABLE_SUBSHELL vfs_path_t *new_dir_vpath = NULL; #endif /* ENABLE_SUBSHELL */ vfs_path_t *old_vfs_dir_vpath = NULL; if (!vfs_current_is_local ()) old_vfs_dir_vpath = vfs_path_clone (vfs_get_raw_current_dir ()); if (mc_global.mc_run_mode == MC_RUN_FULL) save_cwds_stat (); pre_exec (); if (mc_global.tty.console_flag != '\0') handle_console (CONSOLE_RESTORE); if (!mc_global.tty.use_subshell && *argv != NULL && (flags & EXECUTE_INTERNAL) == 0) { printf ("%s%s\n", mc_prompt, *argv); fflush (stdout); } #ifdef ENABLE_SUBSHELL if (mc_global.tty.use_subshell && (flags & EXECUTE_INTERNAL) == 0) { do_update_prompt (); /* We don't care if it died, higher level takes care of this */ invoke_subshell (*argv, VISIBLY, old_vfs_dir_vpath != NULL ? NULL : &new_dir_vpath); } else #endif /* ENABLE_SUBSHELL */ my_systemv_flags (flags, shell, argv); if ((flags & EXECUTE_INTERNAL) == 0) { if ((pause_after_run == pause_always || (pause_after_run == pause_on_dumb_terminals && !mc_global.tty.xterm_flag && mc_global.tty.console_flag == '\0')) && quit == 0 #ifdef ENABLE_SUBSHELL && subshell_state != RUNNING_COMMAND #endif /* ENABLE_SUBSHELL */ ) { printf (_("Press any key to continue...")); fflush (stdout); tty_raw_mode (); get_key_code (0); printf ("\r\n"); fflush (stdout); } if (mc_global.tty.console_flag != '\0' && output_lines != 0 && mc_global.keybar_visible) { putchar ('\n'); fflush (stdout); } } if (mc_global.tty.console_flag != '\0') handle_console (CONSOLE_SAVE); edition_post_exec (); #ifdef ENABLE_SUBSHELL if (new_dir_vpath != NULL) { do_possible_cd (new_dir_vpath); vfs_path_free (new_dir_vpath); } #endif /* ENABLE_SUBSHELL */ if (old_vfs_dir_vpath != NULL) { mc_chdir (old_vfs_dir_vpath); vfs_path_free (old_vfs_dir_vpath); } if (mc_global.mc_run_mode == MC_RUN_FULL) { update_panels (UP_OPTIMIZE, UP_KEEPSEL); update_xterm_title_path (); } do_refresh (); use_dash (TRUE); }
static void do_execute (const char *shell, const char *command, int flags) { #ifdef HAVE_SUBSHELL_SUPPORT char *new_dir = NULL; #endif /* HAVE_SUBSHELL_SUPPORT */ #ifdef USE_VFS char *old_vfs_dir = 0; if (!vfs_current_is_local ()) old_vfs_dir = g_strdup (vfs_get_current_dir ()); #endif /* USE_VFS */ save_cwds_stat (); pre_exec (); if (console_flag) handle_console (CONSOLE_RESTORE); if (!use_subshell && command && !(flags & EXECUTE_INTERNAL)) { printf ("%s%s\n", prompt, command); } #ifdef HAVE_SUBSHELL_SUPPORT if (use_subshell && !(flags & EXECUTE_INTERNAL)) { do_update_prompt (); /* We don't care if it died, higher level takes care of this */ #ifdef USE_VFS invoke_subshell (command, VISIBLY, old_vfs_dir ? 0 : &new_dir); #else invoke_subshell (command, VISIBLY, &new_dir); #endif /* !USE_VFS */ } else #endif /* HAVE_SUBSHELL_SUPPORT */ my_system (flags, shell, command); if (!(flags & EXECUTE_INTERNAL)) { if ((pause_after_run == pause_always || (pause_after_run == pause_on_dumb_terminals && !xterm_flag && !console_flag)) && !quit #ifdef HAVE_SUBSHELL_SUPPORT && subshell_state != RUNNING_COMMAND #endif /* HAVE_SUBSHELL_SUPPORT */ ) { printf (_("Press any key to continue...")); fflush (stdout); mc_raw_mode (); get_key_code (0); printf ("\r\n"); fflush (stdout); } if (console_flag) { if (output_lines && keybar_visible) { putchar ('\n'); fflush (stdout); } } } if (console_flag) handle_console (CONSOLE_SAVE); edition_post_exec (); #ifdef HAVE_SUBSHELL_SUPPORT if (new_dir) do_possible_cd (new_dir); #endif /* HAVE_SUBSHELL_SUPPORT */ #ifdef USE_VFS if (old_vfs_dir) { mc_chdir (old_vfs_dir); g_free (old_vfs_dir); } #endif /* USE_VFS */ update_panels (UP_OPTIMIZE, UP_KEEPSEL); update_xterm_title_path (); do_refresh (); use_dash (TRUE); }