1
0
Fork 0
mirror of https://github.com/Cloudef/bemenu synced 2024-05-11 18:16:18 +02:00
Commit Graph

526 Commits

Author SHA1 Message Date
Leonardo Eugênio 1f0a47b359
Fix Makefile to support submodule setups (#329) 2023-02-18 18:33:20 +09:00
Lucas Merritt d9ac320dd0
Add fixed height option(Addresses #270) (#326)
* added fixed height option && fixed counter
2023-02-18 18:30:55 +09:00
Daniel 8644540fa4
docs: add missing options (#331)
* docs: add missing options

* docs: use tabs
2023-02-18 18:30:03 +09:00
Lucas Merritt 77000a680c
Add Match/Page Counter(Addresses #204) (#325)
* counter with total item count

* filtered item counter

* optimized display code

* refactored overcomplicated code

* fixed warnings that failed Ubuntu test

* fixed inconsistent state

* CLI option for counter

* fixed vertical mode counter
2022-12-27 17:13:59 +09:00
Lucas Merritt a1374d487e fixed minor issues 2022-12-21 14:10:08 +09:00
Lucas Merritt 30379a88bf somewhat working, maybe fix background colors 2022-12-21 14:10:08 +09:00
Jari Vetoniemi 809c58866b bump version to 0.6.14 2022-12-16 09:15:13 +09:00
Robert Günzler 0a44fb65cd Apply initial filter before evaluating accept-single
This lets us select fully non-interactive if we have a perfect match

Signed-off-by: Robert Günzler <r@gnzler.io>
2022-12-16 09:13:19 +09:00
Robert Günzler 516a2ab069 common: actually parse -F using getopt
Signed-off-by: Robert Günzler <r@gnzler.io>
2022-12-16 09:13:19 +09:00
Robert Günzler 778617e7c9 wayland: don't chomp dirty state when window is pending
Running `printf "foo\nbar\n" | bemenu --filter foo` no results would
show up until something set the dirty state (like interacting with the
keyboard, e.g. deleting a character).

This would only happen on wayland, due to the render implementation not
considering the dirty state when the window was not yet created and then
just overwriting `menu->dirty` with `false`.

Signed-off-by: Robert Günzler <r@gnzler.io>
2022-12-16 09:13:19 +09:00
Quint Guvernator a295e24146 improve exit code docs 2022-11-21 23:58:29 +09:00
Jochen Sprickerhof b132d018a5 Make pkg-config configurable
Needed for crossbuilds.
2022-10-29 07:06:21 +09:00
Luca Nimmrichter 0c2bc885a1 Replace `char *key_binding` with an enum 2022-10-21 03:17:29 +09:00
Luca Nimmrichter a8c89c41a7 Fix remaining crashes 2022-10-21 03:17:29 +09:00
Luca Nimmrichter 75afebeb4b Remove debug logs 2022-10-21 03:17:29 +09:00
Luca Nimmrichter 4d00e04eaa Update README with vim keybindings 2022-10-21 03:17:29 +09:00
Luca Nimmrichter 197936e697 Add new bindings
H/M/L to goto first/mid/last item in view
X to delete character before the cursor
v to toggle item selection

Change goto first item from g to gg
2022-10-21 03:17:29 +09:00
Luca Nimmrichter 17481427a0 Replace --vim option with a generic --binding [name] option 2022-10-21 03:17:29 +09:00
Luca Nimmrichter dc24d795bb Fix escape close bemenu in vim normal mode 2022-10-21 03:17:29 +09:00
Luca Nimmrichter bcf53bcb25 Add basic vim bindings 2022-10-21 03:17:29 +09:00
Jari Vetoniemi e8e9957719 bump version to 0.6.13 2022-10-11 14:49:11 +09:00
Jari Vetoniemi d5121dedad nix: use pname and add generated version 2022-10-11 14:48:52 +09:00
dadav d235dc38f7 Add support to disable pointer, touch and keyboard events
Sometimes you don't want the pointer/touch/keyboard to have any
influence on the menu (e.g. if you mainly use the keyboard, you don't
want the mouse to select an item by accident).

closes #299
2022-10-11 10:05:40 +09:00
Jari Vetoniemi 761c98d830 bump version to 0.6.12 2022-10-09 14:10:30 +09:00
Stacy Harper 3039ee97db fix dangling pointer state on wayland
With this new version, the pointer click doesnt select the highlighted
element.

To fix the issue we initialize correctly the bm_pointer struct.

We also stop trying to use our pointer enums as bitflags with |=
2022-10-09 14:09:25 +09:00
Jari Vetoniemi e5adf187b0 bump version to 0.6.11 2022-10-07 13:56:13 +09:00
Jari Vetoniemi abc46a9a62 Add darwin.nix and build instructions 2022-10-07 13:55:16 +09:00
RayAlto 9f46da3bb5 Document feedback color argument in man page as well 2022-10-04 15:36:53 +09:00
Richard Kraus 22c7e3fd23 add --accept-single flag 2022-09-27 20:06:12 +09:00
Richard Kraus c6bb62389c fix accidentally inserted tabs 2022-09-27 20:06:12 +09:00
Richard Kraus 24015ef32e change functionality of --ifne
a single item will not display the menu
2022-09-27 20:06:12 +09:00
Richard Kraus 7da8796291 fix ignored --monitor in BEMENU_OPTS env var 2022-09-18 10:14:11 +09:00
Alexander Orzechowski 1ef789fea6 wayland: Bump compositor version to fix compatibility with wl_surface_damage_buffer 2022-09-09 12:49:05 +09:00
Alexander Orzechowski f2c88017f7 wayland: Damage using buffer coordinates
The surface was being damaged based on the buffer size. It's more correct to damage using the buffer coordinates.
2022-09-07 13:35:30 +09:00
Joan Bruguera 8217ae024b Fix exiting when an unexpected Wayland error occurs.
If an unexpected error was returned from a Wayland API during rendering (e.g.
from wl_display_flush), the code did set input.sym = XKB_KEY_Escape, so that
the next call to poll_key would return BM_KEY_ESCAPE and bemenu would quit.

However, this has been broken since #135, because input.key_pending was not
set, so the "fake" XKB_KEY_Escape is just ignored, bemenu doesn't quit, but
instead, it enters an infinite loop and keeps a CPU core at 100% usage.

The "quick fix" would be to just set input.key_pending wherever input.sym was
set to XKB_KEY_Escape. However, to make error handling less error-prone,
decouple it from input handling and add an error flag to (bm_menu_)render.
2022-08-03 08:55:34 +09:00
Daniel Lublin ac30236ff7 Document alternating color argument in man page as well 2022-07-18 14:31:41 +09:00
Stacy Harper 3fc0f8a7b7 Revert "Fix pointer enter event without further motion"
This reverts commit ef1055ecce.
2022-07-11 12:14:02 +09:00
Stacy Harper 14e11e8a35 Trigger pointer selection on button release instead
This allow successive bemenu to not register the same PRESSED
successive events.
2022-07-08 18:59:20 +09:00
Jari Vetoniemi e128c21ebb bump version to 0.6.10 2022-07-06 17:11:27 +09:00
Daniel Lublin 4c6592ac60 Don't alternate colors by default (let ALTERNATE color be same as ITEM) 2022-07-06 17:10:36 +09:00
Daniel Lublin c04a3c7220 Add options to set cursor bg/fg color 2022-07-05 10:10:26 +09:00
Jari Vetoniemi bd97e05138 bump version to 0.6.9 2022-07-05 10:07:58 +09:00
Joan Bruguera ef1055ecce Fix pointer enter event without further motion
If the pointer suddenly enters a window but moves no further, we may only get
a POINTER_EVENT_ENTER but no further POINTER_EVENT_MOTION events, so we also
need to handle this event to properly update the selected item.

The issue can be reproduced by moving the mouse programatically, e.g. on Sway:
    swaymsg seat - cursor set 200 200
2022-07-05 10:06:57 +09:00
Joan Bruguera 04b0d83d56 Fix Wayland event loop order to avoid missed renders
After the changes of the previous commit, the event loop flow on Wayland is:
    1. Render windows if window->render_pending is set
    2. Wait for events [NOTE: this includes the frame callback]
    3. Schedule render if menu->dirty is set
    4. Handle events (return from render) and repeat

This can still miss renders since the menu->dirty flag is set in step (4),
but the menu->dirty flag is checked in step (3). So if the event loop only
does a single iteration (quite unusual as most user actions cause multiple
events), we can get stuck on step (2) for a while.

In order to avoid this problem, this changes the event loop order to:
    1. Schedule render if menu->dirty is set
    2. Wait for events [NOTE: this includes the frame callback]
    3. Render windows if window->render_pending is set
    4. Handle events (return from render) and repeat

Script (for Sway) to reproduce the issue / verify the fix:
    #!/usr/bin/env sh
    mousesety() { swaymsg seat - cursor set 200 "$1" >/dev/null; sleep 0.2; }
    { while true; do mousesety 200; mousesety 300; mousesety 400; done } &
    trap 'kill $!' EXIT
    export BEMENU_BACKEND=wayland BEMENU_OPTS='--list 40 --hb #0000FF'
    yes | head -30 | bemenu

Fixes: #274
Fixes: #275
2022-07-05 10:06:57 +09:00
Jari Vetoniemi 7d2c189865 bump version to 0.6.8 2022-06-30 09:41:18 +09:00
Joan Bruguera c7a5812352 Fix missed renders on Wayland on temporally close events
Despite the fix in the previous commit (3d7e47c4e6), the following command:
    { echo one; echo two; } | BEMENU_BACKEND=wayland bemenu --grab
Will likely still show the 'Loading...' text after all items are available.

A related problem (also on Wayland) is that when pressing two keys (for the
filter) almost simultaneously, sometimes only one of the keys will be rendered.
The other key will only be shown on the next render. For example:
    - Filter shows "s"
    - User presses the "o" and "n" keys simultaneously
    - Filter shows "so" ["n" appears to have been lost]
    - User presses the "g" key
    - Filter shows "song" [now the "n" has been rendered]

Both problems have the same root cause: If two events that cause a render happen
"close enough" to each other, often the second event will not cause a render.

As far as I can tell, the cause is that the "dirty && render_pending" render
check should not check the dirty flag at all, just "render_pending".

With "dirty && render_pending", if two events happen in close succession:
- On the first event, generally dirty==true, render_pending==true, a render
  will happen, the frame callback will be set, and both flags will be cleared.
- For the second event, generally dirty==true and render_pending==false.
  dirty will be unset and nothing will happen.
- When the frame triggers, render_pending is set, but no render will happen
  because dirty==false

With just "render_pending" (the change in this commit):
- On the first event, generally dirty==true, render_pending==false, the frame
  callback will be set, and dirty will be cleared.
- For the second event, generally dirty==true and render_pending==false.
  dirty will be unset and nothing will happen.
- When the frame triggers, render_pending is set, then a render will be done.
2022-06-30 09:40:08 +09:00
Joan Bruguera 6e74133876 Fix first render on Wayland after loading items with --grab
Currently, on the Wayland backend, the following command:
    { echo one; sleep 1; echo two; } | BEMENU_BACKEND=wayland bemenu --grab
Will keep showing the 'Loading...' text even after all items are available.
The items will only be shown after some input, e.g. a key press, happens.

This was a regression introduced by 5a095705d2
(versions 0.6.5+). A dirty flag was added to avoid unnecessary redraws,
however, this flag is not reset between the renders before/after the items are
loaded, so the bm_menu_render call after the items are loaded is ignored
(on Wayland, which is the only renderer that currently uses the dirty flag).

Fix the issue by setting the dirty flag when the filter changes, so it will be
reset when changing from "Loading..." to empty and cause a redraw.
2022-06-30 09:40:08 +09:00
Barbaross 8c1c29c0b9 Add option to define a border and border color 2022-06-29 15:13:09 +09:00
Barbaross 84bccc02a0 Add option to specify horizontal padding in single line mode 2022-06-03 09:20:10 +09:00
Barbaross a8ef2457cb Add option to specify alternating entry background/foreground colors 2022-06-03 08:08:38 +09:00