simplify load_url_in_tab

move util.c declarations in utils.h it's not spelled `util.h' because otherwise it'd get included instead of /usr/include/util.h

simplify the caching API - don't expose the evbuffer where we store the cached page - cache to/from tabs instead of buffers

fix start_loading_animation usage the idiom if (load_next_page(...)) start_loading_anim(...); is fundamentally wrong because `load_next_page' (or previous page, or anything else that call into load_url) *may* load all the page before returning (thanks to the cache, but not only, cf. load_page_from_str.) Instead, let's call start_loadign_anim at the start of make_request so it's always called in the right moment. Cache and other special pages don't end up calling make_request anyway, and we already call stop_loading_anim when a request finishes (or fails.) move start_loading_anim up in make_request.

provide a way to bypass the cache This changes the last argument of load_url to be a `mode' bitmap instead of a boolean ``nohist''. LU_MODE_NOHIST is the old 1, LU_MODE_NONE is provided just for readability and the new LU_MODE_NOCACHE allows to bypass the caching when loading a page. Telescope only uses the cache when: - re-opens a closed tab - navigates backward and forward in the history All other situations result in the usual network request.

cache only gemini:// and gopher:// pages

add an in-memory cache store see github issue #1

append killed tabs when parsing session to preserve the order The other option, less intrusive, would be to send the killed tabs in reverse order, but it'd seems strange when looking at the session file otherwise. So, add a `append' flag to kill_tab to optionally append the killed tab instead of pre-pending it.

allow to re-open closed tabs Save closed tabs to a "killed tabs" queue, for up to a max of "max-killed-tabs", and allow to re-open them. Keep the tab history but not its content. This integrates nicely with the session file, just add the "killed" flag as alias for TAB_KILLED and put it in the ktabshead queue upon initalization. It's thus possible to re-open closed tabs even after telescope has been closed, and tabs keeps their history! Add a new cmd, cmd_tab_undo_close, to try to re-open the most recently closed tab and bind it to `u'. While here, add a TODO for the tab history memory leak.

move know_host parsing to the fs process and load the store via imsgs Like previously did with the session file, now the main process doesn't parse anything with the only exception being the configuration file. With this in, the only bit from fs.h still used in the main process is the path to the configuration file.

avoid zero-timer hack by triggering session initialization with IMSG_INIT

implement persistent tab history The session file is now overloaded with the history info, that means that upon startup telescope can repopulate each tab history! The price to pay is that one can't start an old telescope with a new session file, otherwise will get a lot of fancy '<' and '>' tabs...

rework handle_imsg_session into a switch on the imsg type

simplify the lazy tabs handling it's cleaner to just toggle the lazy bit in switch_to_tab instead of pushing that complexity in load_url. While there also try to simplify the function and its documentation from unnecessary checks and extra verbosity. This also fixes a bug where Telescope ended up pushing the url on the history *twice* at startup.

add --corours as an alias for --color Suggested by Florian, thanks!