/* Changes the current working directory of the VTE to the path of the given filename. * filename is expected to be in UTF-8 encoding. * filename can also be a path, then it is used directly. * If force is set to TRUE, it will always change the cwd */ void vte_cwd(const gchar *filename, gboolean force) { if (vte_info.have_vte && (vc->follow_path || force) && filename != NULL && g_path_is_absolute(filename)) { gchar *path; if (g_file_test(filename, G_FILE_TEST_IS_DIR)) path = g_strdup(filename); else path = g_path_get_dirname(filename); vte_get_working_directory(); /* refresh vte_info.dir */ if (! utils_str_equal(path, vte_info.dir)) { /* use g_shell_quote to avoid problems with spaces, '!' or something else in path */ gchar *quoted_path = g_shell_quote(path); gchar *cmd = g_strconcat(vc->send_cmd_prefix, "cd ", quoted_path, "\n", NULL); if (! vte_send_cmd(cmd)) { const gchar *msg = _("Directory not changed because the terminal may contain some input (press Ctrl+C or Enter to clear it)."); ui_set_statusbar(FALSE, "%s", msg); geany_debug("%s", msg); } g_free(quoted_path); g_free(cmd); } g_free(path); } }
/* Changes the current working directory of the VTE to the path of the given filename. * filename is expected to be in UTF-8 encoding. * filename can also be a path, then it is used directly. * If force is set to TRUE, it will always change the cwd */ void vte_cwd(const gchar *filename, gboolean force) { if (vte_info.have_vte && (vc->follow_path || force) && filename != NULL && g_path_is_absolute(filename)) { gchar *path; if (g_file_test(filename, G_FILE_TEST_IS_DIR)) path = g_strdup(filename); else path = g_path_get_dirname(filename); vte_get_working_directory(); /* refresh vte_info.dir */ if (! utils_str_equal(path, vte_info.dir)) { /* use g_shell_quote to avoid problems with spaces, '!' or something else in path */ gchar *quoted_path = g_shell_quote(path); gchar *cmd = g_strconcat(vc->send_cmd_prefix, "cd ", quoted_path, "\n", NULL); if (! vte_send_cmd(cmd)) { ui_set_statusbar(FALSE, _("Could not change the directory in the VTE because it probably contains a command.")); geany_debug( "Could not change the directory in the VTE because it probably contains a command."); } g_free(quoted_path); g_free(cmd); } g_free(path); } }