i3-connect-screen-session 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #!/bin/zsh -f
  2. if [[ $# -eq 0 ]] ; then
  3. echo "i3-connect-screen-session [ screen-instance [ -x ] | new [ -x ] | list | dmenu ]"
  4. exit
  5. fi
  6. function new-screen {
  7. exec screen
  8. }
  9. function new-screen-x {
  10. exec xterm +samename -class XTermScreen -e screen
  11. }
  12. function open-screen {
  13. exec screen -r $1
  14. }
  15. function open-screen-x {
  16. exec xterm -e "screen -r $1"
  17. }
  18. function list-screen-sessions {
  19. screen -list | sed '$ d' | sed 1d | awk '{print $1}'
  20. }
  21. function external-completion-dispatch {
  22. if [[ $1 == "new" ]] ; then
  23. new-screen-x
  24. else
  25. open-screen-x $1
  26. fi
  27. }
  28. function with-external-completion {
  29. if [[ -e `which rofi` ]] ; then
  30. SCREEN=`list-screen-sessions | rofi -dmenu -p "screen session:"`
  31. [[ $SCREEN != "" ]] && external-completion-dispatch $SCREEN
  32. else
  33. SCREEN=`list-screen-sessions | dmenu -p "screen session:"`
  34. [[ $SCREEN != "" ]] && open-screen-x $SCREEN
  35. fi
  36. }
  37. SCREEN=$1
  38. shift
  39. case ${SCREEN} in
  40. list)
  41. list-screen-sessions
  42. ;;
  43. dmenu)
  44. with-external-completion
  45. ;;
  46. new)
  47. if [[ $1 == "-x" ]] ; then
  48. new-screen-x
  49. else
  50. new-screen
  51. fi
  52. ;;
  53. *)
  54. if [[ $1 == "-x" ]] ; then
  55. open-screen-x $SCREEN
  56. else
  57. open-screen $SCREEN
  58. fi
  59. esac