mirror of
https://github.com/MidnightCommander/mc
synced 2024-12-23 12:56:51 +03:00
Changed function remove_encoding_from_path() for return vfs_path_t type
Also, fixed bug with non-changeable encoding inside archives. Signed-off-by: Slava Zanko <slavazanko@gmail.com>
This commit is contained in:
parent
80d4a13daf
commit
be271db9f3
@ -652,15 +652,20 @@ static void
|
||||
put_current_path (void)
|
||||
{
|
||||
char *cwd_path;
|
||||
vfs_path_t *cwd_vpath;
|
||||
|
||||
if (!command_prompt)
|
||||
return;
|
||||
|
||||
cwd_path = remove_encoding_from_path (current_panel->cwd_vpath);
|
||||
cwd_vpath = remove_encoding_from_path (current_panel->cwd_vpath);
|
||||
cwd_path = vfs_path_to_str (cwd_vpath);
|
||||
command_insert (cmdline, cwd_path, FALSE);
|
||||
|
||||
if (cwd_path[strlen (cwd_path) - 1] != PATH_SEP)
|
||||
command_insert (cmdline, PATH_SEP_STR, FALSE);
|
||||
|
||||
g_free (cwd_path);
|
||||
vfs_path_free (cwd_vpath);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
@ -669,6 +674,7 @@ static void
|
||||
put_other_path (void)
|
||||
{
|
||||
char *cwd_path;
|
||||
vfs_path_t *cwd_vpath;
|
||||
|
||||
if (get_other_type () != view_listing)
|
||||
return;
|
||||
@ -676,12 +682,15 @@ put_other_path (void)
|
||||
if (!command_prompt)
|
||||
return;
|
||||
|
||||
cwd_path = remove_encoding_from_path (other_panel->cwd_vpath);
|
||||
cwd_vpath = remove_encoding_from_path (other_panel->cwd_vpath);
|
||||
cwd_path = vfs_path_to_str (cwd_vpath);
|
||||
command_insert (cmdline, cwd_path, FALSE);
|
||||
|
||||
if (cwd_path[strlen (cwd_path) - 1] != PATH_SEP)
|
||||
command_insert (cmdline, PATH_SEP_STR, FALSE);
|
||||
|
||||
g_free (cwd_path);
|
||||
vfs_path_free (cwd_vpath);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
@ -3642,36 +3642,55 @@ update_one_panel (int which, panel_update_flags_t flags, const char *current_fil
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
/*** public functions ****************************************************************************/
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
/**
|
||||
* Remove encode info from last path element.
|
||||
*
|
||||
*/
|
||||
|
||||
char *
|
||||
vfs_path_t *
|
||||
remove_encoding_from_path (const vfs_path_t * vpath)
|
||||
{
|
||||
GString *ret;
|
||||
vfs_path_t *ret_vpath;
|
||||
GString *tmp_conv;
|
||||
int indx;
|
||||
|
||||
ret = g_string_new ("");
|
||||
ret_vpath = vfs_path_new ();
|
||||
|
||||
tmp_conv = g_string_new ("");
|
||||
|
||||
for (indx = 0; indx < vfs_path_elements_count (vpath); indx++)
|
||||
{
|
||||
const vfs_path_element_t *path_element;
|
||||
GIConv converter;
|
||||
vfs_path_element_t *path_element;
|
||||
|
||||
path_element = vfs_path_get_by_index (vpath, indx);
|
||||
converter =
|
||||
path_element->encoding != NULL ?
|
||||
str_crt_conv_to (path_element->encoding) : str_cnv_to_term;
|
||||
path_element = vfs_path_element_clone (vfs_path_get_by_index (vpath, indx));
|
||||
vfs_path_add_element (ret_vpath, path_element);
|
||||
|
||||
if (path_element->encoding == NULL)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
converter = str_crt_conv_to (path_element->encoding);
|
||||
if (converter == INVALID_CONV)
|
||||
converter = str_cnv_to_term;
|
||||
continue;
|
||||
|
||||
g_free (path_element->encoding);
|
||||
path_element->encoding = NULL;
|
||||
|
||||
str_vfs_convert_from (converter, path_element->path, tmp_conv);
|
||||
g_string_append (ret, tmp_conv->str);
|
||||
|
||||
g_free (path_element->path);
|
||||
path_element->path = g_strdup (tmp_conv->str);
|
||||
|
||||
g_string_set_size (tmp_conv, 0);
|
||||
|
||||
str_close_conv (converter);
|
||||
str_close_conv (path_element->dir.converter);
|
||||
path_element->dir.converter = INVALID_CONV;
|
||||
}
|
||||
g_string_free (tmp_conv, TRUE);
|
||||
return g_string_free (ret, FALSE);
|
||||
return ret_vpath;
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
@ -4349,7 +4368,6 @@ void
|
||||
panel_change_encoding (WPanel * panel)
|
||||
{
|
||||
const char *encoding = NULL;
|
||||
char *cd_path;
|
||||
#ifdef HAVE_CHARSET
|
||||
char *errmsg;
|
||||
int r;
|
||||
@ -4367,12 +4385,10 @@ panel_change_encoding (WPanel * panel)
|
||||
vfs_path_t *cd_path_vpath;
|
||||
|
||||
g_free (init_translation_table (mc_global.display_codepage, mc_global.display_codepage));
|
||||
cd_path = remove_encoding_from_path (panel->cwd_vpath);
|
||||
cd_path_vpath = vfs_path_from_str (cd_path);
|
||||
cd_path_vpath = remove_encoding_from_path (panel->cwd_vpath);
|
||||
do_panel_cd (panel, cd_path_vpath, cd_parse_command);
|
||||
show_dir (panel);
|
||||
vfs_path_free (cd_path_vpath);
|
||||
g_free (cd_path);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -4388,6 +4404,7 @@ panel_change_encoding (WPanel * panel)
|
||||
#endif
|
||||
if (encoding != NULL)
|
||||
{
|
||||
char *cd_path;
|
||||
vfs_change_encoding (panel->cwd_vpath, encoding);
|
||||
|
||||
cd_path = vfs_path_to_str (panel->cwd_vpath);
|
||||
|
@ -163,7 +163,7 @@ gboolean do_panel_cd (struct WPanel *panel, const vfs_path_t * new_dir_vpath, en
|
||||
|
||||
void directory_history_add (struct WPanel *panel, const char *dir);
|
||||
|
||||
char *remove_encoding_from_path (const vfs_path_t * vpath);
|
||||
vfs_path_t *remove_encoding_from_path (const vfs_path_t * vpath);
|
||||
|
||||
gsize panel_get_num_of_sortable_fields (void);
|
||||
const char **panel_get_sortable_fields (gsize *);
|
||||
|
Loading…
Reference in New Issue
Block a user