You are not logged in.
Couldn't find anything like this on the forums, so I thought, why not create it. ITT: Clever little script thingies that utilize dmenu in some way or another.
Thank brisbin33 for this.
Unfortunately I don't have anything to contribute yet
Last edited by Runiq (2009-09-14 14:53:23)
Offline
#!/bin/bash
mpc play `mpc playlist | dmenu -b -i -nb '#040404' -nf '#525252' -sf '#ffa0ff' -sb '#000000' -h 700 -w 1000 -x 50 -y 50 -fn '-*-terminus-medium-r-*-*-16-*-*-*-*-*-*-*' -p "Find:" | cut -d')' -f1`
A simple dmenu playlist It needs the vertical patches for dmenu.
Offline
Hi,
a friend and me, we have written a dmenu-based mpd-control called dmmpdc.
It uses dmenu with vertical patch, mpc and notify-send.
You can add songs and albums to the playlist, remove and play songs from playlist and see the status of your mpd.
Because it is enough for us how it is now, the songs should be stored in a specific order which should look like this:
/path/to/musicdir/subdir1/subdir2/subdir3/song.ogg
for me it is e.g.:
/music/genre/artist/album/title.ogg
The usage is very simple and made for keybind usage, just enter: script function (e.g.: script add_album)
#!/bin/bash
DMENU="dmenu -i -nb #000 -nf #7af -sb #000 -sf #fff -x 0 -y 32'"
MPD_HOST='localhost'
MPD_PORT='6600'
MUSIC_DIR=/my/music/dir/
function add_track
{
ALBUM="$1"
TRACK=$(echo -e "..\n$(mpc ls "$(grep "$ALBUM" /tmp/newalbum.$$ | awk -F / '{print $1}' | sort -f | uniq)/$ALBUM" | awk -F / '{print $4}')" | ${DMENU} -p "Find: " -l 30 -w 640)
[ "${TRACK}" == ".." ] && add_album
if [ "${TRACK}" != ".." ]
then
mpc add "$(grep "${ALBUM}" /tmp/newalbum.$$ | awk -F / '{print $1}' |sort -f | uniq)/${ALBUM}/${TRACK}"
MORE=$(echo -e "add more\nexit" | ${DMENU} -l 3 -w 100)
[ "$MORE" == "add more" ] && add_track "${ALBUM}"
fi
rm /tmp/newalbum.$$
return
}
function add_album
{
ALBUM=$(mpc listall | awk -F / '{print $2" - " $3}'| grep -v mp3 | sort -f | uniq | ${DMENU} -p "DmMpdC Find: " -l 30 -w 640 | sed -e 's#\ \-\ #\/#')
echo "-${RANDOM}-"
[ -z "$ALBUM" ] && return
MODE=$(echo -e "add\nreplace\nopen" | ${DMENU} -l 4 -w 70)
mpc listall | grep "$ALBUM" > /tmp/newalbum.$$
[ $MODE == "replace" ] && mpc clear
j=$(wc -l /tmp/newalbum.$$ | awk '{print $1}')
J=$(( $j + 1 ))
for ((i=1; i<J; i++))
do
[ $MODE == "add" -o $MODE == "replace" ] && mpc add "$( sed -n "${i}p" /tmp/newalbum.$$)" > /dev/null
done
[ $MODE == "open" ] && add_track "$ALBUM"
[ $MODE == "replace" ] && mpc play 1
rm /tmp/newalbum.$$
}
function select_track
{
TRACK=$(mpc playlist | ${DMENU} -p "Find: " -l 30 -w 400 | cut -c 2- - | sed -r s/"\).*$"/""/)
[ -z "$TRACK" ] && return
MODE=$(echo -e "play\nremove" | ${DMENU} -l 2 -w 100)
[ $MODE == "play" ] && mpc play "$TRACK"
[ $MODE == "remove" ] && mpc del "$TRACK"
}
function toggle_random
{
MRANDOM=$(mpc | grep random | awk '{print $5}')
if [ "${MRANDOM}" == "off" ]
then
mpc random on
notify-send -u low -t 1500 "MPD" "Shuffle switched on"
else
mpc random off
notify-send -u low -t 1500 "MPD" "Shuffle switched off"
fi
}
function mpd_status
{
notify-send -u low -t 4000 "MPD" "<b>$(mpc --format '%artist% - %album% - %title%'| head -n 1)</b>
$(mpc | head -n 3 | tail -n 2)"
}
$1
Last edited by Andrwe (2009-09-14 14:55:05)
Website: andrwe.org
Offline
In honor of Brisbin33, Here's his code for launching dmenu with a frequency-of-use based caching feature. It uses .dmenurc, which contains the dmenu command with the arguments you want so it can be sourced with multiple instances (uses) of dmenu.
#!/bin/bash
if [ -f $HOME/.dmenurc ]; then
. $HOME/.dmenurc
else
DMENU='dmenu -i'
fi
TERMI='urxvt -e bash -lic'
CACHE="$HOME/.dmenu_cache_recent"
touch $CACHE
MOST_USED=$(LC_ALL="C"; sort $CACHE | uniq -c | sort -r | colrm 1 8)
RUN=$( (echo "$MOST_USED"; dmenu_path | grep -vxF "$MOST_USED") | $DMENU) && \n(echo $RUN; head -n99 $CACHE) > $CACHE.$$ && \nmv $CACHE.$$ $CACHE
case $RUN in
*\;) $TERMI ${RUN/;/} & ;;
*) $RUN & ;;
esac
exit 0
.dmenurc:
# makes dmenu identical across all scripts by sourcing this file
# aur/dmenu-vertical-xft required for xft fonts
DMENU='dmenu -i -fn xft:Inconsolata-10 -r -x 0 -y 17 -nb #303030 -nf #909090 -sb #909090 -sf #303030'
What would be really cool is generalizing the caching script so any use of dmenu could use it (have different caches) -- for example -- normal dmenu, snippy, mpc playlist launcher.
Scott
Offline
well, i seem to be all over this thread .
anyways, here's my mpd script as linked to in the OP. hope no one minds the cross-post.
it can accept search parameters or 'all' to put up the whole playlist (i.e. when launched via keybinding).
and of course, it uses my patented $HOME/.dmenurc idea.
example:
msearch a love supreme
msearch led zeppelin
msearch all
#!/bin/bash
if [ -f $HOME/.dmenurc ]; then
. $HOME/.dmenurc
else
DMENU='dmenu -i'
fi
if [ "$*" = "all" ]; then
mpc --no-status play $(mpc playlist --format '%title% by %artist%' | cut -c 2- | sed 's/)/ -/g' | $DMENU | awk '{print $1}')
else
mpc --no-status play $(mpc playlist --format '%title% by %artist% #| %album%' | cut -c 2- | sed 's/)/ -/g' | grep -i "$*" | cut -d '|' -f 1 | $DMENU | awk '{print $1}')
fi
and in the interest of full disclosure, the launch script posted by firecat was a slight variation on b3n's bash version of o_no_hu's launch.py python script found here.
//github/
Offline
Here is a script for go up option:
alias up='cd "$(ls -d */ | dmenu -fn glisp -nb "#100" -nf "#b9c0af" -sb "#000" -sf "#afff2f" -i)"'
You could rmove -d */ and change cd with rm and this alias script with delate following files.
It's really simple
Shell Scripter | C/C++/Python/Java Coder | ZSH
Offline
I picked this up somewhere in the wild...a netcfg profile selector:
#!/bin/sh
nf='#888888'
nb='#2a2a2a'
sf='#ffffff'
sb='#2a2a2a'
font='-*-terminus-medium-r-*-*-12-*-*-*-*-*-*-*'
dmenucmd="dmenu -fn $font -nb $nb -nf $nf -sb $sb -sf $sf"
netprof=`ls -1 /etc/network.d | $dmenucmd $*`
if [ "x$netprof" != "x" ]; then
/usr/bin/sudo /usr/bin/netcfg2 -a
/usr/bin/sudo /usr/bin/netcfg2 $netprof
fi
thayer williams ~ cinderwick.ca
Offline
Here is my launcher script again. Start with some entries in ~/.dddmenu, anything new entered will be added.
#!/bin/dash
newentry=$( dmenu -xs -i -l 5 -rs -ni -p ":" < ~/.dddmenu)
[ -z "$newentry" ] && exit
[ -z "$( (cat ~/.dddmenu; echo "$newentry") | sort | uniq -d)" ] && echo "$newentry" >> ~/.dddmenu
eval setsid setsid $newentry
Offline
I want to add dmenfm.
For all who doesn't know it it's a filemanager based on dmenu and can be found in aur.
Although I don't have written it I think it should be mentioned here and with adding some options you can easily get a vertical version of it.
Website: andrwe.org
Offline
Here's my crappy addition to the collection. I wanted a script that would allow me to include only certain apps in dmenu's list... here's what I came up with.
#!/bin/bash
addlauncher() {
if [[ -z $app ]]; then
echo "dmlauncher: error: missing required argument"
return 1
fi
if which $app &>/dev/null; then
if [[ -L $HOME/.dmlcache/$ln ]]; then
echo "dmlauncher: error: \"$link\" launcher already exists"
return 1
else
ln -s $(which $app) $HOME/.dmlcache/$link
return 0
fi
else
echo "dmlauncher: error: \"$link\" not found in \$PATH"
return 1
fi
}
dellauncher() {
if [[ -L $HOME/.dmlcache/$app ]]; then
rm -f $HOME/.dmlcache/$app
return 0
else
echo "dmlauncher: error: \"$app\" launcher not found"
return 1
fi
}
usage() {
echo "usage: dmlauncher [-a <program>] || [-d <program>] ||"
echo " [-i] [-b] [-fn <font>] [-nb <color>] [-nf <color>]"
echo " [-p <prompt>] [-sb <color>] [-sf <color>] [-v]"
return 0
}
dmlrun() {
exe=`ls $HOME/.dmlcache | dmenu $opt` && exec $exe
}
case "$1" in
'-a'|'--add')
app=$2
if [ ! -z $3 ]; then
link=$3
else
link=$app
fi
addlauncher
;;
'-d'|'--del')
app=$2
dellauncher
;;
'-h'|'--help')
usage
;;
*)
opt=$@
dmlrun
;;
esac
Last edited by Ghost1227 (2009-10-28 18:35:08)
Offline
Is it possible to make a dmenu calculator?
For something like Alt-C | 8 * 5 | = 40
?
Or is it better to use another app?
Offline
@abijr:
xsel -o | dmenu -p Calculate: | xargs echo | bc 2>&1 | dmenu -p Answer: | xsel -i
edit: added selection clipboard and start with xsel -o (instead of just echo), so if you run it multiple times you can continue with the last answer (press TAB), and added relaying bc's error messages.
Last edited by Procyon (2009-10-29 19:12:43)
Offline
@Procyon
Thanks, I tried right away...
It's just that I can't get it to work...
It's supposed to get the input from selection and output the results to clipboard, right?
Anyways I run the script with no selection and input
8*5 TAB (or RETURN)
and nothing happens....
Edit:
This works ok:
xsel -o | dmenu -p Calculate: | xargs echo | calc -p | xargs dmenu -p
Last edited by abijr (2009-10-30 00:25:10)
Offline
I got it!
Hope it works for you guys like it did for me...
#!/bin/bash
CM1=`xsel -o`
CM2=`echo $CM1 | dmenu -p Calc: | calc -p`
echo $CM2 | xsel -i | echo $CM2 | dmenu -p Ans:
Offline
Google search with History. I bind it to my keyboards search button
#!/bin/bash
if [ -f $HOME/.dmenurc ]; then
. $HOME/.dmenurc
else
DMENU='dmenu -i'
fi
GS=`cat ~/.gshist | $DMENU $*`
if grep -q "$GS" "$HOME/.gshist" ; then
echo already exists in history
else
echo $GS >> ~/.gshist
fi
firefox -new-window http://www.google.co.uk/search?q="$GS"
Offline
I like to use dmenu as a general-purpose input dialog for things. This is a simple password-prompt suitable for use with sudo's askpass. Mostly self-explanatory.
~/bin/dpass
#! /bin/sh
dmenu -p "$1" -fa 'Consolas:size=10' -nf '#204a87' -nb '#204a87' -sf black -sb '#babdb6' <&- && echo
<&- closes stdin and gives us an easy empty dmenu. && echo is because dmenu doesn't output with a newline, which sudo expects. FG and BG colors are the same so your password doesn't show (though a -S "secure" option in dmenu might be nice). Now you can do something nifty like... root dmenu!
in xmonad.hs:
, (modm .|. shiftMask, xK_r), spawn $ "exe=`dmenu_path | dmenu` && eval \"exec sudo -A $exe\"")
in .xinitrc:
export SUDO_ASKPASS="$HOME/bin/dpass"
Have fun!
(N.B.: if you use xcompmgr or cairo-compmgr with any map/unmap effects, it can cause the second dmenu to be invisible. You can add a sleep statement to the top of ~/bin/dpass and tweak the time parameter until the password prompt shows up.)
Offline
In honor of Brisbin33, Here's his code for launching dmenu with a frequency-of-use based caching feature. It uses .dmenurc, which contains the dmenu command with the arguments you want so it can be sourced with multiple instances (uses) of dmenu.
#!/bin/bash if [ -f $HOME/.dmenurc ]; then . $HOME/.dmenurc else DMENU='dmenu -i' fi TERMI='urxvt -e bash -lic' CACHE="$HOME/.dmenu_cache_recent" touch $CACHE MOST_USED=$(LC_ALL="C"; sort $CACHE | uniq -c | sort -r | colrm 1 8) RUN=$( (echo "$MOST_USED"; dmenu_path | grep -vxF "$MOST_USED") | $DMENU) && \n(echo $RUN; head -n99 $CACHE) > $CACHE.$$ && \nmv $CACHE.$$ $CACHE case $RUN in *\;) $TERMI ${RUN/;/} & ;; *) $RUN & ;; esac exit 0
.dmenurc:
# makes dmenu identical across all scripts by sourcing this file # aur/dmenu-vertical-xft required for xft fonts DMENU='dmenu -i -fn xft:Inconsolata-10 -r -x 0 -y 17 -nb #303030 -nf #909090 -sb #909090 -sf #303030'
What would be really cool is generalizing the caching script so any use of dmenu could use it (have different caches) -- for example -- normal dmenu, snippy, mpc playlist launcher.
Scott
you'll want to use "sort -nr" as opposed to "sort -r", since it will handle cases over 10.
Offline
I found this dmenu script http://urukrama.pastebin.com/f74ca72ac from urukrama blog but I can't make it to work. Is anyone nice with bash skils to make this work. thanks!
Offline
Well for starters, you'll need to change the "/home/urukrama/" to whatever your home folder is. Thenhave a look at the editor, "mousepad". Have you installed it? Maybe you want another editor.
(Further you probably won't have all those applications installed, so having a script to start an editor with their config files does not make too much sense,, unless you'll edit those lines a lot and make your own list of files you regularly want to edit.)
Ogion
(my-dotfiles)
"People willing to trade their freedom for temporary security deserve neither and will lose both." - Benjamin Franklin
"Enlightenment is man's leaving his self-caused immaturity." - Immanuel Kant
Offline
Using some dmenu scripts along with clipbored (a clipboard manager running as a daemon), (http://github.com/trapd00r/clipbored), like http://github.com/trapd00r/clipbored/bl … /dmenuclip and http://github.com/trapd00r/clipbored/bl … ts/dmenurl .
Offline
Can't get it to work. Anyway thanks!
Offline
Inspired by this thread, I've put together dmenu-tools which aims to be a consistent suite of dmenu-powered scripts. Since dmenu is so flexible, the goal is to open it up as community-driven repository, so please let me know what you think.
@botzoboy: check out dmenu-edit. My "edit-list" looks like this:
~/.bashrc
~/.Xdefaults
~/.Xmodmap
~/.xinitrc
~/.nanorc
~/.xmonad/xmonad.hs
~/.config/openbox/rc.xml
/etc/rc.conf
Offline
Nice work tlvince:
Thanks!
Offline
more bits n bobs from around the forum.
https://bbs.archlinux.org/viewtopic.php?id=95345 clipbored - daemon that collects all X clipboard buffers - use w dmenu ... as fundamentally handy as dcalculator, thnx.
https://bbs.archlinux.org/viewtopic.php?id=62299 HAL Storage Devices Mount Script (dmenu) ... nothing fancy or fun, just plain useful.
https://bbs.archlinux.org/viewtopic.php?id=49904 "dmenu help!!" ... has some useful scripts and other links.
https://bbs.archlinux.org/viewtopic.php?id=61017 controlling mpd via dmenu ... has some other stuff on this not yet mentioned in this thread.
https://bbs.archlinux.org/viewtopic.php?id=86222 Clutter Dmenu ... idk... thought i'd include it for posterity n whatever.
https://bbs.archlinux.org/viewtopic.php?id=90492 size dmenu ... and some other helpful tips
https://bbs.archlinux.org/viewtopic.php?id=95984 create a dmenu custom menu ... mmm, sounds nice.
i'm still getting to grips with making my own, but for the most part, it seems if u know a little bash, you're already more than half way there to being able to fiddle about to make your dmenu do all sorts of tricks.
... still havnt quite figured out how to change the colour of anything but the default yet though. fun trying for my preference of colours in dcalculator though. ^_^
fave quote of the mo': "Man's reach should exceed his grasp, else what's a heaven for." - Robert Browning
Offline
i was trying to figure out how to make a dmenus rss script... but i think i'm lacking too many pieces of the jigsaw to make a proper job of it yet, so i thought i'd ask... anyone got any ideas how that might be achieved? rss through dmenu?
fave quote of the mo': "Man's reach should exceed his grasp, else what's a heaven for." - Robert Browning
Offline