This page is about open issues in design and implementation.
There are a bunch of possible "current" items on the screen in a combined log view:
We have to pick how to assign commands to navigate these, and how to visually designate them, without the view getting cluttered.
The central concept in the combined view interface is that the screen is a "sliding window" view on a long piece of text; this text is the interleaved (in order of timestamp) list of items (aka log entries) of all log units in that view. We also have a "current item", which must be somewhere in that sliding window: if the user issues commands to slide the window so it would no longer contain the current item, the UI changes the current item to one that is contained; and if the user tells to UI to jump to a new current item outside the sliding window, the UI will slide it over to show the new current item. On the screen, we have visual distinction between the (label of the) current item and the other items. This is a simple principle, but has some edge cases:
To deal with items that do not fit on a single row, the UI actually uses a "current line" (meaning row) cursor. Problems with this are:
The wrapping of a single logical line over multiple screen rows is influenced by display settings (label format, unprintable character expansion, folding) and external factors (screen width: may change during window resize). For this reason, we express a "location" value as an offset (in bytes or characters) into a specific log item, which is independent of the rendering on the screen. A "mark" (in the sense used in less(1) and vi*(1)) is basically a named variable containing a location value; a search pattern match is a pair of locations, of the first and and last matching character.
Issues in the current implementation.
We have a problem with C++ regex support. I'm currently compiling this on a Mint Rebecca (17.1) system, which by default uses GCC 4.8.2, in which the libc regex implementation is broken (partial implementation, as per its documentation apparently). This means I have to fall back to something else. For file format detection and scanning item headers, I decided to fall back to old C regex, which unfortunately requires null-byte terminated strings, meaning I cannot use memmap'ed input files, and other restrictions. For the log search feature I'm falling back to plain string matching in the initial version.
Tracking a growing file has some issues:
We have similar issues if logrotate(1) decides to rename or compress files while we are viewing them.