Changeset 2421 for neercs


Ignore:
Timestamp:
Jun 15, 2008, 5:13:41 PM (12 years ago)
Author:
Jean-Yves Lamoureux
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.