pulsar.sh 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. #!/bin/bash
  2. if [ "$(uname)" == 'Darwin' ]; then
  3. OS='Mac'
  4. elif [ "$(expr substr $(uname -s) 1 5)" == 'Linux' ]; then
  5. OS='Linux'
  6. else
  7. echo "Your platform ($(uname -a)) is not supported."
  8. exit 1
  9. fi
  10. # Only set the ATOM_DISABLE_SHELLING_OUT_FOR_ENVIRONMENT env var if it hasn't been set.
  11. : ${ATOM_DISABLE_SHELLING_OUT_FOR_ENVIRONMENT:=true}
  12. ATOM_ADD=false
  13. ATOM_NEW_WINDOW=false
  14. EXIT_CODE_OVERRIDE=
  15. while getopts ":anwtfvhp-:" opt; do
  16. case "$opt" in
  17. -)
  18. case "${OPTARG}" in
  19. add)
  20. ATOM_ADD=true
  21. ;;
  22. new-window)
  23. ATOM_NEW_WINDOW=true
  24. ;;
  25. wait)
  26. WAIT=1
  27. ;;
  28. help|version)
  29. EXPECT_OUTPUT=1
  30. ;;
  31. foreground|benchmark|benchmark-test|test|package)
  32. EXPECT_OUTPUT=1
  33. ;;
  34. enable-electron-logging)
  35. export ELECTRON_ENABLE_LOGGING=1
  36. ;;
  37. esac
  38. ;;
  39. a)
  40. ATOM_ADD=true
  41. ;;
  42. n)
  43. ATOM_NEW_WINDOW=true
  44. ;;
  45. w)
  46. WAIT=1
  47. ;;
  48. f|t|h|v|p)
  49. EXPECT_OUTPUT=1
  50. ;;
  51. esac
  52. done
  53. if [ "${ATOM_ADD}" = "true" ] && [ "${ATOM_NEW_WINDOW}" = "true" ]; then
  54. EXPECT_OUTPUT=1
  55. EXIT_CODE_OVERRIDE=1
  56. fi
  57. if [ $REDIRECT_STDERR ]; then
  58. exec 2> /dev/null
  59. fi
  60. ATOM_HOME="${ATOM_HOME:-$HOME/.pulsar}"
  61. mkdir -p "$ATOM_HOME"
  62. if [ $OS == 'Mac' ]; then
  63. if [ -L "$0" ]; then
  64. SCRIPT="$(readlink "$0")"
  65. else
  66. SCRIPT="$0"
  67. fi
  68. ATOM_APP="$(dirname "$(dirname "$(dirname "$SCRIPT")")")"
  69. if [ "$ATOM_APP" == . ]; then
  70. unset ATOM_APP
  71. else
  72. PULSAR_PATH="$(dirname "$ATOM_APP")"
  73. ATOM_APP_NAME="$(basename "$ATOM_APP")"
  74. fi
  75. if [ -n "${ATOM_APP_NAME}" ]; then
  76. # If ATOM_APP_NAME is known, use it as the executable name
  77. ATOM_EXECUTABLE_NAME="${ATOM_APP_NAME%.*}"
  78. else
  79. # Else choose it from the inferred channel name
  80. ATOM_EXECUTABLE_NAME="Pulsar"
  81. fi
  82. if [ -z "${PULSAR_PATH}" ]; then
  83. # If PULSAR_PATH isn't set, check /Applications and then ~/Applications for Atom.app
  84. if [ -x "/Applications/$ATOM_APP_NAME" ]; then
  85. PULSAR_PATH="/Applications"
  86. elif [ -x "$HOME/Applications/$ATOM_APP_NAME" ]; then
  87. PULSAR_PATH="$HOME/Applications"
  88. else
  89. # We haven't found an Pulsar.app, use spotlight to search for Pulsar
  90. PULSAR_PATH="$(mdfind "kMDItemCFBundleIdentifier == 'com.github.pulsar'" | grep -v ShipIt | head -1 | xargs -0 dirname)"
  91. # Exit if Pulsar can't be found
  92. if [ ! -x "$PULSAR_PATH/$ATOM_APP_NAME" ]; then
  93. echo "Cannot locate ${ATOM_APP_NAME}, it is usually located in /Applications. Set the PULSAR_PATH environment variable to the directory containing ${ATOM_APP_NAME}."
  94. exit 1
  95. fi
  96. fi
  97. fi
  98. if [ $EXPECT_OUTPUT ]; then
  99. "$PULSAR_PATH/$ATOM_APP_NAME/Contents/MacOS/$ATOM_EXECUTABLE_NAME" --executed-from="$(pwd)" --pid=$$ "$@"
  100. ATOM_EXIT=$?
  101. if [ ${ATOM_EXIT} -eq 0 ] && [ -n "${EXIT_CODE_OVERRIDE}" ]; then
  102. exit "${EXIT_CODE_OVERRIDE}"
  103. else
  104. exit ${ATOM_EXIT}
  105. fi
  106. else
  107. open -a "$PULSAR_PATH/$ATOM_APP_NAME" -n -g --args --executed-from="$(pwd)" --pid=$$ --path-environment="$PATH" "$@"
  108. fi
  109. elif [ $OS == 'Linux' ]; then
  110. SCRIPT=$(readlink -f "$0")
  111. PULSAR_PATH="/opt/Pulsar/pulsar"
  112. #Will allow user to get context menu on cinnamon desktop enviroment
  113. #Add a check to make sure that DESKTOP_SESSION is set before attempting to grep it
  114. #expr substr is expecting 3 arguments string, index, length
  115. #If grep doesnt find anything is provides an empty string which causes the expr: syntax error: missing argument after '8' error - see pulsar-edit/pulsar#174
  116. #Im also not quite sure why they used grep instead of simply [ "${DESKTOP_SESSION}" == "cinnamon" ]
  117. if [ -n "${DESKTOP_SESSION}" ] && [ "$(expr substr $(printenv | grep 'DESKTOP_SESSION=') 17 8)" == "cinnamon" ]; then
  118. #This local path is almost assuredly wrong as it shouldnt exist in a standard install
  119. ACTION_PATH="resources/linux/desktopenviroment/cinnamon/pulsar.nemo_action"
  120. #Validate the file exists before attempting to copy it
  121. if [ -f "${ACTION_PATH}" ]; then
  122. cp "${$ACTION_PATH}" "/usr/share/nemo/actions/pulsar.nemo_action"
  123. fi
  124. fi
  125. #Set tmpdir only if tmpdir is unset
  126. : ${TMPDIR:=/tmp}
  127. [ -x "$PULSAR_PATH" ] || PULSAR_PATH="$TMPDIR/pulsar-build/Pulsar/pulsar"
  128. if [ $EXPECT_OUTPUT ]; then
  129. "$PULSAR_PATH" --executed-from="$(pwd)" --pid=$$ "$@" --no-sandbox
  130. ATOM_EXIT=$?
  131. if [ ${ATOM_EXIT} -eq 0 ] && [ -n "${EXIT_CODE_OVERRIDE}" ]; then
  132. exit "${EXIT_CODE_OVERRIDE}"
  133. else
  134. exit ${ATOM_EXIT}
  135. fi
  136. else
  137. (
  138. nohup "$PULSAR_PATH" --executed-from="$(pwd)" --pid=$$ "$@" --no-sandbox > "$ATOM_HOME/nohup.out" 2>&1
  139. if [ $? -ne 0 ]; then
  140. cat "$ATOM_HOME/nohup.out"
  141. exit $?
  142. fi
  143. ) &
  144. fi
  145. fi
  146. # Exits this process when Pulsar is used as $EDITOR
  147. on_die() {
  148. exit 0
  149. }
  150. trap 'on_die' SIGQUIT SIGTERM
  151. # If the wait flag is set, don't exit this process until Pulsar kills it.
  152. if [ $WAIT ]; then
  153. WAIT_FIFO="$ATOM_HOME/.wait_fifo"
  154. if [ ! -p "$WAIT_FIFO" ]; then
  155. rm -f "$WAIT_FIFO"
  156. mkfifo "$WAIT_FIFO"
  157. fi
  158. # Block endlessly by reading from a named pipe.
  159. exec 2>/dev/null
  160. read < "$WAIT_FIFO"
  161. # If the read completes for some reason, fall back to sleeping in a loop.
  162. while true; do
  163. sleep 1
  164. done
  165. fi