#+TITLE: Development notes/ideas #+TODO: OPEN | CLOSED INVALID * Enhancements ** OPEN Allow multiple elpher buffers [33%] Shouldn't be too hard, just need elpher-current-node to be buffer-local and allow various buffer-switching procedures to do something sensible. Here are the things that need to be implemented before this can happen: - [X] shift history out of node tree and into separate stack - [ ] make history stack variables buffer-local - [ ] have elpher-with-clean-buffer select appropriate buffer ** OPEN Remove "redraw" command This is only necessary for returning from displaying the raw server response. If I can provide a better way of doing that then we can get rid of redraw entirely. ** OPEN Replace support for user-specified starting pages This used to be available, but was removed during a refactor. ** OPEN Allow for grouping of bookmarks To support this I'd like to add a bookmark page specific set of keybindings. Currently all bindings available on the bookmark page are available everywhere else. But expanding and collapsing bookmark groups sounds like it might need more specific bindings. ** OPEN Implement Gemini support [88%] Here is the checklist of features required before release: - [X] basic genimi transactions - [ ] gemini transactions requiring client certificates - [X] gemini input handling - [X] gemini map files (text/gemini) - [X] Support for plain text responses (text/*) - [X] Support for image responses (text/image) - [X] Support for mime-specified character encodeing - [X] Saving responses to disk - [X] Viewing raw responses The last few will be made infinitely easier if we factor the gopher "getter" code differently. * Bugs * Completed improvements ** CLOSED Turn on lexical scoping A branch exists for this, but there are some compilation kinks to iron out. ** CLOSED Implement support for telnet entries Similar to http entries, telnet entries will be handled by code external to elpher. However it seems I made http entry handling a special case, and I don't want another! So the only option is to bring both http and telnet entries back into the fold by representing them both as standard nodes and having the grunt work done by getter functions. ** CLOSED Allow users to access selected and current node details. ** CLOSED Implement bookmark system Currently the bookmark page replaces the current page, and it does so silently (i.e. it doesn't become part of the link hierarchy). I think this is a mistake, as it results in confusing behaviour when traversing the link hierarchy after visiting one of the bookmarked links. Instead, I think I should 1. Make the bookmark page part of the hierarchy, and 2. Reinstate the visited node hash table to avoid excess link hierarchy pollution. In order to accomplish 1. it will be necessary to make the bookmark page renderer a proper getter function, and one that never caches the contents of the buffer. Actually, I might have to think about that a bit more. I don't know how to answer the question of what the best thing to do with node parent links when using a cached node in place of a new node. (Maybe I always update node.parent unless parent is already an ancestor of node?) ** CLOSED Support character encoding diversity ** CLOSED Make URLs the basic address type. Currently I waste a lot of effort converting between URL and non-URL representations. This is unnecessary, and actually makes lots of things uglier. For example, the bookmarks file contains addresses in Elpher's internal representation, whereas I expect users would prefer it contain URLs. So the idea would be for (elpher-node-address node) to be a either a string or a symbol, with symbols used for "special" pages (bookmarks, start page, etc). The getter functions `elpher-address-selector' etc will still do what they currently do, but will process the URL to do it. This also means that non-gopher URLs will be explicitly represented as such: no more abusing the "h" type for these. * Closed issues ** CLOSED Org mode faces are not present in recent emacs versions Even 26.1 doesn't seem to have these. This means that, for many users, elpher doesn't show any difference between any of the item types. Not a major problem at all, but the faces we inherit from should definitely be ones which have been present for much longer. Perhaps the font lock mode faces are the way to go after all. Update: changed all default faces to inherit from font-lock and basic faces. ** CLOSED URL-centric addressing breaks bookmark file compatibility Need a way to allow people to rescue their old bookmark files following this update. ** CLOSED History loops <2019-11-08 Fri> Occasionally elpher gets stuck in a "history loop" where a node is its own grandparent. Obviously this sucks, as history is elpher's main mechanism for making gopherspace exploration painless. I suspect the problem is in either ~elpher-visit-node~ or ~elpher-visit-parent~. Follow-up: this has been fixed by the new stack-based history system in 2.5.