?? ncurses.c
字號(hào):
p_playlist->p_local_onelevel->p_input , false ); p_sys->i_box_type = BOX_PLAYLIST; free( psz_uri ); } else { int i_size_entry = strlen( p_sys->psz_current_dir ) + strlen( p_sys->pp_dir_entries[p_sys->i_box_bidx]->psz_path ) + 2; char *psz_uri = (char *)malloc( sizeof(char)*i_size_entry); sprintf( psz_uri, "%s/%s", p_sys->psz_current_dir, p_sys->pp_dir_entries[p_sys->i_box_bidx]->psz_path ); p_sys->psz_current_dir = strdup( psz_uri ); ReadDir( p_intf ); free( psz_uri ); } break; default: b_ret = false; break; } if( b_ret ) { if( p_sys->i_box_bidx >= p_sys->i_dir_entries ) p_sys->i_box_bidx = p_sys->i_dir_entries - 1; if( p_sys->i_box_bidx < 0 ) p_sys->i_box_bidx = 0; ReturnTrue; } } else if( p_sys->i_box_type == BOX_HELP || p_sys->i_box_type == BOX_INFO || p_sys->i_box_type == BOX_META || p_sys->i_box_type == BOX_STATS || p_sys->i_box_type == BOX_OBJECTS ) { switch( i_key ) { case KEY_HOME: p_sys->i_box_start = 0; ReturnTrue;#ifdef __FreeBSD__ case KEY_SELECT:#endif case KEY_END: p_sys->i_box_start = p_sys->i_box_lines_total - 1; ReturnTrue; case KEY_UP: if( p_sys->i_box_start > 0 ) p_sys->i_box_start--; ReturnTrue; case KEY_DOWN: if( p_sys->i_box_start < p_sys->i_box_lines_total - 1 ) { p_sys->i_box_start++; } ReturnTrue; case KEY_PPAGE: p_sys->i_box_start -= p_sys->i_box_lines; if( p_sys->i_box_start < 0 ) p_sys->i_box_start = 0; ReturnTrue; case KEY_NPAGE: p_sys->i_box_start += p_sys->i_box_lines; if( p_sys->i_box_start >= p_sys->i_box_lines_total ) { p_sys->i_box_start = p_sys->i_box_lines_total - 1; } ReturnTrue; default: break; } } else if( p_sys->i_box_type == BOX_NONE ) { switch( i_key ) { case KEY_HOME: p_sys->f_slider = 0; ManageSlider( p_intf ); ReturnTrue;#ifdef __FreeBSD__ case KEY_SELECT:#endif case KEY_END: p_sys->f_slider = 99.9; ManageSlider( p_intf ); ReturnTrue; case KEY_UP: p_sys->f_slider += 5.0; if( p_sys->f_slider >= 99.0 ) p_sys->f_slider = 99.0; ManageSlider( p_intf ); ReturnTrue; case KEY_DOWN: p_sys->f_slider -= 5.0; if( p_sys->f_slider < 0.0 ) p_sys->f_slider = 0.0; ManageSlider( p_intf ); ReturnTrue; default: break; } } else if( p_sys->i_box_type == BOX_SEARCH && p_sys->psz_search_chain ) { int i_chain_len = strlen( p_sys->psz_search_chain ); switch( i_key ) { case KEY_CLEAR: case 0x0c: /* ^l */ clear(); ReturnTrue; case KEY_ENTER: case '\r': case '\n': if( i_chain_len > 0 ) { p_sys->psz_old_search = strdup( p_sys->psz_search_chain ); } else if( p_sys->psz_old_search ) { SearchPlaylist( p_intf, p_sys->psz_old_search ); } p_sys->i_box_type = BOX_PLAYLIST; ReturnTrue; case 0x1b: /* ESC */ /* Alt+key combinations return 2 keys in the terminal keyboard: * ESC, and the 2nd key. * If some other key is available immediately (where immediately * means after wgetch() 1 second delay ), that means that the * ESC key was not pressed. * * man 3X curs_getch says: * * Use of the escape key by a programmer for a single * character function is discouraged, as it will cause a delay * of up to one second while the keypad code looks for a * following function-key sequence. * */ if( wgetch( p_sys->w ) != ERR ) ReturnFalse; p_sys->i_box_plidx = p_sys->i_before_search; p_sys->i_box_type = BOX_PLAYLIST; ReturnTrue; case KEY_BACKSPACE: case 0x7f: RemoveLastUTF8Entity( p_sys->psz_search_chain, i_chain_len ); break; default: {#ifdef HAVE_NCURSESW if( i_chain_len + 1 < SEARCH_CHAIN_SIZE ) { p_sys->psz_search_chain[i_chain_len] = (char) i_key; p_sys->psz_search_chain[i_chain_len + 1] = '\0'; }#else char *psz_utf8 = KeyToUTF8( i_key, p_sys->psz_partial_keys ); if( psz_utf8 != NULL ) { if( i_chain_len + strlen( psz_utf8 ) < SEARCH_CHAIN_SIZE ) { strcpy( p_sys->psz_search_chain + i_chain_len, psz_utf8 ); } free( psz_utf8 ); }#endif break; } } free( p_sys->psz_old_search ); p_sys->psz_old_search = NULL; SearchPlaylist( p_intf, p_sys->psz_search_chain ); ReturnTrue; } else if( p_sys->i_box_type == BOX_OPEN && p_sys->psz_open_chain ) { int i_chain_len = strlen( p_sys->psz_open_chain ); switch( i_key ) { case KEY_CLEAR: case 0x0c: /* ^l */ clear(); ReturnTrue; case KEY_ENTER: case '\r': case '\n': if( i_chain_len > 0 ) { playlist_item_t *p_parent = p_sys->p_node; if( !p_parent ) p_parent = p_playlist->status.p_node; if( !p_parent ) p_parent = p_playlist->p_local_onelevel; while( p_parent->p_parent && p_parent->p_parent->p_parent ) p_parent = p_parent->p_parent; playlist_Add( p_playlist, p_sys->psz_open_chain, NULL, PLAYLIST_APPEND|PLAYLIST_GO, PLAYLIST_END, p_parent->p_input == p_playlist->p_local_onelevel->p_input , false ); p_sys->b_box_plidx_follow = true; } p_sys->i_box_type = BOX_PLAYLIST; ReturnTrue; case 0x1b: /* ESC */ if( wgetch( p_sys->w ) != ERR ) ReturnFalse; p_sys->i_box_type = BOX_PLAYLIST; ReturnTrue; case KEY_BACKSPACE: case 0x7f: RemoveLastUTF8Entity( p_sys->psz_open_chain, i_chain_len ); break; default: {#ifdef HAVE_NCURSESW if( i_chain_len + 1 < OPEN_CHAIN_SIZE ) { p_sys->psz_open_chain[i_chain_len] = (char) i_key; p_sys->psz_open_chain[i_chain_len + 1] = '\0'; }#else char *psz_utf8 = KeyToUTF8( i_key, p_sys->psz_partial_keys ); if( psz_utf8 != NULL ) { if( i_chain_len + strlen( psz_utf8 ) < OPEN_CHAIN_SIZE ) { strcpy( p_sys->psz_open_chain + i_chain_len, psz_utf8 ); } free( psz_utf8 ); }#endif break; } } ReturnTrue; } /* Common keys */ switch( i_key ) { case 0x1b: /* ESC */ if( wgetch( p_sys->w ) != ERR ) ReturnFalse; case 'q': case 'Q': case KEY_EXIT: vlc_object_kill( p_intf->p_libvlc ); ReturnFalse; /* Box switching */ case 'i': if( p_sys->i_box_type == BOX_INFO ) p_sys->i_box_type = BOX_NONE; else p_sys->i_box_type = BOX_INFO; p_sys->i_box_lines_total = 0; ReturnTrue; case 'm': if( p_sys->i_box_type == BOX_META ) p_sys->i_box_type = BOX_NONE; else p_sys->i_box_type = BOX_META; p_sys->i_box_lines_total = 0; ReturnTrue; case 'L': if( p_sys->i_box_type == BOX_LOG ) p_sys->i_box_type = BOX_NONE; else p_sys->i_box_type = BOX_LOG; ReturnTrue; case 'P': if( p_sys->i_box_type == BOX_PLAYLIST ) p_sys->i_box_type = BOX_NONE; else p_sys->i_box_type = BOX_PLAYLIST; ReturnTrue; case 'B': if( p_sys->i_box_type == BOX_BROWSE ) p_sys->i_box_type = BOX_NONE; else p_sys->i_box_type = BOX_BROWSE; ReturnTrue; case 'x': if( p_sys->i_box_type == BOX_OBJECTS ) p_sys->i_box_type = BOX_NONE; else p_sys->i_box_type = BOX_OBJECTS; ReturnTrue; case 'S': if( p_sys->i_box_type == BOX_STATS ) p_sys->i_box_type = BOX_NONE; else p_sys->i_box_type = BOX_STATS; ReturnTrue; case 'c': p_sys->b_color = !p_sys->b_color; if( p_sys->b_color && !p_sys->b_color_started ) start_color_and_pairs( p_intf ); ReturnTrue; case 'h': case 'H': if( p_sys->i_box_type == BOX_HELP ) p_sys->i_box_type = BOX_NONE; else p_sys->i_box_type = BOX_HELP; p_sys->i_box_lines_total = 0; ReturnTrue; case '/': if( p_sys->i_box_type != BOX_SEARCH ) { if( p_sys->psz_search_chain == NULL ) ReturnTrue; p_sys->psz_search_chain[0] = '\0'; p_sys->b_box_plidx_follow = false; p_sys->i_before_search = p_sys->i_box_plidx; p_sys->i_box_type = BOX_SEARCH; } ReturnTrue; case 'A': /* Open */ if( p_sys->i_box_type != BOX_OPEN ) { if( p_sys->psz_open_chain == NULL ) ReturnTrue; p_sys->psz_open_chain[0] = '\0'; p_sys->i_box_type = BOX_OPEN; } ReturnTrue; /* Navigation */ case KEY_RIGHT: p_sys->f_slider += 1.0; if( p_sys->f_slider > 99.9 ) p_sys->f_slider = 99.9; ManageSlider( p_intf ); ReturnTrue; case KEY_LEFT: p_sys->f_slider -= 1.0; if( p_sys->f_slider < 0.0 ) p_sys->f_slider = 0.0; ManageSlider( p_intf ); ReturnTrue; /* Common control */ case 'f': { if( p_intf->p_sys->p_input ) { vout_thread_t *p_vout; p_vout = vlc_object_find( p_intf->p_sys->p_input, VLC_OBJECT_VOUT, FIND_CHILD ); if( p_vout ) { var_Get( p_vout, "fullscreen", &val ); val.b_bool = !val.b_bool; var_Set( p_vout, "fullscreen", val ); vlc_object_release( p_vout ); } else { var_Get( p_playlist, "fullscreen", &val ); val.b_bool = !val.b_bool; var_Set( p_playlist, "fullscreen", val ); } } ReturnFalse; } case ' ': PlayPause( p_intf ); ReturnTrue; case 's': playlist_Stop( p_playlist ); ReturnTrue; case 'e': Eject( p_intf ); ReturnTrue; case '[': if( p_sys->p_input ) { val.b_bool = true; var_Set( p_sys->p_input, "prev-title", val ); } ReturnTrue; case ']': if( p_sys->p_input ) { val.b_bool = true; var_Set( p_sys->p_input, "next-title", val ); } ReturnTrue;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -