Instantly share code, notes, and snippets.
Created
June 21, 2016 17:55
-
Star
0
(0)
You must be signed in to star a gist -
Fork
0
(0)
You must be signed in to fork a gist
-
-
Save mortonfox/d27d5777c04373feea75c549f93fa2bd to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| " ============================================================================ | |
| " File: iterm_menu_item.vim | |
| " Description: plugin for NERD Tree that opens selected path in iTerm. | |
| " Maintainer: Po Shan Cheah <morton@mortonfox.com> | |
| " Last Change: August 21, 2013 | |
| " ============================================================================ | |
| if exists("g:loaded_nerdtree_iterm_menu") | |
| finish | |
| endif | |
| let g:loaded_nerdtree_iterm_menu = 1 | |
| " Add menu item to NERD Tree to open selected dir in iTerm. | |
| if has("gui_mac") || has("gui_macvim") | |
| call NERDTreeAddMenuItem({'text': 'open shell in (i)term', 'shortcut': 'i', 'callback': 'NERDTreeOpenIterm'}) | |
| endif | |
| " There is a lot of boilerplate AppleScript here but it does the following: | |
| " - activates iTerm | |
| " - opens a terminal if necessary | |
| " - opens a new session | |
| " - runs a cd command in the new session | |
| " The first argument to osascript will be the cd path. | |
| let s:iterm_script = "on run argv\n" | |
| let s:iterm_script .= " tell application \"iTerm\"\n" | |
| let s:iterm_script .= " set isRunning to (it is running)\n" | |
| let s:iterm_script .= " set myterm to (current terminal)\n" | |
| let s:iterm_script .= " try\n" | |
| let s:iterm_script .= " set tmp to myterm\n" | |
| let s:iterm_script .= " on error\n" | |
| let s:iterm_script .= " set myterm to (make new terminal)\n" | |
| let s:iterm_script .= " end try\n" | |
| let s:iterm_script .= " tell myterm\n" | |
| let s:iterm_script .= " if not isRunning then\n" | |
| let s:iterm_script .= " activate\n" | |
| let s:iterm_script .= " end if\n" | |
| let s:iterm_script .= " set newSession to (launch session \"Default\")\n" | |
| let s:iterm_script .= " tell the last session\n" | |
| let s:iterm_script .= " write text \"clear\"\n" | |
| let s:iterm_script .= " write text \"cd \\\"\" & item 1 of argv & \"\\\"\"\n" | |
| let s:iterm_script .= " end tell\n" | |
| let s:iterm_script .= " if not isRunning then\n" | |
| let s:iterm_script .= " terminate the first session\n" | |
| let s:iterm_script .= " end if\n" | |
| let s:iterm_script .= " end tell\n" | |
| let s:iterm_script .= " end tell\n" | |
| let s:iterm_script .= "end run\n" | |
| " This script is for iTerm 2 2.9 beta and 3.x. | |
| let s:iterm_script_v3 = '' | |
| let s:iterm_script_v3 .= 'on run argv'."\n" | |
| let s:iterm_script_v3 .= ' tell application "iTerm"'."\n" | |
| let s:iterm_script_v3 .= ' set gottab to false'."\n" | |
| let s:iterm_script_v3 .= ' '."\n" | |
| let s:iterm_script_v3 .= ' -- If iTerm is not running, start it.'."\n" | |
| let s:iterm_script_v3 .= ' if it is not running then'."\n" | |
| let s:iterm_script_v3 .= ' activate'."\n" | |
| let s:iterm_script_v3 .= ' set gottab to true'."\n" | |
| let s:iterm_script_v3 .= ' end if'."\n" | |
| let s:iterm_script_v3 .= ' '."\n" | |
| let s:iterm_script_v3 .= ' tell the current window'."\n" | |
| let s:iterm_script_v3 .= ' try'."\n" | |
| let s:iterm_script_v3 .= ' set tmp to (current tab)'."\n" | |
| let s:iterm_script_v3 .= ' on error'."\n" | |
| let s:iterm_script_v3 .= ' -- Handle the case where iTerm is running but has no windows open.'."\n" | |
| let s:iterm_script_v3 .= ' set curwindow to (create window with profile "Default")'."\n" | |
| let s:iterm_script_v3 .= ' set gottab to true'."\n" | |
| let s:iterm_script_v3 .= ' end try'."\n" | |
| let s:iterm_script_v3 .= ' end tell'."\n" | |
| let s:iterm_script_v3 .= ' '."\n" | |
| let s:iterm_script_v3 .= ' -- Create a tab if we have not already done so by running iTerm or creating a window.'."\n" | |
| let s:iterm_script_v3 .= ' if not gottab then'."\n" | |
| let s:iterm_script_v3 .= ' tell the current window'."\n" | |
| let s:iterm_script_v3 .= ' create tab with profile "Default"'."\n" | |
| let s:iterm_script_v3 .= ' end tell'."\n" | |
| let s:iterm_script_v3 .= ' end if'."\n" | |
| let s:iterm_script_v3 .= ' '."\n" | |
| let s:iterm_script_v3 .= ' -- Finally, we can run the commands.'."\n" | |
| let s:iterm_script_v3 .= ' activate'."\n" | |
| let s:iterm_script_v3 .= ' tell the current window'."\n" | |
| let s:iterm_script_v3 .= ' tell the current tab'."\n" | |
| let s:iterm_script_v3 .= ' tell the current session'."\n" | |
| let s:iterm_script_v3 .= ' write text "clear"'."\n" | |
| let s:iterm_script_v3 .= ' write text "cd \"" & item 1 of argv & "\""'."\n" | |
| let s:iterm_script_v3 .= ' end tell'."\n" | |
| let s:iterm_script_v3 .= ' end tell'."\n" | |
| let s:iterm_script_v3 .= ' end tell'."\n" | |
| let s:iterm_script_v3 .= ' end tell'."\n" | |
| let s:iterm_script_v3 .= 'end run'."\n" | |
| function! NERDTreeOpenIterm() | |
| let curDirNode = g:NERDTreeDirNode.GetSelected() | |
| let path = curDirNode.path.str() | |
| let iterm_version = get(g:, 'nerdtree_iterm_iterm_version', 3) | |
| let output = system('osascript - "'.path.'"', iterm_version >= 3 ? s:iterm_script_v3 : s:iterm_script) | |
| if v:shell_error != 0 | |
| redraw | |
| echohl ErrorMsg | |
| echomsg 'Error opening iTerm shell: '.output | |
| echohl None | |
| endif | |
| endfunction | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment