rofi-dmenu(5)

✨ rofi-dmenu(5) ✨

okay so bestie, welcome to the File Formats Manual page for rofi-dmenu β€” this is the whole entire guide to rofi's dmenu emulation mode, and I promise it's gonna slay πŸ’…


πŸ’– NAME πŸ’–

rofi dmenu mode β€” rofi dmenu emulation, aka the moment rofi puts on its dmenu costume and honestly? It eats. πŸŽ€


πŸ¦‹ DESCRIPTION πŸ¦‹

So here's the vibe: if you want to drop rofi into your scripts as a simple selection dialog, rofi has your back β€” it literally supports emulating dmenu(1) (which, for the record, is A dynamic menu for X11). Iconic of it. ✨

The website for dmenu can be found here (http://tools.suckless.org/dmenu/) β€” go look, iykyk.

Now, real talk: rofi does not aim to be 100% compatible with dmenu. There are simply too many flavors of dmenu, like… there's a whole buffet of them 😭. The idea is that the basic usage command-line flags are obeyed, and theme-related flags are not. Besides that, rofi offers some extended features β€” think multi-select, highlighting, message bar, extra key bindings. main character energy fr fr πŸ‘‘


🌸 BASIC CONCEPT 🌸

In dmenu mode, rofi reads data from standard in, splits them into separate entries, and displays them. Then if the user selects a row, that row is printed out to standard out β€” which lets your script process it further. Chef's kiss. 🫢

By default, separation of rows is done on new lines, making it super easy to pipe the output of one application into rofi and the output of rofi into the next. A little pipeline romance, honestly. πŸ’–


🧚 USAGE 🧚

Launch rofi with the -dmenu flag and boom β€” it goes into dmenu emulation mode. That's it, that's the trick:

ls | rofi -dmenu

πŸŽ€ DMENU DROP-IN REPLACEMENT πŸŽ€

If argv[0] (aka the calling command) is dmenu, rofi will start in dmenu mode. So you can genuinely use it as a drop-in replacement for dmenu β€” just copy or symlink rofi to dmenu in $PATH. Sneaky, brilliant, obsessed. πŸ’…

ln -s /usr/bin/rofi /usr/bin/dmenu

🌈 DMENU VS SCRIPT MODE 🌈

Okay so don't confuse these two, bestie: script mode is used to extend rofi, and dmenu mode is used to extend a script. They actually do share much of the same input format. Please see the rofi-script(5) manpage for more info. πŸ“–

⭐ DMENU SPECIFIC COMMANDLINE FLAGS ⭐

A lot of these options can also be modified by the script using special input β€” check the rofi-script(5) manpage for more about that syntax. But here's the full rundown, no skips, no skimps πŸ”₯

  • -sep separator β€” Separator for dmenu. Example: to show a list of a to e with | as a separator:
echo "a|b|c|d|e" | rofi -sep '|' -dmenu
  • -p prompt β€” Specify the prompt to show in dmenu mode. For example, select monkey, a,b,c,d, or e.
echo "a|b|c|d|e" | rofi -sep '|' -dmenu -p "monkey"

Default: dmenu

  • -l number of lines to show β€” Maximum number of lines the menu may show before scrolling. So yeah, past that it's scroll city πŸŒ€
rofi -dmenu -l 25

Default: 15

  • -i β€” Makes dmenu searches case-insensitive. tiny lowercase gremlin mode, love her πŸ™ˆ
  • -a X β€” Active row, mark X as active. Where X is a comma-separated list of python(1)-style indices and ranges, e.g. indices start at 0, -1 refers to the last row with -2 preceding it, ranges are left-open and right-close, and so on. You can specify:
    • A single row: 5
    • A range of (last 3) rows: -3:
    • 4 rows starting from row 7: 7:11 (or in legacy notation: 7-10)
    • A set of rows: 2,0,-9
    • Or any combination: 5,-3:,7:11,2,0,-9
  • -u X β€” Urgent row, mark X as urgent. See -a option for details. 🚨
  • -only-match β€” Only return a selected item, do not allow custom entry. This mode always returns an entry. It will not return if no matching entry is selected. No vibes-based freeform typing here, sorry πŸ’€
  • -no-custom β€” Only return a selected item, do not allow custom entry. This mode returns directly when no entries given.
  • -format format β€” Allows the output of dmenu to be customized (N is the total number of input entries):
    • s selected string
    • i index (0 - (N-1))
    • d index (1 - N)
    • q quote string
    • p Selected string stripped from Pango markup (Needs to be a valid string)
    • f filter string (user input)
    • F quoted filter string (user input)

Default: s

  • -select string β€” Select first line that matches the given string. first come, first served bestie ✨
  • -mesg string β€” Add a message line below the filter entry box. Supports Pango markup. For more information on supported markup, see here (https://docs.gtk.org/Pango/pango_markup.html)
  • -dump β€” Dump the filtered list to stdout and quit. This can be used to get the list as rofi would filter it. Use together with -filter command. little peek behind the curtain 🫣
  • -input file β€” Reads from file instead of stdin.
  • -password β€” Hide the input text. > okay but seriously β€” this should not be considered secure! Do not trust it with your secrets, bestie, i'm begging 😭
  • -markup-rows β€” Tell rofi that DMenu input is Pango markup encoded, and should be rendered. See here (https://docs.gtk.org/Pango/pango_markup.html) for details about Pango markup.
  • -multi-select β€” Allow multiple lines to be selected. Adds a small selection indicator to the left of each entry. go off, select five things at once πŸ‘‘
  • -sync β€” Force rofi mode to first read all data from stdin before showing the selection window. This is original dmenu behavior.
Note: the default asynchronous mode will also be automatically disabled if used with conflicting options, such as -dump, -only-match or -auto-select.
  • -window-title title β€” Set name used for the window title. Will be shown as Rofi - title
  • -w windowid β€” Position rofi over the window with the given X11 window ID.
  • -keep-right β€” Set ellipsize mode to start. So, the end of the string is visible. show me the end of the sentence, i need closure 😀
  • -display-columns β€” A comma seperated list of columns to show.
  • -display-column-separator β€” The column separator. This is a regex.

default: ’

  • -ballot-selected-str string β€” When multi-select is enabled, prefix this string when element is selected.

default: β€œβ˜‘β€

  • -ballot-unselected-str string β€” When multi-select is enabled, prefix this string when element is not selected.

default: β€œβ˜β€

  • -ellipsize-mode (start|middle|end) β€” Set ellipsize mode on the listview.

default β€œend”


πŸ“ PARSING ROW OPTIONS πŸ“

Extra options for individual rows can be also set! See the rofi-script(5) manpage for details β€” the syntax and supported features are identical. same energy, different page πŸ’œ


πŸ’€ RETURN VALUE πŸ’€

  • 0: Row has been selected accepted by user. πŸŽ‰
  • 1: User cancelled the selection. πŸ’”
  • 10-28: Row accepted by custom keybinding. ⌨️

🌟 SEE ALSO 🌟

rofi(1), rofi-sensible-terminal(1), dmenu(1), rofi-theme(5), rofi-script(5), rofi-theme-selector(1), ascii(7) β€” go read them all, or at least the ones you need, no pressure bestie πŸ¦‹


πŸ‘‘ AUTHOR πŸ‘‘

  • Qball Cow <qball@gmpclient.org>
  • Rasmus Steinke <rasi@xssn.at>
  • Morgane Glidic <sardemff7+rofi@sardemff7.net>
  • Original code based on work by: Sean Pringle <sean.pringle@gmail.com>

For a full list of authors, check the AUTHORS file. πŸ“œ


and that's the whole page, bestie!! this gorgeous thing ships as part of rofi, manual page rofi-dmenu(5) β€” that's the source and the page name all wrapped up in a bow πŸŽ€ mwah, go pipe something into a menu πŸ’–βœ¨

πŸ“¦ where this page comes from