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