Merge pull request #60 from numerical/master
Quick URL selection in the urlselection overlay
This commit is contained in:
		
						commit
						edcc2887e9
					
				
							
								
								
									
										42
									
								
								termite.cc
									
									
									
									
									
								
							
							
						
						
									
										42
									
								
								termite.cc
									
									
									
									
									
								
							@ -69,7 +69,7 @@ struct hint_info {
 | 
				
			|||||||
struct config_info {
 | 
					struct config_info {
 | 
				
			||||||
    hint_info hints;
 | 
					    hint_info hints;
 | 
				
			||||||
    char *browser;
 | 
					    char *browser;
 | 
				
			||||||
    gboolean dynamic_title, urgent_on_bell, clickable_url;
 | 
					    gboolean dynamic_title, urgent_on_bell, clickable_url, quick_url;
 | 
				
			||||||
    int tag;
 | 
					    int tag;
 | 
				
			||||||
    char *config_file;
 | 
					    char *config_file;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@ -746,6 +746,43 @@ gboolean entry_key_press_cb(GtkEntry *entry, GdkEventKey *event, keybind_info *i
 | 
				
			|||||||
    gboolean ret = FALSE;
 | 
					    gboolean ret = FALSE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    switch (event->keyval) {
 | 
					    switch (event->keyval) {
 | 
				
			||||||
 | 
					        case GDK_KEY_0:
 | 
				
			||||||
 | 
					        case GDK_KEY_1:
 | 
				
			||||||
 | 
					        case GDK_KEY_2:
 | 
				
			||||||
 | 
					        case GDK_KEY_3:
 | 
				
			||||||
 | 
					        case GDK_KEY_4:
 | 
				
			||||||
 | 
					        case GDK_KEY_5:
 | 
				
			||||||
 | 
					        case GDK_KEY_6:
 | 
				
			||||||
 | 
					        case GDK_KEY_7:
 | 
				
			||||||
 | 
					        case GDK_KEY_8:
 | 
				
			||||||
 | 
					        case GDK_KEY_9:
 | 
				
			||||||
 | 
					            if(info->panel.mode == overlay_mode::urlselect && info->config.quick_url)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                const char *const text = gtk_entry_get_text(entry);
 | 
				
			||||||
 | 
					                char* fulltext = g_strndup(text, strlen(text)+1);
 | 
				
			||||||
 | 
					                fulltext[strlen(text)] = (char)event->keyval;
 | 
				
			||||||
 | 
					                gboolean exalpha = FALSE;
 | 
				
			||||||
 | 
					                for(int i = 0; text[i] != '\0'; i++) {
 | 
				
			||||||
 | 
					                    if(!g_ascii_isdigit(text[i])) { 
 | 
				
			||||||
 | 
					                        exalpha = TRUE;
 | 
				
			||||||
 | 
					                        break;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                if(exalpha)
 | 
				
			||||||
 | 
					                    break;
 | 
				
			||||||
 | 
					                char* str_ptr = (char*)malloc(sizeof(text));
 | 
				
			||||||
 | 
					                sprintf(str_ptr, "%d", (int)info->panel.url_list.size());
 | 
				
			||||||
 | 
					                int url_num = (int)strlen(str_ptr);
 | 
				
			||||||
 | 
					                delete str_ptr;
 | 
				
			||||||
 | 
					                int inp_num = (int)strlen(fulltext);
 | 
				
			||||||
 | 
					                if(url_num == inp_num)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    launch_url(info->config.browser, fulltext, &info->panel);
 | 
				
			||||||
 | 
					                    ret = TRUE;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case GDK_KEY_Tab:
 | 
					        case GDK_KEY_Tab:
 | 
				
			||||||
            synthesize_keypress(GTK_WIDGET(entry), GDK_KEY_Down);
 | 
					            synthesize_keypress(GTK_WIDGET(entry), GDK_KEY_Down);
 | 
				
			||||||
            return TRUE;
 | 
					            return TRUE;
 | 
				
			||||||
@ -1088,6 +1125,7 @@ static void set_config(GtkWindow *window, VteTerminal *vte, config_info *info,
 | 
				
			|||||||
    info->dynamic_title = cfg_bool("dynamic_title", TRUE);
 | 
					    info->dynamic_title = cfg_bool("dynamic_title", TRUE);
 | 
				
			||||||
    info->urgent_on_bell = cfg_bool("urgent_on_bell", TRUE);
 | 
					    info->urgent_on_bell = cfg_bool("urgent_on_bell", TRUE);
 | 
				
			||||||
    info->clickable_url = cfg_bool("clickable_url", TRUE);
 | 
					    info->clickable_url = cfg_bool("clickable_url", TRUE);
 | 
				
			||||||
 | 
					    info->quick_url = cfg_bool("quick_url", FALSE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (info->clickable_url) {
 | 
					    if (info->clickable_url) {
 | 
				
			||||||
        info->tag =
 | 
					        info->tag =
 | 
				
			||||||
@ -1268,7 +1306,7 @@ int main(int argc, char **argv) {
 | 
				
			|||||||
         std::vector<url_data>()},
 | 
					         std::vector<url_data>()},
 | 
				
			||||||
        {vi_mode::insert, 0, 0, 0, 0},
 | 
					        {vi_mode::insert, 0, 0, 0, 0},
 | 
				
			||||||
        {{nullptr, nullptr, nullptr, nullptr, 0, 0, 0},
 | 
					        {{nullptr, nullptr, nullptr, nullptr, 0, 0, 0},
 | 
				
			||||||
         nullptr, FALSE, FALSE, FALSE, -1, config_file}
 | 
					         nullptr, FALSE, FALSE, FALSE, FALSE, -1, config_file}
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    load_config(GTK_WINDOW(window), vte, &info.config, &geometry);
 | 
					    load_config(GTK_WINDOW(window), vte, &info.config, &geometry);
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user