summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--FORK_PATCHES26
-rw-r--r--Makefile4
-rwxr-xr-xdmenu_omit22
-rwxr-xr-xdmenu_path5
4 files changed, 55 insertions, 2 deletions
diff --git a/FORK_PATCHES b/FORK_PATCHES
index 63cb614..408ba23 100644
--- a/FORK_PATCHES
+++ b/FORK_PATCHES
@@ -5,3 +5,29 @@ This is my local fork with some patches applied and maintained
= Patches
+== Filtered Entries
+
+Manually applied a filter to the pipe arguments to omit certain entries.
+Rather than supplying a filtered list, or biasing on recency, this patch omits
+anything that is contained in the supplied configuration file:
+ $XDG_CONFIG_DIR or $HOME/.config/dmenu/dmenu_omitlist
+
+A simple text file that is passed into dmenu_path to filter any items you wish
+to remove. Each path-item name is placed one per line.
+
+The idea being that - dmenu is useful to have /everything/ available in it. But
+some items that you would never call clash with a preinstalled program e.g:
+ fire (a graphics demo) would make it so, after getting installed by mesa,
+filtering for firefox you would need a minimum entry of firef which may break
+what you're muscle memory is use to. Simple push fire into you list and you're
+good :)
+
+It also provide a command line tool to help add filter items from your shell:
+ dmenu_omit fire
+will enter that item and sort your list.
+
+I don't know how portable this is since I wanted to omit the whitespace and that
+required the usage of grep -E (which I know isn't the most portable). Feel free
+to edit dmenu_omit and either supply a cross *nix way, or simply remove the
+whitespace logic from the patch
+
diff --git a/Makefile b/Makefile
index 458c524..c32ca02 100644
--- a/Makefile
+++ b/Makefile
@@ -36,8 +36,9 @@ dist: clean
install: all
mkdir -p $(DESTDIR)$(PREFIX)/bin
- cp -f dmenu dmenu_path dmenu_run stest $(DESTDIR)$(PREFIX)/bin
+ cp -f dmenu dmenu_omit dmenu_path dmenu_run stest $(DESTDIR)$(PREFIX)/bin
chmod 755 $(DESTDIR)$(PREFIX)/bin/dmenu
+ chmod 755 $(DESTDIR)$(PREFIX)/bin/dmenu_omit
chmod 755 $(DESTDIR)$(PREFIX)/bin/dmenu_path
chmod 755 $(DESTDIR)$(PREFIX)/bin/dmenu_run
chmod 755 $(DESTDIR)$(PREFIX)/bin/stest
@@ -49,6 +50,7 @@ install: all
uninstall:
rm -f $(DESTDIR)$(PREFIX)/bin/dmenu\
+ $(DESTDIR)$(PREFIX)/bin/dmenu_omit\
$(DESTDIR)$(PREFIX)/bin/dmenu_path\
$(DESTDIR)$(PREFIX)/bin/dmenu_run\
$(DESTDIR)$(PREFIX)/bin/stest\
diff --git a/dmenu_omit b/dmenu_omit
new file mode 100755
index 0000000..d07d8f8
--- /dev/null
+++ b/dmenu_omit
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+configdir="${XDG_CONFIG_HOME:-"$HOME/.config/dmenu"}"
+config="$configdir/dmenu_omitlist"
+
+[ ! -e "$configdir" ] && mkdir -p "$configdir"
+
+if [ $# -lt 1 ]; then
+ echo "Missing argument(s).
+ Usage: dmenu_omit item" >&2
+ exit 1
+fi
+
+for item in "$@"
+do
+ echo "$item" >> $config
+done
+
+# using grep to filter out any blanks or empty lines
+# useful if manually edited
+cat -s $config | grep -v -E '^([[:space:]])*$' | sort -u -o $config
+
diff --git a/dmenu_path b/dmenu_path
index 3a7cda7..4c2a5b4 100755
--- a/dmenu_path
+++ b/dmenu_path
@@ -2,12 +2,15 @@
cachedir="${XDG_CACHE_HOME:-"$HOME/.cache"}"
cache="$cachedir/dmenu_run"
+configdir="${XDG_CONFIG_HOME:-"$HOME/.config/dmenu"}"
+config="$configdir/dmenu_omitlist"
[ ! -e "$cachedir" ] && mkdir -p "$cachedir"
+[ ! -e "$configdir" ] && mkdir -p "$configdir"
IFS=:
if stest -dqr -n "$cache" $PATH; then
- stest -flx $PATH | sort -u | tee "$cache"
+ stest -flx $PATH | sort -u | grep -wvF -f $config | tee "$cache"
else
cat "$cache"
fi