This weekend, I finnaly did something that I should have done long ago: | |
I implemented text search for my gopher- and gemini-client ncgopher [1]. | |
I've had this on my TODO list for ages, but in my head it was not so | |
easy to implement. Turned out that I was totally wrong, and that it only | |
took a couple of hours. Most of the time, I spent scratching my head | |
over some Rust compiler errors. It's been a while that I've been written | |
any Rust code... | |
My aim was to provide a vim-like search where you just type '/' followed | |
by your search query. So pressing '/' switches the status line at the | |
bottom of the screen into an input field. You can type your search | |
term. If you delete the term or press ESC, the input field will close | |
and vanish. To trigger a search you press enter. (No incremental search | |
for now, but that would be trivial to implement, just call the search | |
function on every update). | |
Once the search is executed, all occurrences of the search term will be | |
highlighted and the current row is moved to the first occurrence of the | |
search term. If no occurrences are below the current position, the first | |
occurrence in the document will be highlighted instead (wrapping). If | |
the search term is not found nothing happens (Should probably show a | |
message). | |
For navigation between search result I settled for the vim-keys n (goto | |
next result) and N (goto previous result). It would also be easy to add | |
backward search, but the '?'-shortcut is already taken for the help | |
function. The 'n' key was originally used for jump-to-next-link (and | |
'p' for the opposite). I changed these to 'l' and 'L'. | |
There are several ways to improve this search function: | |
- Incremental search, maybe configurable. | |
- Backward search. | |
- Case-insensitive search | |
- Highlighting of search terms is not optimal, because it's invisible | |
on the currently selected line. | |
- Search term history. Press '/' and arrow up to see previous search | |
terms. | |
The new editfield opens a lot of doors. Vim-like commands are possible | |
now, like ':help'. Maybe ':bn' and ':bp' for switching between buffers | |
("tabs") would be cool. | |
[1] http://github.com/jansc/ncgopher | |
Back | |
______________________________________________________________________________ | |
Gophered by Gophernicus/3.0.1 on FreeBSD/arm64 14.2 |