mirror of
https://git.pwmt.org/pwmt/zathura.git
synced 2024-11-10 20:13:53 +01:00
Fixed path completion
This commit is contained in:
parent
414d3304d1
commit
92c59f4548
56
zathura.c
56
zathura.c
@ -341,16 +341,13 @@ change_mode(int mode)
|
||||
{
|
||||
case INSERT:
|
||||
mode_text = "-- INSERT --";
|
||||
gtk_editable_set_editable( GTK_EDITABLE(Zathura.UI.inputbar), FALSE);
|
||||
break;
|
||||
case VISUAL:
|
||||
mode_text = "-- VISUAL --";
|
||||
gtk_editable_set_editable( GTK_EDITABLE(Zathura.UI.inputbar), FALSE);
|
||||
break;
|
||||
default:
|
||||
mode_text = "";
|
||||
mode = NORMAL;
|
||||
gtk_editable_set_editable( GTK_EDITABLE(Zathura.UI.inputbar), TRUE);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -378,8 +375,6 @@ void notify(int level, char* message)
|
||||
|
||||
if(message)
|
||||
gtk_entry_set_text(Zathura.UI.inputbar, message);
|
||||
|
||||
gtk_editable_set_editable( GTK_EDITABLE(Zathura.UI.inputbar), FALSE);
|
||||
}
|
||||
|
||||
void
|
||||
@ -523,7 +518,6 @@ sc_focus_inputbar(Argument* argument)
|
||||
notify(DEFAULT, argument->data);
|
||||
gtk_widget_grab_focus(GTK_WIDGET(Zathura.UI.inputbar));
|
||||
gtk_editable_set_position(GTK_EDITABLE(Zathura.UI.inputbar), -1);
|
||||
gtk_editable_set_editable( GTK_EDITABLE(Zathura.UI.inputbar), TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
@ -994,48 +988,51 @@ Completion* cc_open(char* input)
|
||||
completion->groups = group;
|
||||
|
||||
/* read dir */
|
||||
char* path;
|
||||
char* file;
|
||||
int file_length;
|
||||
char* path = "/";
|
||||
char* file = "";
|
||||
int file_length = 0;
|
||||
|
||||
if(!input || strlen(input) == 0)
|
||||
/* parse input string */
|
||||
if(input && strlen(input) > 0)
|
||||
{
|
||||
path = "/";
|
||||
char* path_temp = dirname(strdup(input));
|
||||
char* file_temp = basename(strdup(input));
|
||||
char last_char = input[strlen(input) - 1];
|
||||
|
||||
if( !strcmp(path_temp, "/") && !strcmp(file_temp, "/") )
|
||||
file = "";
|
||||
}
|
||||
else if( !strcmp(path_temp, "/") && strcmp(file_temp, "/") && last_char != '/')
|
||||
file = file_temp;
|
||||
else if( !strcmp(path_temp, "/") && strcmp(file_temp, "/") && last_char == '/')
|
||||
path = g_strdup_printf("/%s/", file_temp);
|
||||
else if(last_char == '/')
|
||||
path = input;
|
||||
else
|
||||
{
|
||||
path = dirname(strdup(input));
|
||||
file = basename(strdup(input));
|
||||
|
||||
if(!strcmp(path, "/") && strlen(file) > 1)
|
||||
{
|
||||
path = g_strdup_printf("/%s/", file);
|
||||
file = "";
|
||||
}
|
||||
else if(!strcmp(path, "/") && !strcmp(file, "/"))
|
||||
{
|
||||
path = "/";
|
||||
file = "";
|
||||
path = g_strdup_printf("%s/", path_temp);
|
||||
file = file_temp;
|
||||
}
|
||||
}
|
||||
|
||||
file_length = strlen(file);
|
||||
|
||||
/* open directory */
|
||||
GDir* dir = g_dir_open(path, 0, NULL);
|
||||
if(!dir)
|
||||
return NULL;
|
||||
|
||||
char* name;
|
||||
int element_counter = 0;
|
||||
CompletionElement *last_element = NULL;
|
||||
|
||||
/* create element list */
|
||||
CompletionElement *last_element = NULL;
|
||||
char* name = NULL;
|
||||
int element_counter = 0;
|
||||
|
||||
while((name = (char*) g_dir_read_name(dir)) != NULL)
|
||||
{
|
||||
char* d_name = g_filename_display_name(name);
|
||||
int d_length = strlen(name);
|
||||
if( (file_length <= d_length) && !strncmp(file, d_name, file_length) )
|
||||
|
||||
if( ((file_length <= d_length) && !strncmp(file, d_name, file_length)) ||
|
||||
(file_length == 0) )
|
||||
{
|
||||
CompletionElement* el = malloc(sizeof(CompletionElement));
|
||||
el->value = g_strdup_printf("%s%s", path, d_name);
|
||||
@ -1056,6 +1053,7 @@ Completion* cc_open(char* input)
|
||||
return completion;
|
||||
}
|
||||
|
||||
|
||||
/* buffer command implementation */
|
||||
void
|
||||
bcmd_goto(char* buffer, Argument* argument)
|
||||
|
Loading…
Reference in New Issue
Block a user