mirror of
				https://github.com/ohmyzsh/ohmyzsh.git
				synced 2024-05-11 05:55:17 +00:00 
			
		
		
		
	osx: fix tab* functions so cd works in iTerm2, exit status is correct, and
error messages are not discarded.
This commit is contained in:
		@@ -5,29 +5,35 @@
 | 
			
		||||
#       VERSION:  1.1.0
 | 
			
		||||
# ------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
function tab() {
 | 
			
		||||
  local command="cd \\\"$PWD\\\"; clear; "
 | 
			
		||||
  (( $# > 0 )) && command="${command}; $*"
 | 
			
		||||
 | 
			
		||||
  the_app=$(
 | 
			
		||||
function _omz_osx_get_frontmost_app() {
 | 
			
		||||
  local the_app=$(
 | 
			
		||||
    osascript 2>/dev/null <<EOF
 | 
			
		||||
      tell application "System Events"
 | 
			
		||||
        name of first item of (every process whose frontmost is true)
 | 
			
		||||
      end tell
 | 
			
		||||
EOF
 | 
			
		||||
  )
 | 
			
		||||
  echo "$the_app"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
  [[ "$the_app" == 'Terminal' ]] && {
 | 
			
		||||
    osascript 2>/dev/null <<EOF
 | 
			
		||||
function tab() {
 | 
			
		||||
  # Must not have trailing semicolon, for iTerm compatibility
 | 
			
		||||
  local command="cd \\\"$PWD\\\"; clear"
 | 
			
		||||
  (( $# > 0 )) && command="${command}; $*"
 | 
			
		||||
 | 
			
		||||
  local the_app=$(_omz_osx_get_frontmost_app)
 | 
			
		||||
 | 
			
		||||
  if [[ "$the_app" == 'Terminal' ]]; then
 | 
			
		||||
    # Discarding stdout to quash "tab N of window id XXX" output
 | 
			
		||||
    osascript >/dev/null <<EOF
 | 
			
		||||
      tell application "System Events"
 | 
			
		||||
        tell process "Terminal" to keystroke "t" using command down
 | 
			
		||||
        tell application "Terminal" to do script "${command}" in front window
 | 
			
		||||
      end tell
 | 
			
		||||
      tell application "Terminal" to do script "${command}" in front window
 | 
			
		||||
EOF
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  [[ "$the_app" == 'iTerm' ]] && {
 | 
			
		||||
    osascript 2>/dev/null <<EOF
 | 
			
		||||
  elif [[ "$the_app" == 'iTerm' ]]; then
 | 
			
		||||
    osascript <<EOF
 | 
			
		||||
      tell application "iTerm"
 | 
			
		||||
        set current_terminal to current terminal
 | 
			
		||||
        tell current_terminal
 | 
			
		||||
@@ -35,29 +41,27 @@ EOF
 | 
			
		||||
          set current_session to current session
 | 
			
		||||
          tell current_session
 | 
			
		||||
            write text "${command}"
 | 
			
		||||
            keystroke return
 | 
			
		||||
          end tell
 | 
			
		||||
        end tell
 | 
			
		||||
      end tell
 | 
			
		||||
EOF
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  else
 | 
			
		||||
    echo "tab: unsupported terminal app: $the_app"
 | 
			
		||||
    false
 | 
			
		||||
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function vsplit_tab() {
 | 
			
		||||
  local command="cd \\\"$PWD\\\""
 | 
			
		||||
  local command="cd \\\"$PWD\\\"; clear"
 | 
			
		||||
  (( $# > 0 )) && command="${command}; $*"
 | 
			
		||||
 | 
			
		||||
  the_app=$(
 | 
			
		||||
    osascript 2>/dev/null <<EOF
 | 
			
		||||
      tell application "System Events"
 | 
			
		||||
        name of first item of (every process whose frontmost is true)
 | 
			
		||||
      end tell
 | 
			
		||||
EOF
 | 
			
		||||
  )
 | 
			
		||||
  local the_app=$(_omz_osx_get_frontmost_app)
 | 
			
		||||
 | 
			
		||||
  [[ "$the_app" == 'iTerm' ]] && {
 | 
			
		||||
    osascript 2>/dev/null <<EOF
 | 
			
		||||
      tell application "iTerm" to activate
 | 
			
		||||
  if [[ "$the_app" == 'iTerm' ]]; then
 | 
			
		||||
    osascript <<EOF
 | 
			
		||||
      -- tell application "iTerm" to activate
 | 
			
		||||
 | 
			
		||||
      tell application "System Events"
 | 
			
		||||
        tell process "iTerm"
 | 
			
		||||
@@ -65,26 +69,24 @@ EOF
 | 
			
		||||
            click
 | 
			
		||||
          end tell
 | 
			
		||||
        end tell
 | 
			
		||||
        keystroke "${command}; clear;"
 | 
			
		||||
        keystroke return
 | 
			
		||||
        keystroke "${command} \n"
 | 
			
		||||
      end tell
 | 
			
		||||
EOF
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  else
 | 
			
		||||
    echo "$0: unsupported terminal app: $the_app" >&2
 | 
			
		||||
    false
 | 
			
		||||
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function split_tab() {
 | 
			
		||||
  local command="cd \\\"$PWD\\\""
 | 
			
		||||
  local command="cd \\\"$PWD\\\"; clear"
 | 
			
		||||
  (( $# > 0 )) && command="${command}; $*"
 | 
			
		||||
 | 
			
		||||
  the_app=$(
 | 
			
		||||
    osascript 2>/dev/null <<EOF
 | 
			
		||||
      tell application "System Events"
 | 
			
		||||
        name of first item of (every process whose frontmost is true)
 | 
			
		||||
      end tell
 | 
			
		||||
EOF
 | 
			
		||||
  )
 | 
			
		||||
  local the_app=$(_omz_osx_get_frontmost_app)
 | 
			
		||||
 | 
			
		||||
  [[ "$the_app" == 'iTerm' ]] && {
 | 
			
		||||
  if [[ "$the_app" == 'iTerm' ]]; then
 | 
			
		||||
    osascript 2>/dev/null <<EOF
 | 
			
		||||
      tell application "iTerm" to activate
 | 
			
		||||
 | 
			
		||||
@@ -94,11 +96,15 @@ EOF
 | 
			
		||||
            click
 | 
			
		||||
          end tell
 | 
			
		||||
        end tell
 | 
			
		||||
        keystroke "${command}; clear;"
 | 
			
		||||
        keystroke return
 | 
			
		||||
        keystroke "${command} \n"
 | 
			
		||||
      end tell
 | 
			
		||||
EOF
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  else
 | 
			
		||||
    echo "$0: unsupported terminal app: $the_app" >&2
 | 
			
		||||
    false
 | 
			
		||||
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function pfd() {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user