Commits


imsg: allow fdpass on the net socket it's used to pass the client certificate to the net process so has to be enabled. Issue <https://github.com/telescope-browser/telescope/issues/21> spotted by linuxcult; thank you!


update imsg


fix display of certificate selection prompt


open unknown protocols with the default opener


fmt


make yornp data be a void pointer instead of a tab


code: add wrappers for common failure cases Certain calls to well-known functions sometimes result in similar error handling across the code base. Sometimes there's a need to centralise the failure case. Achieve this for common wrappers to often-used functions. The transformation is achieved via coccinelle, commited with this patch. Note that coccinelle can be told to ignore code blocks with comment delimiters. This transformation applies just to telescope's code, and not any of the bundled depdencies in telescope (libgrapheme).


untangle a bit buffers and parsers Now buffers have a nicer interface, taking explicitly the buffer where they push stuff, and the code that deals with buffers doesn't need to peek into the parsers. The parsers now are 'pure' structs without state attached to them, the state was moved to the buffer.


feature: remove external-cmd Now that telescope understands mailcap, there's no need for the use of external-cmd any longer.


update telescope to make use of mailcap Change telescope to make use of mailcap entries. Commands are no longer prompted for how to handle an unknown mime-type. Commands are now executed via execvp(), and the mailcap handling assumes this as part of its interface.


remove signal(SIGCHLD); we want to wait for the editor


ui: add capability to run external cmds When telescope encounters a file type which it cannot display it prompts the user whether they wish to save the file, or not. This patch extends this idea -- if the file is saved, then the user is prompted to run a command against that downloaded file. This controllable via the 'external-cmd' setting. It defaults to 'xdg-open'. This is based off work originally started by op@.


use parser_*() wrappers rather than calling the methods directly


warn also when a download could have been interrupted


tls: guard against faulty gemini servers Some gemini servers have faulty TLS handling, such as: gg: tls_close: EOF without close notify In such cases, telescope will receive that error and naturally assume there was a problem and stop processing. However, in the case of there still being legitimate content read from the request, this should still be displayed, rather than ignored. This change therefore detects this condition and adds a status of 'W' to telescope's modeline to indicate that the information presented is from a faulty gemini server and could be truncated and hence display oddly.


move imsgev & co to their own file This avoids bringing the dependency on ev on telescope-identity(1) and the tests as well.


fix handling of gopher selectors Much of telescope works in terms of URI, so we convert each gopher link to an URI. However, we didn't urlencode the path parameter, thus failing on every link that contains spaces or similar invalid (in URI paths) characters. Issue reported by hryjksn on github, thanks! https://github.com/omar-polo/telescope/issues/14


convert telescope to use ev instead of libevent libevent is a very cool library, I like the APIs and enjoy using it. However, telescope is not as large and doesn't have as many file descriptor, so libevent is quite ``too big'' for our needs. ev started as a small event loop on top of poll(2) for amused, and can be used here too, it just needed to grow the ability to handle several timers, as we need quite some on telescope (in fact, we use more timers than fds!)


catch fs_init() and certs_init() failures


add client_cert_temp flag to the struct tab This way we can improve unload-certificate prompt. While here, move the cert handling in make_request().


move tofu declarations to their own header While here replace GEMINI_URL_LEN with TOFU_URL_MAX_LEN to avoid a dependency on telescope.h. Ideally, we should move this stuff to another header that comes with less dependencies.


some headers cleanup try to not include headers from headers, and remove some redundant include. This helps in modularizing the codebase and also helps during incremental compilations.


include cmd.h only where it is really needed


load and optionally remember client certificates This adds use-certificate, a user function to start using a certificate or switch to a different one. It asks whether to persist the certificate, if not it will only be used for the current session. use-certificate is implicitly called when the server replies with a 6x status code.


first draft of client certificate support At the moment telescope loads a mapping host:port/path -> certificate from a file and always uses it, no ways to change it, use a temporary one, generate a new one, etc are provided yet. The format of ~/.telescope/certs/certs is host port path certificate file name where the certificate file name is the name of a file inside ~/.telescope/certs. ~/.telescope/certs/ is ~/.local/share/telescope/ when using XDG.