#!/usr/bin/perl
# dmenuclip - Really nasty dmenu launcher to be used in combination with
# clipbored
use strict;

my $xsels     = "$ENV{XDG_DATA_HOME}/clipbored/clips";
my $sortercmd = "/usr/local/bin/sorter";

my $font      = (exists $ENV{CLIPBORED_DMENU_FONT})
  ? $ENV{CLIPBORED_DMENU_FONT}
  : '-*-fixed-*-*-*-*-15-*-*-*-*-*-*-*';
my $normal_bg = (exists $ENV{CLIPBORED_DMENU_NORMAL_BG})
  ? $ENV{CLIPBORED_DMENU_NORMAL_BG}
  :  "#1c1c1c";
my $normal_fg = (exists $ENV{CLIPBORED_DMENU_NORMAL_FG})
  ? $ENV{CLIPBORED_DMENU_NORMAL_FG}
  : "#ffffff";
my $select_bg = (exists $ENV{CLIPBORED_DMENU_SELECT_BG})
  ? $ENV{CLIPBORED_DMENU_SELECT_BG}
  : "#484848";
my $select_fg = (exists $ENV{CLIPBORED_DMENU_SELECT_FG})
  ? $ENV{CLIPBORED_DMENU_SELECT_FG}
  :  "#ffffff";

my $list_mode = (exists $ENV{CLIPBORED_DMENU_LISTMODE})
  ? dmenu_mode($ENV{CLIPBORED_DMENU_LISTMODE})
  : dmenu_mode('vertical');

my $x_buffer = (exists $ENV{CLIPBORED_X_SELECTION})
  ? $ENV{CLIPBORED_X_SELECTION}
  : 'primary';


# If defined, we want vertical mode
if(exists($ENV{CLIPBORED_DMENU_LINES})) {
  $list_mode = "-l $ENV{CLIPBORED_DMENU_LINES}";
}

sub dmenu_mode {
  return ($_[0] eq 'vertical') ? '-l 15' : '';
}

$normal_bg =~ s/^(#)/\\$1/;
$normal_fg =~ s/^(#)/\\$1/;
$select_bg =~ s/^(#)/\\$1/;
$select_fg =~ s/^(#)/\\$1/;


my $dmenu =  "dmenu -i -b $list_mode "
  . "-nb $normal_bg -nf $normal_fg -sb $select_bg -sf $select_fg";

my $dmenu_cmd = qq["\$(tac $xsels | $dmenu -fn $font -p dmenuclip)"];
system("$sortercmd $xsels $dmenu_cmd | xclip -selection $x_buffer -i -l 0 | xclip -o");
