Dmenu

Dmenu je dynamické menu pro X, které čte seznam oddělených řádků výstupu stdin. Když uživatel vybere položku a zmáčkne ENTER (Return), položka se vypíše do stdout a dmenu se ukončí. Zadáváním textu se omezí nabídnuté položky odpovídající zadaným symbolům.

Dmenu_run je skript užívaný programem dwm jako seznam spustitelných programů a výsledky spouští v jejich shellu.

Možnosti

Používání

Dmenu je kompletně ovládáno klávesnicí. Položky jsou vybrány klávesami šipek, pg-up, pg-down, home a end.

Používání programu Dmenu hodnotím jako praktické a v kombinaci se skripty jako via jej můžeme rozšířit i o hledání souborů anebo rychlé odkazy na web a mnoho dalšího.

Dobrý pomocník je také přídavný script dmenu_run_history, který si pamatuje zadané příkazy a ty jsou pak jako první.

Více monitorů

config.mk
# dmenu version
VERSION = 5.2

# paths
PREFIX = /usr/local
MANPREFIX = $(PREFIX)/share/man

X11INC = /usr/X11R6/include
X11LIB = /usr/X11R6/lib

# Xinerama, comment if you don't want it
XINERAMALIBS  = -lXinerama
XINERAMAFLAGS = -DXINERAMA

# freetype
FREETYPELIBS = -lfontconfig -lXft
FREETYPEINC = /usr/include/freetype2
# OpenBSD (uncomment)
#FREETYPEINC = $(X11INC)/freetype2
#MANPREFIX = ${PREFIX}/man

# includes and libs
INCS = -I$(X11INC) -I$(FREETYPEINC)
LIBS = -L$(X11LIB) -lX11 $(XINERAMALIBS) $(FREETYPELIBS)

# flags
CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=700 -D_POSIX_C_SOURCE=200809L -DVERSION=\"$(VERSION)\" $(XINERAMAFLAGS)
CFLAGS   = -std=c99 -pedantic -Wall -Os $(INCS) $(CPPFLAGS)
LDFLAGS  = $(LIBS)

# compiler and linker
CC = cc

Moje nastavení DMENU s DWM

Líbí se mi vycentrované dmenu uprostřed obrazovky. Používám několik patchů pro přizpůsobení vzhledu i chování.

Náhled:

Vycentrované Dmenu na ploše
Náhled mého Dmenu

Stáhnout: dmenu-5.2-center_border_alpha_highlight.tar - celý setup, stačí rozbalit, zkompilovat a nainstalovat.

Patche:

config.h:

/* See LICENSE file for copyright and license details. */
/* Default settings; can be overriden by command line. */

static int topbar = 1;                      /* -b  option; if 0, dmenu appears at bottom     */
static const unsigned int alpha = 0xf0;     /* Amount of opacity. 0xff is opaque             */
static int centered = 1;                    /* -c option; centers dmenu on screen */
static int min_width = 400;                    /* minimum width when centered */
/* -fn option overrides fonts[0]; default X11 font or font set */
static const char *fonts[] = {
	"Hack Nerd Font Mono:size=10"
};
static const char col_nejtmavsi[]       = "#1d2021";
static const char col_tmava[]  = "#3c3836";
static const char col_hlavni[]        = "#504945";
static const char col_nejsvetlejsi[]        = "#fbf1c7";
static const char col_zluta[]        = "#fabd2f";
static const char col_cervena1[]        = "#fb4934";
static const char col_oranzova[]        = "#fe8019";
static const char col_modra[]        = "#458588";
static const char col_zelena[]        = "#8ec07c";
static const char col_fialova1[]        = "#b16286";
static const char col_koral[]        = "#83a598";
static const char *prompt      = NULL;      /* -p  option; prompt to the left of input field */
static const char *colors[SchemeLast][2] = {
	/*     fg         bg       */
	[SchemeNorm] = { col_nejsvetlejsi, col_nejtmavsi },
	[SchemeSel] = { col_nejtmavsi, col_zelena },
	[SchemeSelHighlight] = { col_nejtmavsi, col_zluta },
	[SchemeNormHighlight] = { col_nejtmavsi, col_zelena},
	[SchemeOut] = { col_nejtmavsi, col_cervena1 },
	[SchemeOutHighlight] = { col_nejtmavsi, col_fialova1 },
};

static const unsigned int alphas[SchemeLast][2] = {
	[SchemeNorm] = { OPAQUE, alpha },
	[SchemeSel] = { OPAQUE, alpha },
	[SchemeOut] = { OPAQUE, alpha },
};
/* -l option; if nonzero, dmenu uses vertical list with given number of lines */
static unsigned int lines      = 20;

/*
 * Characters not considered part of a word while deleting words
 * for example: " /?\"&[]"
 */
static const char worddelimiters[] = " ";

/* Size of the window border */
static unsigned int border_width = 1;

Via - další využití dmenu

Je to dobrý pomocník, více info a stažení možné zde. Strom souborů v adresáři ~/.config/via:

tree .config/via/.config/via/
├── shortcuts
├── via-feed
├── via-menu
├── via-open
└── websites	

Jednotlivé soubory: