.\" Automatically generated by Pandoc 2.11.1 .\" .TH "JGMENU" "1" "2 January, 2021" "" "" .hy .SH NAME .PP jgmenu - A simple X11 menu .SH SYNOPSIS .PP jgmenu\ [--no-spawn]\ [--checkout=<\f[I]tag\f[R]>]\ [--config-file=<\f[I]file\f[R]>] .PD 0 .P .PD \ \ \ \ \ \ \ [--icon-size=<\f[I]size\f[R]>] [--at-pointer] [--hide-on-startup] .PD 0 .P .PD \ \ \ \ \ \ \ [--simple] [--vsimple] [--csv-file=<\f[I]file\f[R]>] .PD 0 .P .PD \ \ \ \ \ \ \ [--csv-cmd=<\f[I]command\f[R]>] [--die-when-loaded] .PD 0 .P .PD \ \ \ \ \ \ \ [--center] [--persistent] .PP Use these commands to get started .TP \f[B]\f[CB]jgmenu_run\f[B]\f[R] Launch menu .TP \f[B]\f[CB]jgmenu_run init\f[B]\f[R] Create config file \[ti]/.config/jgmenu/jgmenurc .TP \f[B]\f[CB]jgmenu_run init -i\f[B]\f[R] Interactive setup .TP \f[B]\f[CB]man jgmenututorial\f[B]\f[R] Step-by-step tutorial .SH DESCRIPTION .PP \f[C]jgmenu\f[R] is a simple menu for Linux/BSD. It reads CSV menu data from a file and generates a graphical menu on an X11 window. .SS Fields .PP Each line of CSV menu data is parsed into the following fields using comma as a field separator: .IP "(1)" 4 description .PD 0 .P .PD .IP "(2)" 4 command .PD 0 .P .PD .IP "(3)" 4 icon .PD 0 .P .PD .IP "(4)" 4 working directory .PD 0 .P .PD .IP "(5)" 4 metadata .PD 0 .P .PD .IP "(6)" 4 execute without \[lq]sh -c\[rq] wrapper .PP For example: .IP .nf \f[C] printf \[dq]Terminal,xterm\[rs]\[rs]nWeb Browser,firefox\[dq] | jgmenu --vsimple \f[R] .fi .SS Special Characters at beginning of line .TP \f[B]\f[CB]#\f[B]\f[R] Ignore line .TP \f[B]\f[CB].\f[B]\f[R] A line beginning with a dot followed by a space, will source the file specified by the string following the dot .TP \f[B]\f[CB]\[at]\f[B]\f[R] Treat as widget .SS Special Characters in fields .TP \f[B]\f[CB],\f[B]\f[R] As commas are used as field separators, individual fields can only contain commas if they are triple quoted. For example: .RS .PP foo,\[dq]\[dq]\[lq]\[ha]pipe(find . -printf `%f,display %p,%p\[rs]n')\[rq]\[dq]\[dq] .RE .TP \f[B]\f[CB]< > &\f[B]\f[R] The description field is parsed as pango markup, so \f[C]<\f[R], \f[C]>\f[R], and \f[C]&\f[R] need to be escaped as \f[C]<\f[R], \f[C]>\f[R], and \f[C]&\f[R] respectively. .SS Markup .PP The syntax \[ha]foo(bar) is used to carry out action \f[C]foo\f[R] with argument \f[C]bar\f[R]. We refer to \f[C]bar\f[R] as the \f[C]inner value\f[R]. .PP The following markup is supported in the \f[C]description\f[R] field .TP \f[B]\f[CB]sep()\f[B]\f[R] Define a separator. If an inner value is provided, the separator will appear as a title. If no inner value is provided, the separator will simply be a horizontal line .PP The following markup is supported in the \f[C]command\f[R] field .TP \f[B]\f[CB]\[ha]tag()\f[B]\f[R] Define the beginning of a new menu structure node. .RS .PP The lines following \f[C]\[ha]tag(whatever)\f[R] will not show in the top level menu, but can be opened by using \f[C]\[ha]checkout()\f[R] or \f[C]\[ha]root()\f[R]. .IP .nf \f[C] item0.0 item0.1 submenu1,\[ha]checkout(1) submenu2,\[ha]root(2) \[ha]tag(1) item1.0 item1.1 \[ha]tag(2) item2.0 item2.1 \f[R] .fi .RE .TP \f[B]\f[CB]\[ha]checkout()\f[B]\f[R] Open the tag specified by the inner value as a submenu in a new window .TP \f[B]\f[CB]\[ha]root()\f[B]\f[R] Open the tag specified by the inner value in the root window, replacing the current menu .TP \f[B]\f[CB]\[ha]sub()\f[B]\f[R] Draw a submenu arrow. This can be useful for creating submenus with \f[C]stay_alive=0\f[R]. For example: .RS .IP .nf \f[C] item0.0 item0.1 submenu1,\[ha]sub(echo \[dq]item1.0\[dq] | jgmenu --simple) \f[R] .fi .RE .TP \f[B]\f[CB]\[ha]back()\f[B]\f[R] Check-out parent menu .TP \f[B]\f[CB]\[ha]term()\f[B]\f[R] Run program in terminal .TP \f[B]\f[CB]\[ha]pipe()\f[B]\f[R] Execute sub-process and checkout a menu based on its stdout. .TP \f[B]\f[CB]\[ha]filter()\f[B]\f[R] Invoke search .TP \f[B]\f[CB]\[ha]quit()\f[B]\f[R] Quit .SS Icons .PP Icons will be displayed if the third field is populated, for example: .IP .nf \f[C] Terminal,xterm,utilities-terminal Firefox,firefox,firefox \f[R] .fi .SH OPTIONS .TP \f[B]\f[CB]--no-spawn\f[B]\f[R] Redirect command to stdout rather than execute it. .TP \f[B]\f[CB]--checkout=\f[B]\f[R] Checkout submenu on startup. .TP \f[B]\f[CB]--config-file=\f[B]\f[R] Read config file. .TP \f[B]\f[CB]--icon-size=\f[B]\f[R] Specify icon size (22 by default). If set to 0, icons will not be loaded. .TP \f[B]\f[CB]--at-pointer\f[B]\f[R] Launch menu at mouse pointer. .TP \f[B]\f[CB]--hide-on-startup\f[B]\f[R] Start menu is hidden state. .TP \f[B]\f[CB]--simple\f[B]\f[R] Ignore tint2 settings; Run in short-lived mode (i.e.\ exit after mouse click or enter/escape); read menu items from \f[C]stdin\f[R]. .TP \f[B]\f[CB]--vsimple\f[B]\f[R] Same as \f[C]--simple\f[R], but also disables icons and ignores jgmenurc. .TP \f[B]\f[CB]--csv-file=\f[B]\f[R] Specify menu file (in jgmenu flavoured CSV format). If file cannot be opened, input is reverted to \f[C]stdin\f[R]. .TP \f[B]\f[CB]--csv-cmd=\f[B]\f[R] Specify command to produce menu data, for example \f[C]jgmenu_run pmenu\f[R] .TP \f[B]\f[CB]--die-when-loaded\f[B]\f[R] Open menu and then exit(0). Useful for debugging and testing. .TP \f[B]\f[CB]--center\f[B]\f[R] Center align menu horizontally and vertically. .TP \f[B]\f[CB]--persistent\f[B]\f[R] Same as the persistent config option. See config option section below for details. .SH USER INTERFACE .TP \f[B]\f[CB]Up\f[B]\f[R], \f[B]\f[CB]Down\f[B]\f[R] Select previous/next item .TP \f[B]\f[CB]Left\f[B]\f[R]. \f[B]\f[CB]Right\f[B]\f[R] Move to parent/sub menu .TP \f[B]\f[CB]PgUp\f[B]\f[R], \f[B]\f[CB]PgDn\f[B]\f[R] Scroll up/down .TP \f[B]\f[CB]Home\f[B]\f[R], \f[B]\f[CB]End\f[B]\f[R] Select first/last item .TP \f[B]\f[CB]Enter\f[B]\f[R] Select an item or open a submenu .TP \f[B]\f[CB]F5\f[B]\f[R] Restart .TP \f[B]\f[CB]F8\f[B]\f[R] Print node tree to stderr .TP \f[B]\f[CB]F9\f[B]\f[R] exit(1) .TP \f[B]\f[CB]F10\f[B]\f[R] exit(0) .TP \f[B]\f[CB]Backspace\f[B]\f[R] Return to parent menu .PP Type any string to invoke a search. Words separated by space will be searched for using \f[C]OR\f[R] logic (i.e.\ the match of either word is sufficient to display an item). .SH WIDGETS .PP Lines beginning with `\[at]' in jgmenu flavoured CSV files are parsed in accordance with the following syntax: .IP .nf \f[C] \[at]type,action,x,y,w,h,r,halign,valign,fgcol,bgcol,content \f[R] .fi .TP \f[B]\f[CB]type\f[B]\f[R] The widget type, which can be one of the following: .RS .TP \f[B]\f[CB]rect\f[B]\f[R] Rectangle with a 1px thick border drawn using \f[C]fgcol\f[R] .TP \f[B]\f[CB]search\f[B]\f[R] Search box showing the current filter (what the user has typed) or the specified \f[C]text\f[R] if no filter has been invoked. .TP \f[B]\f[CB]icon\f[B]\f[R] Icon .RE .TP \f[B]\f[CB]action\f[B]\f[R] The action to take when selected. This can either be a shell command or a menu action such \f[C]\[ha]root()\f[R]. .TP \f[B]\f[CB]x\f[B]\f[R], \f[B]\f[CB]y\f[B]\f[R] Horizontal and vertical margin of widget .TP \f[B]\f[CB]w\f[B]\f[R], \f[B]\f[CB]h\f[B]\f[R] Width and height of widget .TP \f[B]\f[CB]r\f[B]\f[R] Corner radius .TP \f[B]\f[CB]fgcol\f[B]\f[R], \f[B]\f[CB]bgcol\f[B]\f[R] Foreground and background colours using syntax \f[C]rrggbb #aa\f[R] \f[C]fgcol\f[R] accepts \f[C]auto\f[R] to use the jgmenurc\[cq]s \f[C]color_norm_fg\f[R] .TP \f[B]\f[CB]content\f[B]\f[R] \f[C]icon_path\f[R] for \f[C]icon\f[R] widgets \f[C]text\f[R] for all other widget types .TP \f[B]\f[CB]halign\f[B]\f[R], \f[B]\f[CB]valign\f[B]\f[R] Horizontal and vertical alignment of widget. This has not yet been implemented, but defaults to \f[C]top\f[R] and \f[C]left\f[R] .SH CONFIGURATION FILE .PP If no file is specified using the \[en]config-file= option, the XDG Base Directory Specification is adhered to. I.e: .IP \[bu] 2 Global config in \f[C]${XDG_CONFIG_DIRS:-/etc/xdg}\f[R] .PD 0 .P .PD .IP \[bu] 2 User config override in \f[C]${XDG_CONFIG_HOME:-$HOME/.config}\f[R] .PP For most users \[ti]/.config/jgmenu/jgmenurc is appropriate. .PP Global config variables are set in the following order (i.e.\ bottom of list has higher precedence): .IP \[bu] 2 built-in defaults (config.c) .PD 0 .P .PD .IP \[bu] 2 tint2rc config file (can be specified by \f[C]TINT2_CONFIG\f[R] environment variable) .PD 0 .P .PD .IP \[bu] 2 jgmenurc config file (can be specified by \[en]config-file=) .PD 0 .P .PD .IP \[bu] 2 command line arguments .SS Syntax .PP Lines beginning with \f[C]#\f[R] are ignored. .PP All other lines are recognised as setting variables in the format .IP .nf \f[C] key = value \f[R] .fi .PP White spaces are mostly ignored. .SS Values .PP Unless otherwise specified, values as treated as simple strings. .PP Here follow some specific types: .TP \f[B]\f[CB]boolean\f[B]\f[R] When a variable takes a boolean value, only 0 and 1 are accepted. 0 means false; 1 means true. .TP \f[B]\f[CB]integer\f[B]\f[R] When a variable takes an integer value, only numerical values are accepted. The only valid characters are digits (0-9) and minus-sign. All integer variables relating to geometry and position are interpreted as pixel values unless otherwise specified. .TP \f[B]\f[CB]color\f[B]\f[R] When a variable takes a color value, only the syntax \f[C]#rrggbb aaa\f[R] is recognised, where \f[C]rr\f[R], \f[C]gg\f[R] and \f[C]bb\f[R] represent hexadecimal values (00-ff) for the colours red, green and blue respectively; and \f[C]aaa\f[R] stands for the alpha channel value expressed as a percentage (0-100) (i.e.\ 100 means no transparency and 0 means fully transparent.) For example \f[C]#ff0000 100\f[R] represents red with no transparency, whereas \f[C]#000088 50\f[R] means dark blue with 50% transparency. .TP \f[B]\f[CB]pathname\f[B]\f[R] When a variable takes a pathname value, it is evaluated as a string. If the first character is tilde (\[ti]), it will be replaced by the the environment variable $HOME just as a shell would expand it. .SS Variables .TP \f[B]\f[CB]verbosity\f[B]\f[R] = \f[B]integer\f[R] (default 0) General verbosity: (0) warnings only; (1) basic info; (2) more info; (3) max info .RS .PP Additional specific topics: (4) IPC .PP Note: Some IPC messages need environment variable \f[C]JGMENU_VERBOSITY=4\f[R] too .RE .TP \f[B]\f[CB]stay_alive\f[B]\f[R] = \f[B]boolean\f[R] (default 1) If set to 1, the menu will \[lq]hide\[rq] rather than \[lq]exit\[rq] when the following events occur: clicking on menu item; clicking outside the menu; pressing escape. When in the hidden mode, a USR1 signal will \[lq]un-hide\[rq] the menu. .TP \f[B]\f[CB]persistent\f[B]\f[R] = \f[B]boolean\f[R] (default 0) If set to 1, the menu will not exit nor hide when the following events occur: clicking on menu item; clicking outside the menu; pressing escape. Use in conjunction with the \[ha]quit() markup. .TP \f[B]\f[CB]hide_on_startup\f[B]\f[R] = \f[B]boolean\f[R] (default 0) If set to 1, jgmenu start in \[lq]hidden\[rq] mode. This is useful for starting jgmenu during the boot process and then sending a \f[C]killall -SIGUSR1 jgmenu\f[R] to show the menu. .TP \f[B]\f[CB]csv_cmd\f[B]\f[R] = \f[B]string\f[R] (default \f[B]\f[CB]apps\f[B]\f[R]) Defines the command to produce the jgmenu flavoured CSV for \f[C]jgmenu\f[R]. Accpetable keyword include apps, pmenu, lx, and ob. If a value is given other than these keywords, it will be executed in a shell (so be careful!). If left blank, jgmenu will read from \f[C]stdin\f[R]. Examples: .RS .IP .nf \f[C] csv_cmd = lx csv_cmd = jgmenu_run lx --no-dirs csv_cmd = cat \[ti]/mymenu.csv \f[R] .fi .RE .TP \f[B]\f[CB]tint2_look\f[B]\f[R] = \f[B]boolean\f[R] (default 0) Read tint2rc and parse config options for colours,\ dimensions and alignment. .TP \f[B]\f[CB]position_mode\f[B]\f[R] = (fixed | ipc | pointer | center) (default fixed) Define menu positioning mode. .RS .TP \f[B]\f[CB]fixed\f[B]\f[R] Align to \f[C]margin_{x,y}\f[R] and respect \f[C]_NET_WORKAREA\f[R]. .TP \f[B]\f[CB]ipc\f[B]\f[R] Use IPC to read environment variables set by panel. See Inter-Process Communication for further info. .TP \f[B]\f[CB]pointer\f[B]\f[R] Launch at pointer whilst respecting both \f[C]_NET_WORKAREA\f[R] and \f[C]edge_snap_x\f[R]. .TP \f[B]\f[CB]center\f[B]\f[R] Launch at center of screen and ignore \f[C]_NET_WORKAREA\f[R]. Take precedence over \f[C]menu_{v,h}align\f[R]. .RE .TP \f[B]\f[CB]edge_snap_x\f[B]\f[R] = \f[B]integer\f[R] (default 30) Specify the distance (in pixels) from the left hand edge, within which the menu will snap to the edge. Note that this only applies in \f[C]at_pointer\f[R] mode. .TP \f[B]\f[CB]terminal_exec\f[B]\f[R] = \f[B]string\f[R] (default x-terminal-emulator) Define terminal to use for commands with \[ha]term() markup .TP \f[B]\f[CB]terminal_args\f[B]\f[R] = \f[B]string\f[R] (default -e) The values of these two variables are used to build a string to launch programs requiring a terminal to run. With the default values, the string would become: \f[C]x-terminal-emulator -e \[aq]some_command with arguments\[aq]\f[R]. \f[C]terminal_args\f[R] must finish with \f[C]-e\f[R] or equivalent, where \f[C]-e\f[R] refers to the meaning of \f[C]-e\f[R] in \f[C]xterm -e\f[R]. .TP \f[B]\f[CB]monitor\f[B]\f[R] = \f[B]integer\f[R] (default 0) Specify a particular monitor as an index starting from 1. If 0, the menu will be launched on the monitor where the mouse is. .TP \f[B]\f[CB]hover_delay\f[B]\f[R] = \f[B]integer\f[R] (default 100) Time (in milliseconds) from hovering over an item until a submenu is opened. .TP \f[B]\f[CB]hide_back_items\f[B]\f[R] = \f[B]boolean\f[R] (default 1) If enabled, all \[ha]back() items will be suppressed. As a general rule, it should be set to 1 for a multi-window menu, and 0 when in single-window mode. .TP \f[B]\f[CB]columns\f[B]\f[R] = \f[B]integer\f[R] (default 1) Number of columns in which to show menu items .TP \f[B]\f[CB]tabs\f[B]\f[R] = \f[B]integer\f[R] (default 120) Specify the position is pixels of the first tab .TP \f[B]\f[CB]menu_margin_x\f[B]\f[R] = \f[B]integer\f[R] (default 0) Distance between the menu (=X11 window) and the edge of the screen. See note on \f[C]_NET_WORKAREA\f[R] under \f[C]menu_{v,h}align\f[R] variables. .TP \f[B]\f[CB]menu_margin_y\f[B]\f[R] = \f[B]integer\f[R] (default 0) Vertical equilvalent of \f[C]menu_margin_x\f[R] .TP \f[B]\f[CB]menu_width\f[B]\f[R] = \f[B]integer\f[R] (default 200) Minimum menu width of the menu. The menu width will adjust to the longest item in the current (sub)menu. If a filter is applied (e.g.\ by the user typing) the menu width will not adjust. .TP \f[B]\f[CB]menu_height_min\f[B]\f[R] = \f[B]integer\f[R] (default 0) Set the minimum height of the root menu. If \f[C]menu_height_min\f[R] and \f[C]menu_height_max\f[R] these are set to the same value, the menu height will be fixed at that value. If set to zero, they will be ignored. .TP \f[B]\f[CB]menu_height_max\f[B]\f[R] = \f[B]integer\f[R] (default 0) Minimum height of the root menu. See \f[C]menu_height_min\f[R] .TP \f[B]\f[CB]menu_height_mode\f[B]\f[R] = (static | dynamic) (default static) Mode of menu height .RS .TP \f[B]\f[CB]static\f[B]\f[R] Height of the initial root menu will be used for any subsequent \f[C]\[ha]root()\f[R] action .TP \f[B]\f[CB]dynamic\f[B]\f[R] Root menu height will be re-calculated every time a new tag is opened using \f[C]\[ha]root()\f[R]. .RE .TP \f[B]\f[CB]menu_padding_top\f[B]\f[R] = \f[B]integer\f[R] (default 5) Distance between top border and item/widget .TP \f[B]\f[CB]menu_padding_right\f[B]\f[R] = \f[B]integer\f[R] (default 5) Distance between right border and item/widget .TP \f[B]\f[CB]menu_padding_bottom\f[B]\f[R] = \f[B]integer\f[R] (default 5) Distance between bottom border and item/widget .TP \f[B]\f[CB]menu_padding_left\f[B]\f[R] = \f[B]integer\f[R] (default 5) Distance between left border and item/widget .TP \f[B]\f[CB]menu_radius\f[B]\f[R] = \f[B]integer\f[R] (default 1) Radius of rounded corners of menu .TP \f[B]\f[CB]menu_border\f[B]\f[R] = \f[B]integer\f[R] (default 0) Thickness of menu border .TP \f[B]\f[CB]menu_halign\f[B]\f[R] = (left | right | center) (default left) Horizontal alignment of menu. If not set, jgmenu will try to guess the alignment reading \f[C]_NET_WORKAREA\f[R], which is a freedesktop EWMH root window property. Not all Window Managers and Panels respect \f[C]_NET_WORKAREA\f[R]. The following do: openbox, xfwm4, tint2 and polybar. The following do NOT: awesome, i3, bspwm and plank .TP \f[B]\f[CB]menu_valign\f[B]\f[R] = (top | bottom | center) (default bottom) Vertical alignment of menu. See \f[C]menu_halign\f[R]. .TP \f[B]\f[CB]menu_gradient_pos\f[B]\f[R] = (none | top | right | bottom | left | top_left | top_right | bottom_left | bottom_right ) (default none) Start position of menu window gradient. The end position is at the opposite side or corner. Colors color_menu_bg and color_menu_bg_to specify the start (from) and finish (to). .TP \f[B]\f[CB]sub_spacing\f[B]\f[R] = \f[B]integer\f[R] (default 1) Horizontal space between windows. A negative value results in each submenu window overlapping its parent window. .TP \f[B]\f[CB]sub_padding_top\f[B]\f[R] = \f[B]integer\f[R] (default auto) Same as \f[C]menu_padding_top\f[R] but applies to submenu windows only. It understands the keyword \f[C]auto\f[R] which means that the smallest of the four \f[C]menu_padding_*\f[R] variables will be used. .TP \f[B]\f[CB]sub_padding_right\f[B]\f[R] = \f[B]integer\f[R] (default auto) See \f[C]sub_padding_top\f[R] .TP \f[B]\f[CB]sub_padding_bottom\f[B]\f[R] = \f[B]integer\f[R] (default auto) See \f[C]sub_padding_top\f[R] .TP \f[B]\f[CB]sub_padding_left\f[B]\f[R] = \f[B]integer\f[R] (default auto) See \f[C]sub_padding_top\f[R] .TP \f[B]\f[CB]sub_hover_action\f[B]\f[R] = \f[B]integer\f[R] (default 1) Open submenu when hovering over item (only works in multi-window mode). .TP \f[B]\f[CB]item_margin_x\f[B]\f[R] = \f[B]integer\f[R] (default 3) Horizontal distance between items and the edge of the menu. .TP \f[B]\f[CB]item_margin_y\f[B]\f[R] = \f[B]integer\f[R] (default 3) Vertical distance between items and the edge of the menu. .TP \f[B]\f[CB]item_height\f[B]\f[R] = \f[B]integer\f[R] (default 25) Height of menu items. .TP \f[B]\f[CB]item_padding_x\f[B]\f[R] = \f[B]integer\f[R] (default 4) Horizontal distance between item edge and its content (e.g.\ text or icon) .TP \f[B]\f[CB]item_radius\f[B]\f[R] = \f[B]integer\f[R] (default 1) Radius of rounded corners of items .TP \f[B]\f[CB]item_border\f[B]\f[R] = \f[B]integer\f[R] (default 0) Thickness of item border .TP \f[B]\f[CB]item_halign\f[B]\f[R] = (left | right) (default left) Horizontal alignment of menu items. If set to \f[C]right\f[R], the option \f[C]arrow_string\f[R] should be changed too. .TP \f[B]\f[CB]sep_height\f[B]\f[R] = \f[B]integer\f[R] (default 5) Height of separator without text (defined by \[ha]sep()). Separators with text use \f[C]item_height\f[R] .TP \f[B]\f[CB]sep_halign\f[B]\f[R] = (left | center | right) (default left) Horizontal alignment of separator text .TP \f[B]\f[CB]sep_markup\f[B]\f[R] = \f[B]string\f[R] (unset by default) If specified, \f[C]foo\f[R] will be passed to pango for \[ha]sep(foo). .RS .PP See the following link for pango attributes: .PP Keywords include (but are not limited to): .IP \[bu] 2 font .IP \[bu] 2 size (x-small, small, medium, large, x-large) -\ style (normal, oblique, italic) .IP \[bu] 2 weight (ultralight, light, normal, bold, ultrabold, heavy .IP \[bu] 2 foreground (using format #rrggbb or a colour name) .IP \[bu] 2 underline (none, single, double) .PP Example: .IP .nf \f[C] sep_markup = font=\[dq]Sans Italic 12\[dq] foreground=\[dq]blue\[dq] \f[R] .fi .RE .TP \f[B]\f[CB]font\f[B]\f[R] = \f[B]string\f[R] (unset by default) Font description for menu items. \f[C]font\f[R] accepts a string such as \f[C]Cantarell 10\f[R] or \f[C]UbuntuCondensed 11\f[R]. The font description without a specified size unit is interpreted as \f[C]points\f[R]. If \f[C]px\f[R] is added, it will be read as pixels.\ Using \[lq]points\[rq] enables consistency with other applications. .TP \f[B]\f[CB]font_fallback\f[B]\f[R] = \f[B]string\f[R] (default xtg) Same as \f[C]icon_theme_fallback\f[R], except that the xsettings variable \f[C]Gtk/FontName\f[R] is read. .TP \f[B]\f[CB]icon_size\f[B]\f[R] = \f[B]integer\f[R] (default 22) Size of icons in pixels. If set to 0, icons will be disabled. .TP \f[B]\f[CB]icon_text_spacing\f[B]\f[R] = \f[B]integer\f[R] (default 10) Distance between icon and text within a menu item .TP \f[B]\f[CB]icon_norm_alpha\f[B]\f[R] = \f[B]integer\f[R] (default 100) Opacity of menu item icons, expressed as a percentage (0-100). .TP \f[B]\f[CB]icon_sel_alpha\f[B]\f[R] = \f[B]integer\f[R] (default 100) Opacity of the currently selected menu item\[cq]s icon, expressed as a percentage (0-100). .TP \f[B]\f[CB]icon_theme\f[B]\f[R] = \f[B]string\f[R] (unset by default) Name of icon theme. E.g. \f[C]Adwaita\f[R], \f[C]breeze\f[R], \f[C]Paper\f[R], \f[C]Papirus\f[R] and \f[C]Numix\f[R]. See \f[C]ls /usr/share/icons/\f[R] (or similar) for available icon themes on your system. .TP \f[B]\f[CB]icon_theme_fallback\f[B]\f[R] = \f[B]string\f[R] (default xtg) Fallback sources of the icon theme in order of precedence, where the left-most letter designates the source with highest precedence. The following characters are acceptable: \f[C]x=xsettings Net/IconThemeName\f[R]; \f[C]t=tint2\f[R]; \f[C]g=gtk3.0\f[R]. \f[C]icon_theme\f[R] takes priority if set. In order to increase consistency with tint2, xsettings variables will only be read if the tint2rc variable \f[C]launcher_icon_theme_override\f[R] is \f[C]0\f[R]. .TP \f[B]\f[CB]arrow_string\f[B]\f[R] = \f[B]string\f[R] (default \[u25B8]) String to be used to indicate that an item will open submenu. See jgmenuunicode(7) for examples .TP \f[B]\f[CB]arrow_width\f[B]\f[R] = \f[B]integer\f[R] (default 15) Width allowed for \f[C]arrow_string\f[R]. Set to 0 to hide arrow. .TP \f[B]\f[CB]color_menu_bg\f[B]\f[R] = \f[B]color\f[R] (default #000000 100) Background colour of menu window. If gradients are enabled, this will be the `from' color. .TP \f[B]\f[CB]color_menu_bg_to\f[B]\f[R] = \f[B]color\f[R] (default #000000 100) Background `to' colour of menu window - for use with gradients .TP \f[B]\f[CB]color_menu_border\f[B]\f[R] = \f[B]color\f[R] (default #eeeeee 8) Border colour of menu window .TP \f[B]\f[CB]color_norm_bg\f[B]\f[R] = \f[B]color\f[R] (default #000000 0) Background colour of menu items, except the one currently selected. .TP \f[B]\f[CB]color_norm_fg\f[B]\f[R] = \f[B]color\f[R] (default #eeeeee 100) Font (foreground) colour of menu items, except the one currently selected. .TP \f[B]\f[CB]color_sel_bg\f[B]\f[R] = \f[B]color\f[R] (default #ffffff 20) Background color of the currently selected menu item. .TP \f[B]\f[CB]color_sel_fg\f[B]\f[R] = \f[B]color\f[R] (default #eeeeee 100) Font (foreground) color of the currently selected menu item. .TP \f[B]\f[CB]color_sel_border\f[B]\f[R] = \f[B]color\f[R] (default #eeeeee 8) Border color of the currently selected menu item. .TP \f[B]\f[CB]color_sep_fg\f[B]\f[R] = \f[B]color\f[R] (default #ffffff 20) Font (foreground) colour of separators without text .TP \f[B]\f[CB]color_title_fg\f[B]\f[R] = \f[B]color\f[R] (default #eeeeee 50) Font (foreground) colour of separators with text. The font colour can be overridden by \f[C]sep_markup\f[R] .TP \f[B]\f[CB]color_title_bg\f[B]\f[R] = \f[B]color\f[R] (default #000000 0) Background colour of separators with text. .TP \f[B]\f[CB]color_title_border\f[B]\f[R] = \f[B]color\f[R] (default #000000 0) Border colour of separators with text. .TP \f[B]\f[CB]color_scroll_ind\f[B]\f[R] = \f[B]color\f[R] (default #eeeeee 40) Colour of scroll indicator lines (which show if there are menu items above or below those which are visible). .SS CSV generator variables .PP The following variables begin with \f[C]csv_\f[R] which denotes that they set environment variables which are used by the CSV generators. .TP \f[B]\f[CB]csv_name_format\f[B]\f[R] = \f[B]string\f[R] (default \f[B]\f[CB]%n (%g)\f[B]\f[R]) Defines the format of the \f[C]name\f[R] field for CSV generators. Supported by apps and lx. It understands the following two fields: .RS .TP \f[B]\f[CB]%n\f[B]\f[R] Application name .TP \f[B]\f[CB]%g\f[B]\f[R] Application generic name. If a \f[C]generic name\f[R] does not exist or is the same as the \f[C]name\f[R], \f[C]%n\f[R] will be used without any formatting. .RE .TP \f[B]\f[CB]csv_single_window\f[B]\f[R] = \f[B]boolean\f[R] (default 0) If set, csv-generators will output \[ha]root() instead of \[ha]checkout(). This results in a single window menu, where submenus appear in the same window. This is supported by apps and pmenu. .TP \f[B]\f[CB]csv_no_dirs\f[B]\f[R] = \f[B]boolean\f[R] (default 0) If set, csv-generators will output applications without any directory structure. This is supported by apps, pmenu and lx. .TP \f[B]\f[CB]csv_i18n\f[B]\f[R] = \f[B]string\f[R] (no default) Look for a translation file in the specified file or directory. See \[ga]jgmenu-i18n(1) for further details. Supported by apps and ob. .TP \f[B]\f[CB]csv_no_duplicates\f[B]\f[R] = \f[B]boolean\f[R] (default 0) Restrict applications to appear in one directory only. Supported by apps. .SH Inter-Process Communication (IPC) .PP IPC can be used to align jgmenu to a panel launcher in real-time. This is currently supported by tint2 and xfce-panel. It works as follows: .PP \f[C]jgmenu_run\f[R] reads the environment variables listed below and passes them via a unix socket to the long-running instance of jgmenu. .PP If \f[C]position_mode=ipc\f[R], jgmenu aligns to these variables every times it is launched. .PP The following four environment variables define the extremities of the panel: \f[C]TINT2_BUTTON_PANEL_X1\f[R], \f[C]TINT2_BUTTON_PANEL_X2\f[R], \f[C]TINT2_BUTTON_PANEL_Y1\f[R], \f[C]TINT2_BUTTON_PANEL_Y2\f[R]. .IP .nf \f[C] (X1,Y1) \[u2554]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2557] \[u2551] panel \[u2551] \[u255A]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u255D] (X2,Y2) \f[R] .fi .PP The following environment variables define the position of the launcher. These are interpreted differently depending on panel alignment. .PP In the case of a horizontal panel: .IP \[bu] 2 \f[C]TINT2_BUTTON_ALIGNED_X1\f[R] and \f[C]TINT2_BUTTON_ALIGNED_X2\f[R] define the launcher button\[cq]s horizontal extremities to align to. .IP \[bu] 2 \f[C]TINT2_BUTTON_ALIGNED_Y1\f[R] and \f[C]TINT2_BUTTON_ALIGNED_Y2\f[R] define the edge of the panel to align to. These shall be the same. .PP In the case or a vertical panel, the same rules apply with X and Y reversed. .PP If the above variables are not set, \f[C]menu_margin_x\f[R] and \f[C]menu_margin_y\f[R] are used. .SH DIAGRAMS .SS General Notes .TP \f[B]\f[CB]margin\f[B]\f[R] Refers to space outside an object .TP \f[B]\f[CB]padding\f[B]\f[R] Refers to space inside an object (between border and content) .SS Vertical Menu .IP .nf \f[C] \[u2554]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2557] \[u2551] 1 \[u2551] \[u255F]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2562] \[u2551] 2 \[u2551] \[u255F]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2562] \[u2551] item \[u2551] \[u255F]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2562] \[u2551] 2 \[u2551] \[u255F]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2562] \[u2551] item \[u2551] \[u255F]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2562] \[u2551] 2 \[u2551] \[u255F]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2562] \[u2551] 3 \[u2551] \[u255A]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u255D] 1. menu_padding_top 2. item_margin_y 3. menu_padding_bottom \f[R] .fi .SS Horizontal Menu .IP .nf \f[C] \[u2554]\[u2550]\[u2564]\[u2550]\[u2564]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2564]\[u2550]\[u2564]\[u2550]\[u2557] \[u2551] \[br] \[br] \[br] \[br] \[u2551] \[u2551] \[br] \[u251C]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2524] \[br] \[u2551] \[u2551] \[br] \[br]icon text >\[br] \[br] \[u2551] \[u2551] \[br] \[u251C]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2524] \[br] \[u2551] \[u2551]2\[br]1\[br] \[br]1\[br]3\[u2551] \[u2551] \[br] \[u251C]\[u2500]\[u2500]\[u2500]\[u2500]\[u252C]\[u2500]\[u252C]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u252C]\[u2500]\[u2524] \[br] \[u2551] \[u2551] \[br] \[br] 4 \[br]5\[br] \[br]6\[br] \[br] \[u2551] \[u2551] \[br] \[u251C]\[u2500]\[u2500]\[u2500]\[u2500]\[u2534]\[u2500]\[u2534]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2534]\[u2500]\[u2524] \[br] \[u2551] \[u2551] \[br] \[br] \[br] \[br] \[u2551] \[u2551] \[br] \[br] \[br] \[br] \[u2551] \[u255A]\[u2550]\[u2567]\[u2550]\[u2567]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2567]\[u2550]\[u2567]\[u2550]\[u255D] 1. item_margin_x 2. padding_left 3. padding_right 4. icon_size 5. icon_to_text_spacing 6. arrow_width \f[R] .fi .SS External to menu .IP .nf \f[C] screen \[u2554]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2557] \[u2551] 2 \[u2551] \[u2551] \[u250C]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2510] \[u2551] \[u2551] \[br] root \[br] \[u250C]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2510] \[u2551] \[u2551]1\[br] menu \[br] \[br] sub \[br] \[u2551] \[u2551] \[br] \[br]3\[br] menu \[br] \[u2551] \[u2551] \[u2514]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2518] \[br] \[br] \[u2551] \[u2551] \[u2514]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2500]\[u2518] \[u2551] \[u2551] \[u2551] \[u2551] \[u2551] \[u2551] \[u2551] \[u255A]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u2550]\[u255D] 1. menu_margin_x 2. menu_margin_y 3. sub_spacing \f[R] .fi .SH HOOKS .PP A hook in jgmenu is a rule which optionally triggers a command and then performs a restart if a file or directory has has changed since the last time the instance of jgmenu was mapped (=made visible - normally by running jgmenu_run). .PP Hooks are specified in the file $HOME/.config/jgmenu/hooks are take the format .IP .nf \f[C] , \f[R] .fi .PP For example, to synchronise with the GTK theme, use this hook: .IP .nf \f[C] \[ti]/.config/gtk-3.0/settings.ini,jgmenu_run gtktheme \f[R] .fi .PP Leave the \f[C]\f[R] empty to just restart. .PP A number of restart-hooks are built-in by default, for example \[ti]/.config/jgmenu/{jgmenurc,append.csv,prepend.csv} and /usr/share/applications. .PP To list all the built-in hooks, use the keyword \f[C]print\f[R] in the hook file (on a line on its own). In order to remove all the built-in hooks, use the keyword \f[C]clear\f[R]. .SH STARTUP SCRIPT .PP Unless the \f[C]--vsimple\f[R] argument is used, the file \[ti]/.config/jgmenu/startup is executed on initial startup. .SH SEE ALSO .IP \[bu] 2 \f[C]jgmenu_run(1)\f[R] .IP \[bu] 2 \f[C]jgmenututorial(7)\f[R] .IP \[bu] 2 \f[C]jgmenuunicode(7)\f[R] .PP The jgmenu source code and documentation can be downloaded from .SH AUTHORS Johan Malm.