-
Notifications
You must be signed in to change notification settings - Fork 0
/
iterm-spec.vim
82 lines (58 loc) · 1.47 KB
/
iterm-spec.vim
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
" Defines helpers to run shell commands in the current iTerm terminal.
" Don't try to load if we don't have Ruby support.
if !has("ruby")
finish
endif
command! SpecFocused :ruby ITerm.spec_focused
command! SpecFile :ruby ITerm.spec_all
command! SpecLast :ruby ITerm.spec_last
ruby <<EOF
require 'pathname'
module ITerm
def self.spec_file
Pathname(VIM::Buffer.current.name)
end
def self.project_root
`cd #{ spec_file.dirname } && git rev-parse --show-toplevel`.chomp
end
def self.spec_focused
line_number = VIM::Buffer.current.line_number
spec "#{spec_file}:#{line_number}"
end
def self.spec_all
spec spec_file
end
def self.spec_last
if @last_specced && !@last_specced.to_s.empty?
spec @last_specced
else
VIM::message "no last spec"
end
end
def self.spec(what)
@last_specced = what
exec("clear")
exec("cd #{ project_root } && bundle exec rspec #{ what }")
end
def self.exec(command)
osascript <<-EOF
tell application "iTerm"
try
set mySession to the current session of the current terminal
on error
set myTerminal to (make new terminal)
tell myTerminal
launch session "Default"
set mySession to the current session
end tell
end try
tell mySession to write text "#{command}"
end tell
EOF
end
private
def self.osascript(script)
system("osascript", "-e", script)
end
end
EOF