void csPrevious()
{
	if (pop_history (&his)) {
		jumpTo(his.filename, his.lineno);
	}
	return;
}
Beispiel #2
0
static void do_app(void)
{
    if (ui.key == KEY_F4 && ui.mod == GLFW_MOD_ALT)
        quit();

    if (ui.down || ui.middle || ui.right || ui.key)
        showinfo = 0;

    if (!ui.focus && ui.key)
    {
        switch (ui.key)
        {
        case 'q':
            quit();
            break;
        case 'm':
            if (number == 0)
                push_history();
            else if (number > 0 && number < nelem(marks))
                marks[number] = currentpage;
            break;
        case 't':
            if (number == 0)
            {
                if (history_count > 0)
                    pop_history();
            }
            else if (number > 0 && number < nelem(marks))
            {
                jump_to_page(marks[number]);
            }
            break;
        case 'T':
            if (number == 0)
            {
                if (future_count > 0)
                    pop_future();
            }
            break;
        case 'N':
            search_dir = -1;
            if (search_hit_page == currentpage)
                search_page = currentpage + search_dir;
            else
                search_page = currentpage;
            if (search_page >= 0 && search_page < fz_count_pages(ctx, doc))
            {
                search_hit_page = -1;
                if (search_needle)
                    search_active = 1;
            }
            break;
        case 'n':
            search_dir = 1;
            if (search_hit_page == currentpage)
                search_page = currentpage + search_dir;
            else
                search_page = currentpage;
            if (search_page >= 0 && search_page < fz_count_pages(ctx, doc))
            {
                search_hit_page = -1;
                if (search_needle)
                    search_active = 1;
            }
            break;
        case 'f':
            toggle_fullscreen();
            break;
        case 'w':
            shrinkwrap();
            break;
        case 'r':
            reload();
            break;
        case 'o':
            toggle_outline();
            break;
        case 'W':
            auto_zoom_w();
            break;
        case 'H':
            auto_zoom_h();
            break;
        case 'Z':
            auto_zoom();
            break;
        case 'z':
            currentzoom = number > 0 ? number : DEFRES;
            break;
        case '<':
            currentpage -= 10 * fz_maxi(number, 1);
            break;
        case '>':
            currentpage += 10 * fz_maxi(number, 1);
            break;
        case ',':
        case KEY_PAGE_UP:
            currentpage -= fz_maxi(number, 1);
            break;
        case '.':
        case KEY_PAGE_DOWN:
            currentpage += fz_maxi(number, 1);
            break;
        case 'b':
            number = fz_maxi(number, 1);
            while (number--) smart_move_backward();
            break;
        case ' ':
            number = fz_maxi(number, 1);
            while (number--) smart_move_forward();
            break;
        case 'g':
            jump_to_page(number - 1);
            break;
        case 'G':
            jump_to_page(fz_count_pages(ctx, doc) - 1);
            break;
        case '+':
            currentzoom = zoom_in(currentzoom);
            break;
        case '-':
            currentzoom = zoom_out(currentzoom);
            break;
        case '[':
            currentrotate += 90;
            break;
        case ']':
            currentrotate -= 90;
            break;
        case 'l':
            showlinks = !showlinks;
            break;
        case 'i':
            showinfo = !showinfo;
            break;
        case '/':
            search_dir = 1;
            showsearch = 1;
            search_input.p = search_input.text;
            search_input.q = search_input.end;
            break;
        case '?':
            search_dir = -1;
            showsearch = 1;
            search_input.p = search_input.text;
            search_input.q = search_input.end;
            break;
        case KEY_UP:
            scroll_y -= 10;
            break;
        case KEY_DOWN:
            scroll_y += 10;
            break;
        case KEY_LEFT:
            scroll_x -= 10;
            break;
        case KEY_RIGHT:
            scroll_x += 10;
            break;
        }

        if (ui.key >= '0' && ui.key <= '9')
            number = number * 10 + ui.key - '0';
        else
            number = 0;

        currentpage = fz_clampi(currentpage, 0, fz_count_pages(ctx, doc) - 1);
        currentzoom = fz_clamp(currentzoom, MINRES, MAXRES);
        while (currentrotate < 0) currentrotate += 360;
        while (currentrotate >= 360) currentrotate -= 360;

        if (search_hit_page != currentpage)
            search_hit_page = -1; /* clear highlights when navigating */

        ui_needs_update = 1;

        ui.key = 0; /* we ate the key event, so zap it */
    }
}
Beispiel #3
0
int main(int argc, char *argv[])
{
    int     i;
    char    line[1024], *uri;

    /* copy defaults */
    init_config();
    uri = &config.start_uri[0];

    /* parse command line */
    for (i = 1; i < argc; i++) {
        if (argv[i][0] == '-') switch(argv[i][1]) {
            case 'H':
                usage();
                break;
            case 'v':
                banner(stderr);
                exit(EXIT_FAILURE);
            default:
                usage();
        } else {
            uri = argv[i];
        }
    }

    /* parse uri */
    banner(stdout);
    if (! parse_uri(uri)) {
        banner(stderr);
        fprintf(stderr, "invalid gopher URI: %s", argv[i]);
        exit(EXIT_FAILURE);
    }

    /* main loop */
    view_directory(parsed_host, parsed_port, parsed_selector, 0);
    for (;;) {
        printf("\033[%sm%s:%s%s\033[0m ", config.color_prompt,
                current_host, current_port, current_selector);
        fflush(stdout); /* to display the prompt */
        if (! read_line(0, line, sizeof(line))) {
            puts("QUIT");
            return EXIT_SUCCESS;
        }
        i = strlen(line);
        switch (line[0]) {
            case '?':
                puts(
                    "?          - help\n"
                    "*          - reload directory\n"
                    "<          - go back in history\n"
                    ".LINK      - download the given link\n"
                    "h          - show history\n"
                    "hLINK      - jump to the specified history item\n"
                    "gURI       - jump to the given gopher URI\n"
                    "b          - show bookmarks\n"
                    "bLINK      - jump to the specified bookmark item\n"
                    "C^d        - quit");
                break;
            case '<':
                pop_history();
                break;
            case '*':
                view_directory(current_host, current_port,
                        current_selector, 0);
                break;
            case '.':
                download_link(make_key(line[1], line[2]));
                break;
            case 'h':
                if (i == 1 || i == 3) view_history(make_key(line[1], line[2]));
                else follow_link(make_key(line[0], line[1]));
                break;
            case 'g':
                if (i != 2) {
                    if (parse_uri(&line[1])) view_directory(parsed_host, parsed_port, parsed_selector, 1);
                    else puts("invalid gopher URI");
                } else follow_link(make_key(line[0], line[1]));
                break;
            case 'b':
                if (i == 1 || i == 3) view_bookmarks(make_key(line[1], line[2]));
                else follow_link(make_key(line[0], line[1]));
                break;
            default:
                follow_link(make_key(line[0], line[1]));
                break;
        }
    }
    return EXIT_SUCCESS; /* never get's here but stops cc complaining */
}