[mouse] move scrollbar on double click and handle mouse in spectro

pull/1265/head
Tim Stack 1 month ago
parent 45d8e27ae4
commit e805ca8a8a

@ -1,27 +1,6 @@
## lnav v0.12.2 ## lnav v0.12.2
Features: Features:
* Added a `journald://` URL handler that will call `journalctl`
and pass any query parameters as options. For example, the
following command:
```
$ lnav 'journal://?since=yesterday'
```
Will execute the following and capture the output:
```
journalctl --output=json -f --since=yesterday
```
* Added the "last-word" line-format field shortening algorithm
from @flicus.
* Added a `stats.hist` PRQL transform that produces a histogram
of values over time.
* The preview for the `:open` command will now show a listing
of archive contents.
* Added `humanize_id` SQL function that colorizes a string using
ANSI escape codes.
* Added mouse support that can be toggled with `F2` or enabled * Added mouse support that can be toggled with `F2` or enabled
by default with: `:config /ui/mouse/mode enabled`. With by default with: `:config /ui/mouse/mode enabled`. With
mouse support enabled, many of the UI elements will respond to mouse support enabled, many of the UI elements will respond to
@ -30,12 +9,29 @@ Features:
row and dragging will scroll the view as needed; row and dragging will scroll the view as needed;
- shift + clicking/dragging in the main view will highlight - shift + clicking/dragging in the main view will highlight
lines and then toggle their bookmark status on release; lines and then toggle their bookmark status on release;
- double-clicking will select the underlying token and - double-clicking in the main view will select the underlying
drag-selecting within a line will select the given text; text and drag-selecting within a line will select the given
text;
- when double-clicking text: if the mouse pointer is inside
a quoted string, the contents of the string will be selected;
if the mouse pointer is on the quote, the quote will be included
in the selection; if the mouse pointer is over a bracket
(e.g. [],{},()) where the matching bracket is on the same line,
the selection will span from one bracket to the other;
- when text is selected, a menu will pop up that can be used - when text is selected, a menu will pop up that can be used
to filter based on the current text, search for it, or copy to filter based on the current text, search for it, or copy
it to the clipboard; it to the clipboard;
- clicking in the scroll area will move the view by a page and - right-clicking the start of a log message in the main view
will open the parser details overlay;
- the parser details now displays a diamond next to fields to
indicate whether they are shown/hidden and this can be
clicked to toggle the state;
- the parser details will show a bar chart icon for fields with
values which, when clicked, will open either the spectrogram
view for the given field or open the DB query prompt with a
PRQL query to generate a histogram of the field values;
- clicking in the scroll area will move the view by a page,
double-clicking will move the view to that area, and
dragging the scrollbar will move the view to the given spot; dragging the scrollbar will move the view to the given spot;
- clicking on the breadcrumb bar will select a crumb and - clicking on the breadcrumb bar will select a crumb and
selecting a possibility from the popup will move to that selecting a possibility from the popup will move to that
@ -47,8 +43,32 @@ Features:
will open the selected panel and clicking parts of the will open the selected panel and clicking parts of the
display in there will perform the relevant action (e.g. display in there will perform the relevant action (e.g.
clicking the diamond will enable/disable the file/filter); clicking the diamond will enable/disable the file/filter);
- clicking in a prompt will move the cursor to the location. - clicking in a prompt will move the cursor to the location;
This is new work, so there are likely to be some glitches. - clicking on a column in the spectrogram view will select it.
(Note that this is new work, so there are likely to be some
glitches.)
* Added a `journald://` URL handler that will call `journalctl`
and pass any query parameters as options. For example, the
following command:
```
$ lnav 'journal://?since=yesterday'
```
Will execute the following and capture the output:
```
journalctl --output=json -f --since=yesterday
```
* Added the "last-word" line-format field shortening algorithm
from @flicus.
* Added a `stats.hist` PRQL transform that produces a histogram
of values over time.
* The preview for the `:open` command will now show a listing
of archive contents.
* Added `humanize_id` SQL function that colorizes a string using
ANSI escape codes.
* Added a `selected_text` column to the `lnav_views` table that * Added a `selected_text` column to the `lnav_views` table that
reports information about text that was selected with a mouse. reports information about text that was selected with a mouse.
This makes it possible to script operations that use the This makes it possible to script operations that use the

