aboutsummaryrefslogtreecommitdiff
path: root/pm
diff options
context:
space:
mode:
Diffstat (limited to 'pm')
-rwxr-xr-xpm83
1 files changed, 31 insertions, 52 deletions
diff --git a/pm b/pm
index 5e85539..3e25fa8 100755
--- a/pm
+++ b/pm
@@ -13,7 +13,7 @@
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
set -e
-PASTE_MANAGER_FILE=~/.pastes
+PASTE_MANAGER_FILE="${PASTE_MANAGER_FILE:-~/.pastes}"
PASTE_MANAGER_LINES="${PASTE_MANAGER_LINES:-30}"
PASTE_MANAGER_X_SELECTION="${PASTE_MANAGER_X_SELECTION:-clipboard}"
@@ -21,19 +21,20 @@ PASTE_MANAGER_X_SELECTION="${PASTE_MANAGER_X_SELECTION:-clipboard}"
# the only option called elsewhere is `-p`
_menu="dmenu -l $PASTE_MANAGER_LINES -i"
+case $(uname) in
+ Darwin) _menu="choose -m -s 16 -f Monaco -n $PASTE_MANAGER_LINES -w 85" ;;
+ *) ;;
+esac
+
genid() {
+ if [ -x $(command -v pm-genid) ] ; then
+ pm-genid
+ return
+ fi
{ dd if=/dev/urandom 2>/dev/null | tr -C -d 'a-zA-Z0-9'; echo; } \
| fold -w 8 | sed 1q
}
-getFifo() {
- _p="$(mktemp)"
- rm -f "$_p"
- sleep 0.1
- mkfifo "$_p"
- echo "$_p"
-}
-
_clip() {
case $(uname) in
Darwin)
@@ -48,23 +49,26 @@ esac
insert() {
exec <&-
- $_menu -p "Enter name: " > "$_fifo" &
- name="$(tr -d '\n' < "$_fifo")"
+ name="$(printf "_\n" | $_menu -p "Enter name: ")"
+ name="$(echo "$name" | tr -d '\n')"
[ -z "$name" ] && exit 1
- $_menu -p "Enter content: " > "$_fifo" &
- content="$(tr -d '\n' < "$_fifo")"
+ content="$(printf "_\n" | $_menu -p "Enter content: ")"
+ content="$(echo "$content" | tr -d '\n')"
[ -z "$content" ] && exit 1
+ id="$(genid)"
+ [ -z "$id" ] && { echo "ID empty" ; exit 1; }
+
printf "%s::%s::%s::%s::%s\n" \
- "$(genid)" "$(date +%s)" "$(date +%s)" "$name" "$content" \
+ "$id" "$(date +%s)" "$(date +%s)" "$name" "$content" \
>> "$PASTE_MANAGER_FILE"
}
sel() {
pm-fmtdb -f "$PASTE_MANAGER_FILE" \
| $_menu -p "$@" \
- | sed -re 's/^ID: ([^ ]*).*$/\1/'
+ | sed -r -e 's/^ID: ([^ ]*).*$/\1/'
}
selectName() {
@@ -90,40 +94,28 @@ selectContent() {
}
copy() {
- sel "Will copy content" > "$_fifo" &
- read -r id < "$_fifo"
- selectContent "$id" \
- | _clip
+ selectContent "$(sel "Will copy content")" | _clip
}
copyName() {
- sel "Will copy entry name" > "$_fifo" &
- read -r id < "$_fifo"
- selectName "$id" \
- | _clip
+ selectName "$(sel "Will copy entry name")" | _clip
}
_type() {
- sel "Will type content" > "$_fifo" &
- read -r id < "$_fifo"
- selectContent "$id" \
+ selectContent "$(sel "Will type content")" \
| xdotool type --delay 1ms --clearmodifiers --file -
}
typeName() {
- sel "Will type entry name" > "$_fifo" &
- read -r id < "$_fifo"
- selectName "$id" \
+ selectName "$(sel "Will type entry name")" \
| xdotool type --delay 1ms --clearmodifiers --file -
}
rename() {
- sel "Item to rename" > "$_fifo" &
- read -r id < "$_fifo"
+ id="$(sel "Item to rename")"
item="$(grep "^$id" "$PASTE_MANAGER_FILE" | pm-fmtdb -f - )"
name="$(selectName "$id")"
- $_menu -p "Currently: ( $name ) New Name" > "$_fifo" &
- read -r name < "$_fifo"
+ name="$($_menu -p "Currently: ( $name ) New Name")"
cp "$PASTE_MANAGER_FILE" "$PASTE_MANAGER_FILE".bak
awk -F:: -v id="$id" -v name="$name" '
BEGIN { OFS="::"; }
@@ -138,12 +130,10 @@ rename() {
}
update() {
- sel "Item to update" > "$_fifo" &
- read -r id < "$_fifo"
+ id="$(sel "Item to update")"
item="$(grep "^$id" "$PASTE_MANAGER_FILE" | pm-fmtdb -f - )"
output="$(selectContent "$id")"
- $_menu -p "Currently: ( $output ) New Content" > "$_fifo" &
- read -r content < "$_fifo"
+ content="$(printf "_\n" | $_menu -p "Currently: ( $output ) New Content")"
cp "$PASTE_MANAGER_FILE" "$PASTE_MANAGER_FILE".bak
awk -F:: -v id="$id" -v content="$content" '
BEGIN { OFS="::"; }
@@ -158,13 +148,10 @@ update() {
}
delete() {
- sel "Item to delete" > "$_fifo" &
- read -r id < "$_fifo"
+ id="$(sel "Item to delete")"
+ [ -z "$id" ] && exit 1
item="$(grep "^$id" "$PASTE_MANAGER_FILE" | pm-fmtdb -f - )"
- echo Item: "$item"'
-yes
-no' | $_menu -p "Are you sure?" > "$_fifo" &
- read -r resp < "$_fifo"
+ resp="$(printf 'Item: "%s"\nyes\nno\n' "$item" | $_menu -p "Are you sure?")"
if [ "$resp" = "yes" ] ; then
cp "$PASTE_MANAGER_FILE" "$PASTE_MANAGER_FILE".bak
sed '/^'"$id"/d < "$PASTE_MANAGER_FILE".bak > "$PASTE_MANAGER_FILE"
@@ -181,11 +168,7 @@ rename
update'
menu() {
- echo "$actions" | $_menu -p "Command:" \
- | {
- read -r action;
- runAction "$action";
- }
+ runAction "$(echo "$actions" | $_menu -p "Command:")"
}
runAction() {
@@ -219,9 +202,5 @@ EOF
exit 1
}
-_fifo="$(getFifo)"
-
action="${1:-menu}"
runAction "$action"
-
-rm -f "$_fifo"