Changeset 2421


Ignore:
Timestamp:
06/15/08 17:13:41 (5 years ago)
Author:
jylam
Message:
  • Put pty and prevpty in screen_list structure
Location:
neercs/trunk/src
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • neercs/trunk/src/effects.c

    r2404 r2421  
    2525 
    2626 
    27 void draw_thumbnails(cucul_canvas_t *cv, struct screen_list *screen_list, int pty) 
     27void draw_thumbnails(cucul_canvas_t *cv, struct screen_list *screen_list) 
    2828{ 
    2929                char const * const *fonts; 
     
    6666                        cucul_set_color_ansi(cv, CUCUL_WHITE, CUCUL_BLUE); 
    6767 
    68                         if(pty == i) 
     68                        if(screen_list->pty == i) 
    6969                            cucul_draw_cp437_box(cv,20 * i, 
    7070                                                 cucul_get_canvas_height(cv) - 6, 19, 6); 
     
    8282 
    8383/* FIXME, make this stuff more configurable */ 
    84 void draw_status(cucul_canvas_t *cv, struct screen_list *screen_list, int pty) 
     84void draw_status(cucul_canvas_t *cv, struct screen_list *screen_list) 
    8585{ 
    8686    int x = 0, y = cucul_get_canvas_height(cv) - 1; 
     
    116116    { 
    117117        char text[256]; 
    118         sprintf(text, "%d/%d", pty+1, screen_list->count); 
     118        sprintf(text, "%d/%d", screen_list->pty+1, screen_list->count); 
    119119        x++; 
    120120        cucul_set_color_ansi(cv, CUCUL_LIGHTBLUE, CUCUL_BLUE); 
     
    169169 
    170170 
    171 void draw_help(cucul_canvas_t *cv, struct screen_list *screen_list, int pty) 
     171void draw_help(cucul_canvas_t *cv, struct screen_list *screen_list) 
    172172{ 
    173173    int w = 65, h = 20; 
     
    197197    cucul_printf(cv, x, y++, ""); 
    198198    cucul_printf(cv, x, y++, "All shortcuts are in format 'ctrl-a-X' where X is :"); 
    199  
    200199    cucul_printf(cv, x, y++, "n:\t Next window"); 
    201200    cucul_printf(cv, x, y++, "p:\t Previous window"); 
  • neercs/trunk/src/main.c

    r2402 r2421  
    4343    struct screen_list *screen_list = NULL; 
    4444    char *default_shell = NULL; 
    45     int pty = 0, prevpty = 0, i, w, h, nt, args = 0; 
     45    int i, w, h, nt, args = 0; 
    4646    int eof = 0, refresh = 1, command = 0; 
    4747 
     
    9797    screen_list->wm_type = WM_VSPLIT; 
    9898    screen_list->in_bell = 0; 
     99    screen_list->pty = screen_list->prevpty = 0; 
     100 
    99101 
    100102    for(i = 0; i < nt; i++) 
     
    118120 
    119121    /* Windows are in a temporary state, resize them to the right dimensions */ 
    120     update_windows_props(cv, screen_list, pty); 
     122    update_windows_props(cv, screen_list); 
    121123    caca_refresh_display(dp); 
    122124 
     
    127129        int ret; 
    128130 
    129         refresh |= update_screens_contents(screen_list, 
    130                                            &pty, &prevpty); 
     131        refresh |= update_screens_contents(screen_list); 
    131132 
    132133        /* No more screens, exit */ 
     
    149150                { 
    150151                case 0x01: //CACA_KEY_CTRL_A: 
    151                     pty ^= prevpty; 
    152                     prevpty ^= pty; 
    153                     pty ^= prevpty; 
     152                    screen_list->pty ^= screen_list->prevpty; 
     153                    screen_list->prevpty ^= screen_list->pty; 
     154                    screen_list->pty ^= screen_list->prevpty; 
    154155                    refresh = 1; 
    155156                    break; 
     
    163164                case '\0': 
    164165                case 0x0e: //CACA_KEY_CTRL_N: 
    165                     prevpty = pty; 
    166                     pty = (pty + 1) % screen_list->count; 
     166                    screen_list->prevpty = screen_list->pty; 
     167                    screen_list->pty = (screen_list->pty + 1) % screen_list->count; 
    167168                    refresh = 1; 
    168169                    break; 
    169170                case 'p': 
    170171                case 0x10: //CACA_KEY_CTRL_P: 
    171                     prevpty = pty; 
    172                     pty = (pty + screen_list->count - 1) % screen_list->count; 
     172                    screen_list->prevpty = screen_list->pty; 
     173                    screen_list->pty = (screen_list->pty + screen_list->count - 1) % screen_list->count; 
    173174                    refresh = 1; 
    174175                    break; 
    175176                case 'c': 
    176177                case 0x03: //CACA_KEY_CTRL_C: 
    177                     prevpty = pty; 
    178                     pty = 
     178                    screen_list->prevpty = screen_list->pty; 
     179                    screen_list->pty = 
    179180                        add_screen(screen_list, create_screen(w, h, default_shell)); 
    180181                    refresh = 1; 
     
    188189                    break; 
    189190                case 0x0b: //CACA_KEY_CTRL_K: 
    190                     remove_screen(screen_list, pty, 1); 
    191                     pty = prevpty; 
    192                     prevpty = 0; 
     191                    remove_screen(screen_list, screen_list->pty, 1); 
     192                    screen_list->pty = screen_list->prevpty; 
     193                    screen_list->prevpty = 0; 
    193194                    refresh = 1; 
    194195                    break; 
     
    207208                    command = 1; break; 
    208209                case CACA_KEY_UP: 
    209                     write(screen_list->screen[pty]->fd, "\x1b[A", 3); break; 
     210                    write(screen_list->screen[screen_list->pty]->fd, "\x1b[A", 3); break; 
    210211                case CACA_KEY_DOWN: 
    211                     write(screen_list->screen[pty]->fd, "\x1b[B", 3); break; 
     212                    write(screen_list->screen[screen_list->pty]->fd, "\x1b[B", 3); break; 
    212213                case CACA_KEY_RIGHT: 
    213                     write(screen_list->screen[pty]->fd, "\x1b[C", 3); break; 
     214                    write(screen_list->screen[screen_list->pty]->fd, "\x1b[C", 3); break; 
    214215                case CACA_KEY_LEFT: 
    215                     write(screen_list->screen[pty]->fd, "\x1b[D", 3); break; 
     216                    write(screen_list->screen[screen_list->pty]->fd, "\x1b[D", 3); break; 
    216217                case CACA_KEY_ESCAPE: 
    217218                    if(screen_list->help) screen_list->help = 0; 
    218219                default: 
    219                     write(screen_list->screen[pty]->fd, &c, 1); break; 
     220                    write(screen_list->screen[screen_list->pty]->fd, &c, 1); break; 
    220221                } 
    221222            } 
     
    223224        else if(ret && (caca_get_event_type(&ev) & CACA_EVENT_RESIZE)) 
    224225        { 
    225             update_windows_props(cv, screen_list, pty); 
    226  
     226            update_windows_props(cv, screen_list); 
    227227            cucul_clear_canvas(cv); 
    228228            refresh = 1; 
     
    237237        { 
    238238            refresh = 0; 
    239             refresh_screens(cv, dp, screen_list,  pty); 
     239            refresh_screens(cv, dp, screen_list); 
    240240        } 
    241241 
  • neercs/trunk/src/neercs.h

    r2403 r2421  
    1616#include <stdint.h> 
    1717#include <cucul.h> 
     18 
     19 
     20#define CURRENTSCREEN screen_list->screen[screen_list->pty] 
     21 
    1822 
    1923enum wm_types 
     
    4549    long int total; 
    4650    int bell; 
     51    unsigned int scroll, s1, s2; 
    4752    int pid; 
     53 
     54    int kill_time; 
    4855 
    4956    int x, y; 
     
    6067    int help; 
    6168 
     69 
     70    int pty, prevpty; 
    6271    int count; 
    6372    int width, height; 
     
    7382void refresh_screens(cucul_canvas_t *cv, 
    7483                     caca_display_t *dp, 
    75                      struct screen_list *screen_list, 
    76                      int pty); 
    77 int update_screens_contents(struct screen_list* screen_list, 
    78                              int *pty, int *prevpty); 
     84                     struct screen_list *screen_list); 
     85int update_screens_contents(struct screen_list* screen_list); 
    7986 
    8087/* Screens management */ 
     
    8693 
    8794/* Window managers */ 
    88 void update_windows_props(cucul_canvas_t *cv, struct screen_list *screen_list, int pty); 
    89 void update_windows_props_cards(cucul_canvas_t *cv, struct screen_list *screen_list, int pty); 
    90 void update_windows_props_hsplit(cucul_canvas_t *cv, struct screen_list *screen_list, int pty); 
    91 void update_windows_props_full(cucul_canvas_t *cv, struct screen_list *screen_list, int pty); 
    92 void update_windows_props_vsplit(cucul_canvas_t *cv, struct screen_list *screen_list, int pty); 
     95void update_windows_props(cucul_canvas_t *cv, struct screen_list *screen_list); 
     96void update_windows_props_cards(cucul_canvas_t *cv, struct screen_list *screen_list); 
     97void update_windows_props_hsplit(cucul_canvas_t *cv, struct screen_list *screen_list); 
     98void update_windows_props_full(cucul_canvas_t *cv, struct screen_list *screen_list); 
     99void update_windows_props_vsplit(cucul_canvas_t *cv, struct screen_list *screen_list); 
    93100 
    94101/* Effects and addons */ 
    95 void draw_thumbnails(cucul_canvas_t *cv, struct screen_list *screen_list, int pty); 
    96 void draw_status(cucul_canvas_t *cv, struct screen_list *screen_list, int pty); 
    97 void draw_help(cucul_canvas_t *cv, struct screen_list *screen_list, int pty); 
     102void draw_thumbnails(cucul_canvas_t *cv, struct screen_list *screen_list); 
     103void draw_status(cucul_canvas_t *cv, struct screen_list *screen_list); 
     104void draw_help(cucul_canvas_t *cv, struct screen_list *screen_list); 
    98105 
    99106 
  • neercs/trunk/src/screens.c

    r2403 r2421  
    4545    s->bell = 0; 
    4646    s->visible = 1; 
     47    s->scroll = 0; 
    4748    s->fd = create_pty(command, w, h, &s->pid); 
    4849 
     
    8384                                                 sizeof(sizeof(struct screen*)) 
    8485                                                 * (list->count+1)); 
     86        if(!list->screen) 
     87            fprintf(stderr, "Can't allocate memory at %s:%d\n", __FUNCTION__, __LINE__); 
    8588        list->screen[list->count] = s; 
    8689        list->count++; 
     
    124127                                             sizeof(sizeof(struct screen*)) 
    125128                                             * (list->count)); 
     129    if(!list->screen) 
     130        fprintf(stderr, "Can't allocate memory at %s:%d\n", __FUNCTION__, __LINE__); 
    126131 
    127132    list->count--; 
     
    133138void refresh_screens(cucul_canvas_t *cv, 
    134139                     caca_display_t *dp, 
    135                      struct screen_list *screen_list, 
    136                      int pty) 
     140                     struct screen_list *screen_list) 
    137141{ 
    138142    int i; 
     
    141145    screen_list->height = cucul_get_canvas_height(cv) - (screen_list->mini*6); 
    142146 
    143     update_windows_props(cv, screen_list, pty); 
    144  
    145     if(screen_list->screen[pty]->title) 
    146         caca_set_display_title(dp, screen_list->screen[pty]->title); 
     147    update_windows_props(cv, screen_list); 
     148 
     149    if(screen_list->screen[screen_list->pty]->title) 
     150        caca_set_display_title(dp, screen_list->screen[screen_list->pty]->title); 
    147151    else 
    148152        caca_set_display_title(dp, PACKAGE_STRING); 
     
    154158    for(i = screen_list->count - 1; i >=0; i--) 
    155159    { 
    156         if(i!=pty && screen_list->screen[i]->visible) 
     160        if(i!=screen_list->pty && screen_list->screen[i]->visible) 
    157161        { 
    158162            cucul_blit(cv, 
     
    176180 
    177181    cucul_blit(cv, 
    178                screen_list->screen[pty]->x, 
    179                screen_list->screen[pty]->y, 
    180                screen_list->screen[pty]->cv, NULL); 
    181  
    182     if(screen_list->screen[pty]->bell) 
     182               screen_list->screen[screen_list->pty]->x, 
     183               screen_list->screen[screen_list->pty]->y, 
     184               screen_list->screen[screen_list->pty]->cv, NULL); 
     185 
     186    if(screen_list->screen[screen_list->pty]->bell) 
    183187    { 
    184188        cucul_set_color_ansi(cv, CUCUL_RED, CUCUL_BLACK); 
    185         screen_list->screen[pty]->bell = 0; 
     189        screen_list->screen[screen_list->pty]->bell = 0; 
    186190        screen_list->in_bell--; 
    187191    } 
     
    192196 
    193197    cucul_draw_cp437_box(cv, 
    194                          screen_list->screen[pty]->x - 1, 
    195                          screen_list->screen[pty]->y - 1, 
    196                          screen_list->screen[pty]->w + 2, 
    197                          screen_list->screen[pty]->h + 2); 
    198  
    199     if(screen_list->screen[pty]->title) 
     198                         screen_list->screen[screen_list->pty]->x - 1, 
     199                         screen_list->screen[screen_list->pty]->y - 1, 
     200                         screen_list->screen[screen_list->pty]->w + 2, 
     201                         screen_list->screen[screen_list->pty]->h + 2); 
     202 
     203    if(screen_list->screen[screen_list->pty]->title) 
    200204    { 
    201205        cucul_printf(cv, 
    202                      screen_list->screen[pty]->x, 
    203                      screen_list->screen[pty]->y - 1, 
     206                     screen_list->screen[screen_list->pty]->x, 
     207                     screen_list->screen[screen_list->pty]->y - 1, 
    204208                     " %.*s ", 
    205                      screen_list->screen[pty]->w - 3, 
    206                      screen_list->screen[pty]->title); 
     209                     screen_list->screen[screen_list->pty]->w - 3, 
     210                     screen_list->screen[screen_list->pty]->title); 
    207211    } 
    208212 
    209213    cucul_gotoxy(cv, 
    210                  screen_list->screen[pty]->x + 
    211                  cucul_get_cursor_x(screen_list->screen[pty]->cv), 
    212                  screen_list->screen[pty]->y + 
    213                  cucul_get_cursor_y(screen_list->screen[pty]->cv)); 
     214                 screen_list->screen[screen_list->pty]->x + 
     215                 cucul_get_cursor_x(screen_list->screen[screen_list->pty]->cv), 
     216                 screen_list->screen[screen_list->pty]->y + 
     217                 cucul_get_cursor_y(screen_list->screen[screen_list->pty]->cv)); 
    214218 
    215219 
    216220    if(screen_list->mini) 
    217221    { 
    218         draw_thumbnails(cv, screen_list, pty); 
     222        draw_thumbnails(cv, screen_list); 
    219223    } 
    220224    if(screen_list->status) 
    221225    { 
    222         draw_status(cv, screen_list, pty); 
     226        draw_status(cv, screen_list); 
    223227    } 
    224228    if(screen_list->help) 
    225229    { 
    226         draw_help(cv, screen_list, pty); 
     230        draw_help(cv, screen_list); 
    227231    } 
    228232 
     
    231235 
    232236 
    233 int update_screens_contents(struct screen_list* screen_list, 
    234                              int *pty, int *prevpty) 
     237int update_screens_contents(struct screen_list* screen_list) 
    235238{ 
    236239    int i, refresh = 0; 
     
    285288                realloc(screen_list->screen[i]->buf, 
    286289                        screen_list->screen[i]->total + 1024); 
     290            if(!screen_list->screen[i]->buf) 
     291                fprintf(stderr, "Can't allocate memory at %s:%d\n", __FUNCTION__, __LINE__); 
     292 
    287293            nr = read(screen_list->screen[i]->fd, 
    288294                      screen_list->screen[i]->buf + 
     
    300306                destroy_screen(screen_list->screen[i]); 
    301307                remove_screen(screen_list, i, 0); 
    302                 if(i < (*prevpty)) (*prevpty)--; 
    303                 if(i == *pty) 
     308                if(i < screen_list->prevpty) screen_list->prevpty--; 
     309                if(i == screen_list->pty) 
    304310                { 
    305                     *pty = *prevpty; 
    306                     *prevpty = 0; 
     311                    screen_list->pty = screen_list->prevpty; 
     312                    screen_list->prevpty = 0; 
    307313                } 
    308                 if(i < (*pty)) (*pty)--; 
     314                if(i < (screen_list->pty)) (screen_list->pty)--; 
    309315                refresh = 1; 
    310316            } 
  • neercs/trunk/src/term.c

    r2402 r2421  
    109109            unsigned int param, inter, final; 
    110110 
     111 
    111112        /* Compute offsets to parameter bytes, intermediate bytes and 
    112113         * to the final byte. Only the final byte is mandatory, there 
     
    165166             * ECMA-48 5.4: Control sequences, and the code definitions are 
    166167             * given in ECMA-48 8.3: Definition of control functions. */ 
     168 
    167169            switch(buffer[i + final]) 
    168170            { 
  • neercs/trunk/src/wm.c

    r2403 r2421  
    4242} 
    4343 
    44 void update_windows_props(cucul_canvas_t *cv, struct screen_list *screen_list, int pty) 
     44void update_windows_props(cucul_canvas_t *cv, struct screen_list *screen_list) 
    4545{ 
     46    if(!screen_list->count) return; 
     47 
    4648    switch(screen_list->wm_type) 
    4749    { 
    4850    case WM_CARD: 
    49         update_windows_props_cards(cv, screen_list, pty); 
     51        update_windows_props_cards(cv, screen_list); 
    5052        break; 
    5153    case WM_HSPLIT: 
    52         update_windows_props_hsplit(cv, screen_list, pty); 
     54        update_windows_props_hsplit(cv, screen_list); 
    5355        break; 
    5456    case WM_VSPLIT: 
    55         update_windows_props_vsplit(cv, screen_list, pty); 
     57        update_windows_props_vsplit(cv, screen_list); 
    5658        break; 
    5759    case WM_FULL: 
    5860    default: 
    59         update_windows_props_full(cv, screen_list, pty); 
     61        update_windows_props_full(cv, screen_list); 
    6062        break; 
    6163    } 
    6264} 
    6365 
    64 void update_windows_props_hsplit(cucul_canvas_t *cv, struct screen_list *screen_list, int pty) 
     66void update_windows_props_hsplit(cucul_canvas_t *cv, struct screen_list *screen_list) 
    6567{ 
    6668    int i; 
     
    8587} 
    8688 
    87 void update_windows_props_vsplit(cucul_canvas_t *cv, struct screen_list *screen_list, int pty) 
     89void update_windows_props_vsplit(cucul_canvas_t *cv, struct screen_list *screen_list) 
    8890{ 
    8991    int i; 
     
    109111 
    110112 
    111 void update_windows_props_full(cucul_canvas_t *cv, struct screen_list *screen_list, int pty) 
     113void update_windows_props_full(cucul_canvas_t *cv, struct screen_list *screen_list) 
    112114{ 
    113115    int i; 
     
    124126                      w, h); 
    125127    } 
    126     screen_list->screen[pty]->visible = 1; 
     128    screen_list->screen[screen_list->pty]->visible = 1; 
    127129} 
    128130 
    129131 
    130 void update_windows_props_cards(cucul_canvas_t *cv, struct screen_list *screen_list, int pty) 
     132void update_windows_props_cards(cucul_canvas_t *cv, struct screen_list *screen_list) 
    131133{ 
    132134    int i; 
Note: See TracChangeset for help on using the changeset viewer.