@ -428,26 +428,42 @@ elements will respond to mouse inputs:
* clicking on the main view will move the cursor to the given * clicking on the main view will move the cursor to the given
row and dragging will scroll the view as needed; row and dragging will scroll the view as needed;
* shift + clicking/dragging in the main view will highlight * double-clicking in the main view will select the underlying
lines and then toggle their bookmark status on release; text and drag-selecting within a line will select the given
* double-clicking will select the underlying token and text;
drag-selecting within a line will select the given text; * when double-clicking text: if the mouse pointer is inside
a quoted string, the contents of the string will be selected;
if the mouse pointer is on the quote, the quote will be included
in the selection; if the mouse pointer is over a bracket
(e.g. [],{},()) where the matching bracket is on the same line,
the selection will span from one bracket to the other;
* when text is selected, a menu will pop up that can be used * when text is selected, a menu will pop up that can be used
to filter based on the current text, search for it, or copy to filter based on the current text, search for it, or copy
it to the clipboard; it to the clipboard;
* clicking in the scroll area will move the view by a page and * right-clicking the start of a log message in the main view
will open the parser details overlay;
* the parser details now displays a diamond next to fields to
indicate whether they are shown/hidden and this can be
clicked to toggle the state;
* the parser details will show a bar chart icon for fields with
values which, when clicked, will open either the spectrogram
view for the given field or open the DB query prompt with a
PRQL query to generate a histogram of the field values;
* clicking in the scroll area will move the view by a page,
double-clicking will move the view to that area, and
dragging the scrollbar will move the view to the given spot; dragging the scrollbar will move the view to the given spot;
* clicking on the breadcrumb bar will select a crumb and * clicking on the breadcrumb bar will select a crumb and
selecting a possibility from the popup will move to that selecting a possibility from the popup will move to that
location in the view; location in the view;
* clicking on portions of the bottom status bar will trigger * clicking on portions of the bottom status bar will trigger
a relevant action (e.g. clicking the line number will open a relevant action (e.g. clicking the line number will open
the command prompt with `:goto <current-line>`); the command prompt with :code:`:goto <current-line>`);
* clicking on the configuration panel tabs (i.e. Files/Filters) * clicking on the configuration panel tabs (i.e. Files/Filters)
will open the selected panel and clicking parts of the will open the selected panel and clicking parts of the
display in there will perform the relevant action (e.g. display in there will perform the relevant action (e.g.
clicking the diamond will enable/disable the file/filter); clicking the diamond will enable/disable the file/filter);
* clicking in a prompt will move the cursor to the location. * clicking in a prompt will move the cursor to the location;
* clicking on a column in the spectrogram view will select it.
.. note:: .. note::

@ -849,6 +849,16 @@ listview_curses::handle_mouse(mouse_event& me)
return false; return false;
} }
if (me.is_double_click_in(mouse_button_t::BUTTON_LEFT,
line_range{(int) width - 2, (int) width}))
{
auto pct = (double) inner_height / (double) height;
auto new_top = (int) floor(((double) me.me_y * pct) + 0.5);
this->set_top(vis_line_t(new_top), true);
this->lv_mouse_mode = lv_mode_t::NONE;
return true;
}
switch (this->lv_mouse_mode) { switch (this->lv_mouse_mode) {
case lv_mode_t::NONE: { case lv_mode_t::NONE: {
if (me.me_x < (int) (width - 2)) { if (me.me_x < (int) (width - 2)) {

@ -177,6 +177,35 @@ spectrogram_source::list_input_handle_key(listview_curses& lv, int ch)
} }
} }
bool
spectrogram_source::text_handle_mouse(
textview_curses& tc,
const listview_curses::display_line_content_t&,
mouse_event& me)
{
auto sel = tc.get_selection();
const auto& s_row = this->load_row(tc, sel);
for (int lpc = 0; lpc <= (int) s_row.sr_width; lpc++) {
int col_value = s_row.sr_values[lpc].rb_counter;
if (col_value == 0) {
continue;
}
auto lr = line_range{lpc, lpc + 1};
if (me.is_click_in(mouse_button_t::BUTTON_LEFT, lr)) {
this->ss_cursor_column = lr.lr_start;
this->ss_details_source.reset();
tc.reload_data();
return true;
}
}
return false;
}
void void
spectrogram_source::list_value_for_overlay(const listview_curses& lv, spectrogram_source::list_value_for_overlay(const listview_curses& lv,
vis_line_t row, vis_line_t row,

@ -117,7 +117,8 @@ class spectrogram_source
: public text_sub_source : public text_sub_source
, public text_time_translator , public text_time_translator
, public list_overlay_source , public list_overlay_source
, public list_input_delegate { , public list_input_delegate
, public text_delegate {
public: public:
~spectrogram_source() override = default; ~spectrogram_source() override = default;
@ -130,6 +131,10 @@ public:
bool list_input_handle_key(listview_curses& lv, int ch) override; bool list_input_handle_key(listview_curses& lv, int ch) override;
bool text_handle_mouse(textview_curses& tc,
const listview_curses::display_line_content_t&,
mouse_event& me) override;
bool list_static_overlay(const listview_curses& lv, bool list_static_overlay(const listview_curses& lv,
int y, int y,
int bottom, int bottom,

Loading…
Cancel
Save