Updated dev notes.
[elpher.git] / NOTES.org
1 #+TITLE: Development notes/ideas
2
3 * Planned improvements
4
5 ** TODO Allow multiple elpher buffers
6
7    Shouldn't be too hard, just need elpher-current-node to be
8 buffer-local and allow various buffer-switching procedures to
9 do something sensible.
10    
11 ** TODO Remove "redraw" command
12 This is only necessary for returning from displaying the raw
13 server response.  If I can provide a better way of doing that
14 then we can get rid of redraw entirely.
15
16 ** TODO Replace support for user-specified starting pages
17 This used to be available, but was removed during a refactor.
18
19 ** TODO Allow for grouping of bookmarks
20 To support this I'd like to add a bookmark page specific
21 set of keybindings.  Currently all bindings available on
22 the bookmark page are available everywhere else.  But
23 expanding and collapsing bookmark groups sounds like it
24 might need more specific bindings.
25
26 ** IN-PROGRESS Implement Gemini support [88%]
27    
28 Here is the checklist of features required before release:
29 - [X] basic genimi transactions
30 - [ ] gemini transactions requiring client certificates
31 - [X] gemini input handling
32 - [X] gemini map files (text/gemini)
33 - [X] Support for plain text responses (text/*)
34 - [X] Support for image responses (text/image)
35 - [X] Support for mime-specified character encodeing
36 - [X] Saving responses to disk
37 - [X] Viewing raw responses
38   
39 The last few will be made infinitely easier if we factor the
40 gopher "getter" code differently.
41
42 * Current issues
43   
44 ** URL-centric addressing breaks bookmark file compatibility
45    
46 Need a way to allow people to rescue their old bookmark files
47 following this update.
48
49 * Completed improvements
50   
51 ** DONE Turn on lexical scoping
52
53    A branch exists for this, but there are some compilation kinks
54 to iron out.
55
56   
57 ** DONE Implement support for telnet entries
58
59 Similar to http entries, telnet entries will be handled by code
60 external to elpher. However it seems I made http entry handling a
61 special case, and I don't want another!  So the only option is to
62 bring both http and telnet entries back into the fold by representing
63 them both as standard nodes and having the grunt work done by getter
64 functions.
65
66 ** DONE Allow users to access selected and current node details.
67    
68 ** DONE Implement bookmark system
69
70   Currently the bookmark page replaces the current page, and it
71   does so silently (i.e. it doesn't become part of the link hierarchy).
72   I think this is a mistake, as it results in confusing behaviour when
73   traversing the link hierarchy after visiting one of the bookmarked links.
74
75   Instead, I think I should
76   1. Make the bookmark page part of the hierarchy, and
77   2. Reinstate the visited node hash table to avoid excess link hierarchy pollution.
78
79   In order to accomplish 1. it will be necessary to make the bookmark page renderer
80   a proper getter function, and one that never caches the contents of the buffer.
81
82   Actually, I might have to think about that a bit more.  I don't know
83   how to answer the question of what the best thing to do with node
84   parent links when using a cached node in place of a new node.  (Maybe
85   I always update node.parent unless parent is already an ancestor of
86   node?)
87
88   
89 ** DONE Support character encoding diversity
90
91 ** DONE Make URLs the basic address type.
92 Currently I waste a lot of effort converting between
93 URL and non-URL representations.  This is unnecessary, and
94 actually makes lots of things uglier.
95
96 For example, the bookmarks file contains addresses in Elpher's
97 internal representation, whereas I expect users would prefer
98 it contain URLs.
99
100 So the idea would be for (elpher-node-address node) to be
101 a either a string or a symbol, with symbols used for "special"
102 pages (bookmarks, start page, etc).  The getter functions
103 `elpher-address-selector' etc will still do what they currently
104 do, but will process the URL to do it.
105
106 This also means that non-gopher URLs will be explicitly represented
107 as such: no more abusing the "h" type for these.
108
109 * Old issues
110
111 ** DONE Org mode faces are not present in recent emacs versions
112 Even 26.1 doesn't seem to have these.  This means that, for many
113 users, elpher doesn't show any difference between any of the
114 item types.  Not a major problem at all, but the faces we inherit
115 from should definitely be ones which have been present for much
116 longer.  Perhaps the font lock mode faces are the way to go after
117 all.
118
119 Update: changed all default faces to inherit from font-lock and basic faces.