saturnin-xuris 2.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. #!/bin/bash
  2. # launch Uzbl once per each URI in stdin
  3. . "$(ffoom path)" || exit 3
  4. ffoo import pretty
  5. SATURNIN_XURIS_NOTIFICATIONS=true
  6. SATURNIN_XURIS_LIMIT=100
  7. SATURNIN_XURIS_ALWAYS_RUN=false
  8. SATURNIN_XURIS_UNIQ=true
  9. SATURNIN_XURIS_CHOICE="${SATURNIN_XURIS_CHOICE:-false}"
  10. FFOO_DEBUG=true
  11. usage() {
  12. mkusage "[-u|--uniq] [-a|--always-run] [-l|--limit N] [-c|--choose] [-C|--choice-cmd COMMAND]"
  13. }
  14. get_i3_wsname() {
  15. #
  16. # Get current workspace name
  17. #
  18. i3-msg -t get_workspaces \
  19. | jq '.[] | {focused, name}' \
  20. | grep -F -A 1 'focused": true' \
  21. | grep name \
  22. | cut -d\" -f4
  23. }
  24. enum_bins() {
  25. echo uzbl-browser
  26. echo vimb
  27. echo firefox
  28. echo opera-rh
  29. echo opera-beta
  30. echo opera
  31. echo wget
  32. }
  33. decide_bin() {
  34. #
  35. # Decide what browser to use
  36. #
  37. local context="$(hostname -s)/$(get_i3_wsname)"
  38. debug -v context
  39. case "$context" in
  40. hugo/*) echo vimb ;;
  41. fullmoon/*) echo uzbl-browser ;;
  42. *) echo uzbl-browser ;;
  43. esac
  44. }
  45. maybe_uniq() {
  46. $SATURNIN_XURIS_UNIQ || { cat; return; }
  47. sort | uniq
  48. }
  49. notify() {
  50. $SATURNIN_XURIS_NOTIFICATIONS || return 0
  51. local summary="saturnin-xuris"
  52. local body="$1"
  53. notify-send -a saturnin-xuris "$summary" "$body"
  54. }
  55. open_from() {
  56. local list="$1"
  57. local count=$(wc -l <"$list")
  58. test "$count" -gt $SATURNIN_XURIS_LIMIT && {
  59. notify "too much URIs; giving up: $count > $SATURNIN_XURIS_LIMIT"
  60. return 1
  61. }
  62. test "$count" -eq 0 && {
  63. $SATURNIN_XURIS_ALWAYS_RUN && $SATURNIN_XURIS_BIN &
  64. return 0
  65. }
  66. while read uri;
  67. do
  68. $SATURNIN_XURIS_BIN "$uri" &
  69. done < "$list"
  70. }
  71. while true; do case $1 in
  72. -a|--always-run) SATURNIN_XURIS_ALWAYS_RUN=true; shift ;;
  73. -b|--bin) SATURNIN_XURIS_BIN="$2"; shift; shift ;;
  74. -c|--choose) SATURNIN_XURIS_CHOICE="enum_bins | saturnin dmenu"; shift ;;
  75. -C|--choice-cmd) SATURNIN_XURIS_CHOICE="$2"; shift; shift ;;
  76. -l|--limit) SATURNIN_XURIS_LIMIT=$2; shift; shift ;;
  77. -u|--uniq) SATURNIN_XURIS_UNIQ=true; shift ;;
  78. -U|--no-uniq) SATURNIN_XURIS_UNIQ=false; shift ;;
  79. -*) usage ;;
  80. "") break ;;
  81. *) usage ;;
  82. esac done
  83. debug -v SATURNIN_XURIS_ALWAYS_RUN \
  84. SATURNIN_XURIS_CHOICE \
  85. SATURNIN_XURIS_LIMIT \
  86. SATURNIN_XURIS_UNIQ
  87. SATURNIN_XURIS_URI_LIST=$(mktemp -t saturnin-xuris.XXXXXXXX)
  88. cat | maybe_uniq | grep . >"$SATURNIN_XURIS_URI_LIST"
  89. # choice of URI has been made; we may try to use dmenu
  90. bash -n <<<"$SATURNIN_XURIS_CHOICE"
  91. SATURNIN_XURIS_BIN=$(eval "$SATURNIN_XURIS_CHOICE")
  92. SATURNIN_XURIS_BIN="${SATURNIN_XURIS_BIN:-$(decide_bin)}"
  93. debug -v SATURNIN_XURIS_BIN
  94. open_from "$SATURNIN_XURIS_URI_LIST"
  95. rm "$SATURNIN_XURIS_URI_LIST"