diff options
Diffstat (limited to 'pm')
| -rwxr-xr-x | pm | 83 |
1 files changed, 31 insertions, 52 deletions
@@ -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" |
