TEST(pattern_anding_and_orring, IF(has_mime_type_detection)) { char cmd[1024]; assoc_records_t ft; ft_init(&prog_exists); snprintf(cmd, sizeof(cmd), "filetype {two-lines}<text/plain>,<%s>{binary-data} app", get_mimetype(TEST_DATA_PATH "/read/binary-data")); assert_success(exec_commands(cmd, &lwin, CIT_COMMAND)); snprintf(cmd, sizeof(cmd), "fileviewer {two-lines}<text/plain>,<%s>{binary-data} viewer", get_mimetype(TEST_DATA_PATH "/read/binary-data")); assert_success(exec_commands(cmd, &lwin, CIT_COMMAND)); ft = ft_get_all_programs(TEST_DATA_PATH "/read/two-lines"); assert_int_equal(1, ft.count); if(ft.count == 1) { assert_string_equal("app", ft.list[0].command); } ft_assoc_records_free(&ft); ft = ft_get_all_programs(TEST_DATA_PATH "/read/binary-data"); assert_int_equal(1, ft.count); if(ft.count == 1) { assert_string_equal("app", ft.list[0].command); } ft_assoc_records_free(&ft); ft = ft_get_all_programs(TEST_DATA_PATH "/read/utf8-bom"); assert_int_equal(0, ft.count); ft_assoc_records_free(&ft); assert_string_equal("viewer", ft_get_viewer(TEST_DATA_PATH "/read/two-lines")); assert_string_equal("viewer", ft_get_viewer(TEST_DATA_PATH "/read/binary-data")); assert_string_equal(NULL, ft_get_viewer(TEST_DATA_PATH "/read/utf8-bom")); ft_reset(0); }
void quick_view_file(FileView *view) { char path[PATH_MAX]; const dir_entry_t *entry; if(curr_stats.load_stage < 2) { return; } if(vle_mode_is(VIEW_MODE)) { return; } if(curr_stats.number_of_windows == 1) { return; } if(draw_abandoned_view_mode()) { return; } ui_view_erase(other_view); entry = &view->dir_entry[view->list_pos]; get_full_path_of(entry, sizeof(path), path); switch(view->dir_entry[view->list_pos].type) { case FT_CHAR_DEV: mvwaddstr(other_view->win, LINE, COL, "File is a Character Device"); break; case FT_BLOCK_DEV: mvwaddstr(other_view->win, LINE, COL, "File is a Block Device"); break; #ifndef _WIN32 case FT_SOCK: mvwaddstr(other_view->win, LINE, COL, "File is a Socket"); break; #endif case FT_FIFO: mvwaddstr(other_view->win, LINE, COL, "File is a Named Pipe"); break; case FT_LINK: if(get_link_target_abs(path, entry->origin, path, sizeof(path)) != 0) { mvwaddstr(other_view->win, LINE, COL, "Cannot resolve Link"); break; } if(!ends_with_slash(path) && is_dir(path)) { strncat(path, "/", sizeof(path) - strlen(path) - 1); } /* break intensionally omitted */ case FT_UNK: default: { const char *viewer; FILE *fp; char *const typed_fname = get_typed_fname(path); viewer = ft_get_viewer(typed_fname); free(typed_fname); if(viewer == NULL && is_dir(path)) { mvwaddstr(other_view->win, LINE, COL, "File is a Directory"); break; } if(is_null_or_empty(viewer)) { fp = os_fopen(path, "rb"); } else { fp = use_info_prog(viewer); } if(fp == NULL) { mvwaddstr(other_view->win, LINE, COL, "Cannot open file"); break; } ui_view_clear(other_view); wattrset(other_view->win, 0); view_file(fp, cfg.wrap_quick_view); fclose(fp); break; } } refresh_view_win(other_view); ui_view_title_update(other_view); }