diff --git a/clipmenu b/clipmenu index 27d963b..71ce5e7 100755 --- a/clipmenu +++ b/clipmenu @@ -1,10 +1,17 @@ #!/bin/bash +LC_COLLATE=C + dmenu_lines=${CLIPMENU_LINES-8} declare -A selections +ordered_selections=() + +files=(/tmp/clipmenu/*) + +for (( i=${#files[@]}-1; i>=0; i-- )); do + file=${files[$i]} -for file in /tmp/clipmenu/*; do first_line=$(sed -n '/./{p;q}' "$file") lines=$(wc -l "$file") @@ -14,10 +21,14 @@ for file in /tmp/clipmenu/*; do first_line+=" ($lines lines)" fi + ordered_selections+=("$first_line") selections[$first_line]=$file done -chosen_line=$(printf '%s\n' "${!selections[@]}" | dmenu -l "$dmenu_lines" "$@") +chosen_line=$( + printf '%s\n' "${ordered_selections[@]}" | + awk '!x[$0]++' | dmenu -l "$dmenu_lines" "$@" +) [[ $chosen_line ]] || exit 1 diff --git a/clipmenud b/clipmenud index cf55b04..316d182 100755 --- a/clipmenud +++ b/clipmenud @@ -23,6 +23,6 @@ while sleep 1; do md5=$(md5sum <<< "$data") md5=${md5%% *} - printf '%s' "$data" > "$cache_dir/$md5" + printf '%s' "$data" > "$cache_dir/$(LC_ALL=C date +%F-%H-%M-%S)-$md5" done done