Updating briefly from work. I have made a similar update over at
circumlunar space... but I think I may start writing here more
about my software projects and more over there about my personal
life.
I have been working on a new gopher client. Well, that is what
the end result will be anyway. Really, I am working on learning
the following: terminal user interfaces, lexing, parsing, and
golang.
Here is the current status:
Project temporary name: Badger (to be revised)
Language: Go
Socket/TCP:
The application can make a request to a url or an IP address
and return the response to a history struct that holds all
of the recent requests, allowing for very quick moving back
and forth through history (actual content reload has to be
forced via hotkey).
Terminal UI:
The application is a full screen tterminal application with
paging similar to less (vim keys scroll up and down). There
is top bar with the application name and the address that is
being viewed in the main window. A bookmarks window can be
toggled on and off. Command entry is in the bottom left of
the screen similar to vim and also utilizing the ':' key to
initiate command entry. Error messages appear below command
entry and flash messages (such as "Loading...") appear in
the bottom right. On terminal resize the text will look very
messed up in most situations, but pressing any key will re-
wrap the whole screen and right the situation.
Lexing/Parsing:
Currently the lexer knows a few different actions and 4
varieties of entry formats for those commands (well, the
parser knows the later). This allows for commands to be
entered in order to control your experience with the client.
Commands such as `:add colorfield.space CSPC` will add
colorfield.space as a bookmark with the title CSPC, for
example. As will be discussed in the to-do section, an
additional lexer will need to be made for the config file
and a parser for it as well.
To-Do (not in order of necessity):
1. Fix the window draw functions to allow for better over-
lapping without issues.
2. Write a lexer/parser for configs and build functions to
read in the config settings an apply them, with applic-
able defaults built into the core system. These settings
will also be changeable from within the program via the
`:set this that` command.
3. Add the ability to add theme templates for 256 color
terminals. Have a base theme already set up out of the
box.
4. Finish support for all commands (file write is a big
one).