mabox-pipemenus/usr/bin/mabox-recent-files-pipemenu

117 lines
3.5 KiB
Plaintext
Raw Normal View History

2016-03-25 19:02:03 +01:00
#!/bin/sh
# cb-recent-files-pipemenu - a script to parse .recently-used.xbel
# and generate openbox pipe menu
# Copyright (C) 2010 John Crawley
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# version 2012/07/01-cb
# Ported to #!++ <https://crunchbangplusplus.org>
# by Ben Young <computermouth@crunchbangplusplus.org>
# Ported to Manjaro <https://manjaro.github.io/>
# by Daniel Napora <napcok@gmail.com>
# Usage: add
# <menu id="recent" label="Recent Files" execute="/path/to/mabox-recent-files-pipemenu" />
# to your .config/openbox/menu.xml, or use with mabox-places-pipemenu (see comments there)
maximum_entries=15 # max. number of entries in menu
#######################################################################
2017-01-06 15:14:57 +01:00
case $LANG in
pl*)
NOTFOUND="Nie znaleziono pliku recently-used.xbel"
;;
*)
NOTFOUND="Cannot find a readable recently-used.xbel file"
;;
esac
2016-03-25 19:02:03 +01:00
# look for recently-used.xbel
if [ $XDG_DATA_HOME ] && [ -r "${XDG_DATA_HOME}/recently-used.xbel" ]
then
file_path="${XDG_DATA_HOME}/recently-used.xbel"
elif [ -r "${HOME}/.local/share/recently-used.xbel" ]
then
file_path="${HOME}/.local/share/recently-used.xbel"
elif [ -r "${HOME}/.recently-used.xbel" ]
then
file_path="${HOME}/.recently-used.xbel"
else
echo "$0: cannot find a readable recently-used.xbel file" >&2
echo '<openbox_pipe_menu>
2017-01-06 15:14:57 +01:00
<separator label="$NOTFOUND" />
2016-03-25 19:02:03 +01:00
</openbox_pipe_menu>'
exit 1
fi
# if argument is --clear, empty .recently-used.xbel
[ "$1" = '--clear' ] && {
cat <<':EOF' > "${file_path}"
<?xml version="1.0" encoding="UTF-8"?>
<xbel version="1.0"
xmlns:bookmark="http://www.freedesktop.org/standards/desktop-bookmarks"
xmlns:mime="http://www.freedesktop.org/standards/shared-mime-info"
>
</xbel>
:EOF
exit
}
maximum_entries=$((maximum_entries+2))
pre=' <item label="'
mid='">
<action name="Execute"><command>'
post='</command></action>
</item>'
files=$( tac "${file_path}" | awk -v MAX="$maximum_entries" -v PR="$pre" -v MI="$mid" -v PO="$post" 'BEGIN {
RS="</bookmark>";
FS="<info>";
}
(NR == MAX) {exit}
!/<bookmark/ {next}
!/href=[\"'\'']file:\/\// {next}
# $1 is the command, $2 the file path
{
sub(/^.*exec=\"\&apos\;/,"",$1)
sub(/\&apos\;.*$/,"",$1)
sub(/ *%./,"",$1)
sub(/^.*file:\/\//,"",$2)
sub(/[\"'\''].*$/,"",$2)
gsub(/%22/,"\\&quot;",$2)
gsub(/%3C/,"\\&lt;",$2)
gsub(/%3E/,"\\&gt;",$2)
name=$2
sub(/^.*\//,"",name)
gsub(/_/,"__",name)
gsub(/\&apos;/,"\\&apos;\\&quot;\\&apos;\\&quot;\\&apos;",$2)
print (PR name MI $1 " '"'"'" $2 "'"'"'" PO)
}' )
# use perl to decode urlencoded characters
files=$(perl -MURI::Escape -e 'print uri_unescape($ARGV[0]);' "$files")
output='<openbox_pipe_menu>
'"$files"'
<separator />
2016-04-13 16:03:59 +02:00
<item label="Wyczyść ostatnio używane">
2016-03-25 19:02:03 +01:00
<action name="Execute">
<command>
&apos;'"$0"'&apos; --clear
</command>
</action>
</item>
</openbox_pipe_menu>
'
printf '%s' "$output" # printf because echo sometimes eats backslashes