vimdo 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/Gemfile +23 -0
- data/Gemfile.lock +67 -0
- data/History.txt +6 -0
- data/Manifest.txt +12 -0
- data/README.md +106 -0
- data/Rakefile +34 -0
- data/bin/vimdo +22 -0
- data/lib/vimdo.rb +45 -0
- data/lib/vimdo/cli.rb +105 -0
- data/lib/vimdo/friendly_error.rb +31 -0
- data/lib/vimdo/ui.rb +126 -0
- data/lib/vimdo/version.rb +4 -0
- metadata +283 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 413d520ac752991279d4a5b9844e6560a4aaa076
|
4
|
+
data.tar.gz: 2e74dd8a044fdeb4d25ee2c8cff4506313e0e051
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 19000317c50f47480f30a9fb3dd806dd0932c7170bdfe1ea6e9b590e7c15a0526fc62cef31580402ae9a8f62e9aa9c4fe4d7d32c0a0c931120de904a0a5b97ac
|
7
|
+
data.tar.gz: f7bb539fa87c633ecb10da4f7b18e13df9f8d5b50c63b0e36cb1680c9bda7ce2a2858f9b01f9289700a1b61e0ca34b5bfa32fcd17fc519aa9f527904180f9a6f
|
data/Gemfile
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- ruby -*-
|
2
|
+
|
3
|
+
# DO NOT EDIT THIS FILE. Instead, edit Rakefile, and run `rake bundler:gemfile`.
|
4
|
+
|
5
|
+
source "https://rubygems.org/"
|
6
|
+
|
7
|
+
gem "vimrunner", "~>0.2.2"
|
8
|
+
gem "thor", "~>0.18.0"
|
9
|
+
|
10
|
+
gem "rdoc", "~>3.10", :group => [:development, :test]
|
11
|
+
gem "rspec", ">=2.13", :group => [:development, :test]
|
12
|
+
gem "rake", ">=10.0.0", :group => [:development, :test]
|
13
|
+
gem "hoe", ">=0", :group => [:development, :test]
|
14
|
+
gem "hoe-gemspec", ">=0", :group => [:development, :test]
|
15
|
+
gem "hoe-git", ">=0", :group => [:development, :test]
|
16
|
+
gem "hoe-version", ">=0", :group => [:development, :test]
|
17
|
+
gem "hoe-bundler", ">=0", :group => [:development, :test]
|
18
|
+
gem "guard", ">=0", :group => [:development, :test]
|
19
|
+
gem "guard-rspec", ">=0", :group => [:development, :test]
|
20
|
+
gem "terminal-notifier-guard", ">=0", :group => [:development, :test]
|
21
|
+
gem "growl", ">=0", :group => [:development, :test]
|
22
|
+
|
23
|
+
# vim: syntax=ruby
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
GEM
|
2
|
+
remote: https://rubygems.org/
|
3
|
+
specs:
|
4
|
+
coderay (1.0.9)
|
5
|
+
diff-lcs (1.2.2)
|
6
|
+
formatador (0.2.4)
|
7
|
+
growl (1.0.3)
|
8
|
+
guard (1.7.0)
|
9
|
+
formatador (>= 0.2.4)
|
10
|
+
listen (>= 0.6.0)
|
11
|
+
lumberjack (>= 1.0.2)
|
12
|
+
pry (>= 0.9.10)
|
13
|
+
thor (>= 0.14.6)
|
14
|
+
guard-rspec (2.5.2)
|
15
|
+
guard (>= 1.1)
|
16
|
+
rspec (~> 2.11)
|
17
|
+
hoe (3.5.2)
|
18
|
+
rake (>= 0.8, < 11.0)
|
19
|
+
hoe-bundler (1.2.0)
|
20
|
+
hoe (>= 2.2.0)
|
21
|
+
hoe-gemspec (1.0.0)
|
22
|
+
hoe (>= 2.2.0)
|
23
|
+
hoe-git (1.5.0)
|
24
|
+
hoe (>= 2.2.0)
|
25
|
+
hoe-version (1.2.0)
|
26
|
+
json (1.7.7)
|
27
|
+
listen (0.7.3)
|
28
|
+
lumberjack (1.0.3)
|
29
|
+
method_source (0.8.1)
|
30
|
+
pry (0.9.12)
|
31
|
+
coderay (~> 1.0.5)
|
32
|
+
method_source (~> 0.8)
|
33
|
+
slop (~> 3.4)
|
34
|
+
rake (10.0.4)
|
35
|
+
rdoc (3.12.2)
|
36
|
+
json (~> 1.4)
|
37
|
+
rspec (2.13.0)
|
38
|
+
rspec-core (~> 2.13.0)
|
39
|
+
rspec-expectations (~> 2.13.0)
|
40
|
+
rspec-mocks (~> 2.13.0)
|
41
|
+
rspec-core (2.13.1)
|
42
|
+
rspec-expectations (2.13.0)
|
43
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
44
|
+
rspec-mocks (2.13.1)
|
45
|
+
slop (3.4.4)
|
46
|
+
terminal-notifier-guard (1.5.3)
|
47
|
+
thor (0.18.1)
|
48
|
+
vimrunner (0.2.2)
|
49
|
+
|
50
|
+
PLATFORMS
|
51
|
+
ruby
|
52
|
+
|
53
|
+
DEPENDENCIES
|
54
|
+
growl
|
55
|
+
guard
|
56
|
+
guard-rspec
|
57
|
+
hoe
|
58
|
+
hoe-bundler
|
59
|
+
hoe-gemspec
|
60
|
+
hoe-git
|
61
|
+
hoe-version
|
62
|
+
rake (>= 10.0.0)
|
63
|
+
rdoc (~> 3.10)
|
64
|
+
rspec (>= 2.13)
|
65
|
+
terminal-notifier-guard
|
66
|
+
thor (~> 0.18.0)
|
67
|
+
vimrunner (~> 0.2.2)
|
data/History.txt
ADDED
data/Manifest.txt
ADDED
data/README.md
ADDED
@@ -0,0 +1,106 @@
|
|
1
|
+
# vimdo
|
2
|
+
|
3
|
+
* home :: http://zhaocai.github.com/vimdo
|
4
|
+
* rdoc :: http://rubydoc.info/gems/vimdo/
|
5
|
+
* code :: https://github.com/zhaocai/vimdo
|
6
|
+
* bugs :: https://github.com/zhaocai/vimdo/issues
|
7
|
+
|
8
|
+
|
9
|
+
## DESCRIPTION:
|
10
|
+
|
11
|
+
Vimdo is a ruby gem to automate tasks with vim remote servers.
|
12
|
+
Predefined tasks include diff, merge, etc. You can define your own recipes
|
13
|
+
to run tasks with Vim. For example, you can define `DirDiff` recipe:
|
14
|
+
|
15
|
+
```ruby
|
16
|
+
module VimDo
|
17
|
+
class CLI < Thor
|
18
|
+
|
19
|
+
desc "dirdiff", "directory diff in vim"
|
20
|
+
def dirdiff(from, to)
|
21
|
+
[from, to].each do |f|
|
22
|
+
unless File.directory?(f)
|
23
|
+
raise PathError "#{f} is not directory!"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
from, to = [from, to].map {|f| File.expand_path(f) }
|
28
|
+
commands(%Q{exec 'DirDiff ' fnameescape("#{from}") fnameescape("#{to}")})
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
```
|
35
|
+
|
36
|
+
Then run `vimdo dirdiff path/to/a path/to/b` from the command line or other tools
|
37
|
+
|
38
|
+
|
39
|
+
## INSTALLATION:
|
40
|
+
|
41
|
+
* `[sudo] macgem install vimdo`
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
## COMMAND LINE INTERFACE:
|
46
|
+
|
47
|
+
### VimDo commands:
|
48
|
+
vimdo commands # execute commands in vim
|
49
|
+
vimdo diff # diff in vim
|
50
|
+
vimdo edit # edit file +filename+ with Vim
|
51
|
+
vimdo help [COMMAND] # Describe available commands or one specific command
|
52
|
+
vimdo merge # LOCAL(= mine), MERGED(= yours), REMOTE(= merged output), [BASE(= common parent)]
|
53
|
+
vimdo normal # switch vim to normal mode and type the given keys
|
54
|
+
|
55
|
+
### Options:
|
56
|
+
-s, [--servername=servername to connect]
|
57
|
+
# Default: VIM
|
58
|
+
-e, [--executable=specifiy vim executable]
|
59
|
+
-u, [--vimrc=specifiy vimrc]
|
60
|
+
# Default: ~/.vimdorc
|
61
|
+
[--no-color=disable colorization in output]
|
62
|
+
-v, [--verbose=enable verbose output mode]
|
63
|
+
|
64
|
+
## RECIPES:
|
65
|
+
|
66
|
+
The path to search for recipes is defined in `~/.vimdorc` in yaml format.
|
67
|
+
|
68
|
+
```yaml
|
69
|
+
---
|
70
|
+
:recipes :
|
71
|
+
- ~/.vimdo/recipes/
|
72
|
+
|
73
|
+
```
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
## KNOWN ISSUE:
|
78
|
+
|
79
|
+
|
80
|
+
## DEVELOPERS:
|
81
|
+
|
82
|
+
After checking out the source, run:
|
83
|
+
|
84
|
+
$ rake newb
|
85
|
+
|
86
|
+
This task will install any missing dependencies, run the tests/specs,
|
87
|
+
and generate the RDoc.
|
88
|
+
|
89
|
+
## LICENSE:
|
90
|
+
|
91
|
+
Copyright (c) 2013 Zhao Cai <caizhaoff@gmail.com>
|
92
|
+
|
93
|
+
This program is free software: you can redistribute it and/or modify it under
|
94
|
+
the terms of the GNU General Public License as published by the Free Software
|
95
|
+
Foundation, either version 3 of the License, or (at your option)
|
96
|
+
any later version.
|
97
|
+
|
98
|
+
This program is distributed in the hope that it will be useful, but WITHOUT
|
99
|
+
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
100
|
+
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
101
|
+
|
102
|
+
You should have received a copy of the GNU General Public License along with
|
103
|
+
this program. If not, see <http://www.gnu.org/licenses/>.
|
104
|
+
|
105
|
+
|
106
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
# -*- ruby -*-
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'hoe'
|
5
|
+
|
6
|
+
Hoe.plugin :gemspec
|
7
|
+
Hoe.plugin :bundler
|
8
|
+
Hoe.plugin :git
|
9
|
+
Hoe.plugin :test
|
10
|
+
Hoe.plugin :version
|
11
|
+
|
12
|
+
Hoe.spec 'vimdo' do
|
13
|
+
|
14
|
+
developer('Zhao Cai', 'caizhaoff@gmail.com')
|
15
|
+
license 'GPL-3'
|
16
|
+
|
17
|
+
extra_deps << ['vimrunner', '~> 0.2.2']
|
18
|
+
extra_deps << ['thor', '~> 0.18.0']
|
19
|
+
|
20
|
+
extra_dev_deps << ['rspec', '>= 2.13']
|
21
|
+
extra_dev_deps << ['rake', '>= 10.0.0']
|
22
|
+
extra_dev_deps << ['hoe'] << ['hoe-gemspec'] << ['hoe-git'] << ['hoe-version'] << ['hoe-bundler']
|
23
|
+
extra_dev_deps << ['guard'] << ['guard-rspec'] << ['terminal-notifier-guard'] << ['growl']
|
24
|
+
end
|
25
|
+
|
26
|
+
%w{major minor patch}.each { |v|
|
27
|
+
desc "Bump #{v.capitalize} Version"
|
28
|
+
task "bump:#{v}", [:message] => ["version:bump:#{v}"] do |t, args|
|
29
|
+
m = args[:message] ? args[:message] : "Bump version to #{ENV["VERSION"]}"
|
30
|
+
sh "git commit -am '#{m}'"
|
31
|
+
end
|
32
|
+
}
|
33
|
+
|
34
|
+
# vim: syntax=ruby
|
data/bin/vimdo
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# Trap interrupts to quit cleanly. See
|
4
|
+
# https://twitter.com/mitchellh/status/283014103189053442
|
5
|
+
# Signal.trap("INT") { exit 1 }
|
6
|
+
|
7
|
+
($LOAD_PATH << File.expand_path("../../lib", __FILE__)).uniq!
|
8
|
+
require 'rubygems' unless defined? Gem # rubygems is only needed in 1.8
|
9
|
+
|
10
|
+
require 'vimdo'
|
11
|
+
require 'vimdo/cli'
|
12
|
+
require 'vimdo/friendly_error'
|
13
|
+
|
14
|
+
|
15
|
+
VimDo.with_friendly_errors { VimDo.load_recipes ; VimDo::CLI.start }
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
# ~~ modeline ~~ [[[1 -------------------------------------------------------
|
20
|
+
# vim: set ft=ruby ts=2 sw=2 tw=78 fdm=syntax fmr=[[[,]]] fdl=1 :
|
21
|
+
|
22
|
+
|
data/lib/vimdo.rb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
require "vimrunner"
|
2
|
+
|
3
|
+
require 'vimdo/version'
|
4
|
+
require 'vimdo/ui'
|
5
|
+
require 'yaml'
|
6
|
+
|
7
|
+
module VimDo
|
8
|
+
|
9
|
+
class VimDoError < RuntimeError
|
10
|
+
def self.status_code(code)
|
11
|
+
define_method(:status_code) { code }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class PathError < VimDoError; status_code(14) ; end
|
16
|
+
|
17
|
+
class << self
|
18
|
+
attr_writer :ui, :rc
|
19
|
+
|
20
|
+
def ui
|
21
|
+
@ui ||= UI.new
|
22
|
+
end
|
23
|
+
|
24
|
+
def rc
|
25
|
+
@rc ||= File.expand_path("~/.vimdorc")
|
26
|
+
end
|
27
|
+
|
28
|
+
def connect(options= {})
|
29
|
+
options[:name] = options[:servername]
|
30
|
+
Vimrunner::Server.new(options).connect
|
31
|
+
end
|
32
|
+
|
33
|
+
def load_recipes
|
34
|
+
if File.exists?(rc)
|
35
|
+
settings = YAML::load( File.read(rc) )
|
36
|
+
settings.fetch(:recipes, []).map {|f| File.expand_path(f) }.each { |rp|
|
37
|
+
Dir[ File.join(rp, '*.vimdo') ].each { |r|
|
38
|
+
load r
|
39
|
+
}
|
40
|
+
}
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
data/lib/vimdo/cli.rb
ADDED
@@ -0,0 +1,105 @@
|
|
1
|
+
require 'thor'
|
2
|
+
require "vimdo/ui"
|
3
|
+
|
4
|
+
module VimDo
|
5
|
+
|
6
|
+
class CLI < Thor
|
7
|
+
include Thor::Actions
|
8
|
+
package_name "VimDo"
|
9
|
+
|
10
|
+
class_option "servername",
|
11
|
+
:type => :string,
|
12
|
+
:banner => "servername to connect",
|
13
|
+
:default => 'VIM',
|
14
|
+
:aliases => "-s"
|
15
|
+
class_option "executable",
|
16
|
+
:type => :string,
|
17
|
+
:banner => "specifiy vim executable",
|
18
|
+
:aliases => "-e"
|
19
|
+
class_option "vimrc",
|
20
|
+
:type => :string,
|
21
|
+
:default => "~/.vimdorc",
|
22
|
+
:banner => "specifiy vimrc",
|
23
|
+
:aliases => "-u"
|
24
|
+
class_option "no-color",
|
25
|
+
:type => :boolean,
|
26
|
+
:banner => "disable colorization in output"
|
27
|
+
class_option "verbose",
|
28
|
+
:type => :boolean,
|
29
|
+
:banner => "enable verbose output mode",
|
30
|
+
:aliases => "-v"
|
31
|
+
|
32
|
+
def initialize(*)
|
33
|
+
super
|
34
|
+
VimDo.ui = UI::Shell.new(options)
|
35
|
+
VimDo.ui.level = "debug" if options["verbose"]
|
36
|
+
end
|
37
|
+
|
38
|
+
desc "commands", "execute commands in vim"
|
39
|
+
def commands(*cmd)
|
40
|
+
vim.normal(":<C-u>#{cmd.join(' <Bar> ')}<CR>")
|
41
|
+
end
|
42
|
+
|
43
|
+
desc "normal", "switch vim to normal mode and type the given keys"
|
44
|
+
def normal(keys = "")
|
45
|
+
vim.normal(keys)
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
desc "edit", "edit file +filename+ with Vim"
|
50
|
+
def edit(filename)
|
51
|
+
vim.edit(filename)
|
52
|
+
end
|
53
|
+
|
54
|
+
desc "diff", "diff in vim"
|
55
|
+
def diff(from, to)
|
56
|
+
[from, to].each do |f|
|
57
|
+
raise PathError "#{f} is not readable!" unless File.readable?(f)
|
58
|
+
end
|
59
|
+
from = File.expand_path(from)
|
60
|
+
to = File.expand_path(to)
|
61
|
+
from, to = [from, to].map {|f| File.expand_path(f) }
|
62
|
+
|
63
|
+
commands('tabnew', 'edit '+vim.fesc(from), 'diffsplit '+vim.fesc(to))
|
64
|
+
end
|
65
|
+
|
66
|
+
desc "merge", "LOCAL(= mine), MERGED(= yours), REMOTE(= merged output), [BASE(= common parent)]"
|
67
|
+
long_desc <<-LONGDESC
|
68
|
+
LOCAL(= mine), MERGED(= yours), REMOTE(= merged output), [BASE(= common parent)]
|
69
|
+
LONGDESC
|
70
|
+
def merge(local, merge, remote, base = nil)
|
71
|
+
|
72
|
+
[local, merge, remote].each do |f|
|
73
|
+
unless File.readable?(f)
|
74
|
+
raise PathError "#{f} is not readable!"
|
75
|
+
end
|
76
|
+
end
|
77
|
+
raise PathError "#{base} is not readable!" unless File.readable?(base) or base.nil?
|
78
|
+
|
79
|
+
local, merge, remote = [local, merge, remote].map {|f| File.expand_path(f) }
|
80
|
+
|
81
|
+
merge_command =
|
82
|
+
'tabnew<Bar>edit ' + vim.fesc(local) +
|
83
|
+
'<Bar>diffsplit ' + vim.fesc(merge) +
|
84
|
+
'<Bar>diffsplit ' + vim.fesc(remote)
|
85
|
+
|
86
|
+
if base
|
87
|
+
base_split_command =
|
88
|
+
"<Bar>diffsplit #{vim.fesc(File.expand_path(base))}<Bar>wincmd J"
|
89
|
+
else
|
90
|
+
base_split_command = ''
|
91
|
+
end
|
92
|
+
|
93
|
+
switch_command = "<Bar>2wincmd w"
|
94
|
+
|
95
|
+
commands(merge_command + base_split_command + switch_command)
|
96
|
+
end
|
97
|
+
|
98
|
+
|
99
|
+
private
|
100
|
+
def vim
|
101
|
+
@vim ||= VimDo.connect(options)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module VimDo
|
2
|
+
def self.with_friendly_errors
|
3
|
+
yield
|
4
|
+
rescue VimDo::VimDoError => e
|
5
|
+
VimDo.ui.error e.message, :wrap => true
|
6
|
+
VimDo.ui.trace e
|
7
|
+
exit e.status_code
|
8
|
+
rescue LoadError => e
|
9
|
+
raise e unless e.message =~ /cannot load such file -- openssl|openssl.so|libcrypto.so/
|
10
|
+
VimDo.ui.error "\nCould not load OpenSSL."
|
11
|
+
VimDo.ui.warn <<-WARN, :wrap => true
|
12
|
+
You must recompile Ruby with OpenSSL support or change the sources in your \
|
13
|
+
Gemfile from 'https' to 'http'. Instructions for compiling with OpenSSL \
|
14
|
+
using RVM are available at rvm.io/packages/openssl.
|
15
|
+
WARN
|
16
|
+
VimDo.ui.trace e
|
17
|
+
exit 1
|
18
|
+
rescue Interrupt => e
|
19
|
+
VimDo.ui.error "\nQuitting..."
|
20
|
+
VimDo.ui.trace e
|
21
|
+
exit 1
|
22
|
+
rescue SystemExit => e
|
23
|
+
exit e.status
|
24
|
+
rescue Exception => e
|
25
|
+
VimDo.ui.error <<-ERR, :wrap => true
|
26
|
+
Unfortunately, a fatal error has occurred. Please see the VimDo \
|
27
|
+
troubleshooting documentation or raise an issue in github. Thanks!
|
28
|
+
ERR
|
29
|
+
raise e
|
30
|
+
end
|
31
|
+
end
|
data/lib/vimdo/ui.rb
ADDED
@@ -0,0 +1,126 @@
|
|
1
|
+
module VimDo
|
2
|
+
class UI
|
3
|
+
def warn(message, newline = nil)
|
4
|
+
end
|
5
|
+
|
6
|
+
def debug(message, newline = nil)
|
7
|
+
end
|
8
|
+
|
9
|
+
def trace(message, newline = nil)
|
10
|
+
end
|
11
|
+
|
12
|
+
def error(message, newline = nil)
|
13
|
+
end
|
14
|
+
|
15
|
+
def info(message, newline = nil)
|
16
|
+
end
|
17
|
+
|
18
|
+
def confirm(message, newline = nil)
|
19
|
+
end
|
20
|
+
|
21
|
+
def debug?
|
22
|
+
false
|
23
|
+
end
|
24
|
+
|
25
|
+
def ask(message)
|
26
|
+
end
|
27
|
+
|
28
|
+
class Shell < UI
|
29
|
+
LEVELS = %w(silent error warn confirm info debug)
|
30
|
+
|
31
|
+
attr_writer :shell
|
32
|
+
|
33
|
+
def initialize(options = {})
|
34
|
+
if options["no-color"] || !STDOUT.tty?
|
35
|
+
Thor::Base.shell = Thor::Shell::Basic
|
36
|
+
end
|
37
|
+
@shell = Thor::Base.shell.new
|
38
|
+
@level = ENV['DEBUG'] ? "debug" : "info"
|
39
|
+
end
|
40
|
+
|
41
|
+
def info(msg, newline = nil)
|
42
|
+
tell_me(msg, nil, newline) if level("info")
|
43
|
+
end
|
44
|
+
|
45
|
+
def confirm(msg, newline = nil)
|
46
|
+
tell_me(msg, :green, newline) if level("confirm")
|
47
|
+
end
|
48
|
+
|
49
|
+
def warn(msg, newline = nil)
|
50
|
+
tell_me(msg, :yellow, newline) if level("warn")
|
51
|
+
end
|
52
|
+
|
53
|
+
def error(msg, newline = nil)
|
54
|
+
tell_me(msg, :red, newline) if level("error")
|
55
|
+
end
|
56
|
+
|
57
|
+
def debug(msg, newline = nil)
|
58
|
+
tell_me(msg, nil, newline) if level("debug")
|
59
|
+
end
|
60
|
+
|
61
|
+
def debug?
|
62
|
+
# needs to be false instead of nil to be newline param to other methods
|
63
|
+
level("debug")
|
64
|
+
end
|
65
|
+
|
66
|
+
def quiet?
|
67
|
+
LEVELS.index(@level) <= LEVELS.index("warn")
|
68
|
+
end
|
69
|
+
|
70
|
+
def ask(msg)
|
71
|
+
@shell.ask(msg)
|
72
|
+
end
|
73
|
+
|
74
|
+
def level=(level)
|
75
|
+
raise ArgumentError unless LEVELS.include?(level.to_s)
|
76
|
+
@level = level
|
77
|
+
end
|
78
|
+
|
79
|
+
def level(name = nil)
|
80
|
+
name ? LEVELS.index(name) <= LEVELS.index(@level) : @level
|
81
|
+
end
|
82
|
+
|
83
|
+
def trace(e, newline = nil)
|
84
|
+
msg = ["#{e.class}: #{e.message}", *e.backtrace].join("\n")
|
85
|
+
if debug?
|
86
|
+
tell_me(msg, nil, newline)
|
87
|
+
elsif @trace
|
88
|
+
STDERR.puts "#{msg}#{newline}"
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def silence
|
93
|
+
old_level, @level = @level, "silent"
|
94
|
+
yield
|
95
|
+
ensure
|
96
|
+
@level = old_level
|
97
|
+
end
|
98
|
+
|
99
|
+
private
|
100
|
+
|
101
|
+
# valimism
|
102
|
+
def tell_me(msg, color = nil, newline = nil)
|
103
|
+
msg = word_wrap(msg) if newline.is_a?(Hash) && newline[:wrap]
|
104
|
+
if newline.nil?
|
105
|
+
@shell.say(msg, color)
|
106
|
+
else
|
107
|
+
@shell.say(msg, color, newline)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def strip_leading_spaces(text)
|
112
|
+
spaces = text[/\A\s+/, 0]
|
113
|
+
spaces ? text.gsub(/#{spaces}/, '') : text
|
114
|
+
end
|
115
|
+
|
116
|
+
def word_wrap(text, line_width = @shell.terminal_width)
|
117
|
+
strip_leading_spaces(text).split("\n").collect do |line|
|
118
|
+
line.length > line_width ? line.gsub(/(.{1,#{line_width}})(\s+|$)/, "\\1\n").strip : line
|
119
|
+
end * "\n"
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
|
metadata
ADDED
@@ -0,0 +1,283 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: vimdo
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Zhao Cai
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-04-07 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: vimrunner
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.2.2
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.2.2
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: thor
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.18.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.18.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rdoc
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.10'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.10'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.13'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '2.13'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 10.0.0
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 10.0.0
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: hoe
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: hoe-gemspec
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: hoe-git
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - '>='
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: hoe-version
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - '>='
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - '>='
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: hoe-bundler
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - '>='
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - '>='
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: guard
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - '>='
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - '>='
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: guard-rspec
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - '>='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - '>='
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: terminal-notifier-guard
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - '>='
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0'
|
188
|
+
type: :development
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - '>='
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
195
|
+
- !ruby/object:Gem::Dependency
|
196
|
+
name: growl
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - '>='
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: '0'
|
202
|
+
type: :development
|
203
|
+
prerelease: false
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - '>='
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '0'
|
209
|
+
description: |-
|
210
|
+
Vimdo is a ruby gem to automate tasks with vim remote servers.
|
211
|
+
Predefined tasks include diff, merge, etc. You can define your own recipes
|
212
|
+
to run tasks with Vim. For example, you can define `DirDiff` recipe:
|
213
|
+
|
214
|
+
```ruby
|
215
|
+
module VimDo
|
216
|
+
class CLI < Thor
|
217
|
+
|
218
|
+
desc "dirdiff", "directory diff in vim"
|
219
|
+
def dirdiff(from, to)
|
220
|
+
[from, to].each do |f|
|
221
|
+
unless File.directory?(f)
|
222
|
+
raise PathError "#{f} is not directory!"
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
from, to = [from, to].map {|f| File.expand_path(f) }
|
227
|
+
commands(%Q{exec 'DirDiff ' fnameescape("#{from}") fnameescape("#{to}")})
|
228
|
+
end
|
229
|
+
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
233
|
+
```
|
234
|
+
|
235
|
+
Then run `vimdo dirdiff path/to/a path/to/b` from the command line or other tools
|
236
|
+
email:
|
237
|
+
- caizhaoff@gmail.com
|
238
|
+
executables:
|
239
|
+
- vimdo
|
240
|
+
extensions: []
|
241
|
+
extra_rdoc_files:
|
242
|
+
- History.txt
|
243
|
+
- Manifest.txt
|
244
|
+
files:
|
245
|
+
- Gemfile
|
246
|
+
- Gemfile.lock
|
247
|
+
- History.txt
|
248
|
+
- Manifest.txt
|
249
|
+
- README.md
|
250
|
+
- Rakefile
|
251
|
+
- bin/vimdo
|
252
|
+
- lib/vimdo.rb
|
253
|
+
- lib/vimdo/cli.rb
|
254
|
+
- lib/vimdo/friendly_error.rb
|
255
|
+
- lib/vimdo/ui.rb
|
256
|
+
- lib/vimdo/version.rb
|
257
|
+
homepage: http://zhaocai.github.com/vimdo
|
258
|
+
licenses:
|
259
|
+
- GPL-3
|
260
|
+
metadata: {}
|
261
|
+
post_install_message:
|
262
|
+
rdoc_options:
|
263
|
+
- --main
|
264
|
+
- README.md
|
265
|
+
require_paths:
|
266
|
+
- lib
|
267
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
268
|
+
requirements:
|
269
|
+
- - '>='
|
270
|
+
- !ruby/object:Gem::Version
|
271
|
+
version: '0'
|
272
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
273
|
+
requirements:
|
274
|
+
- - '>='
|
275
|
+
- !ruby/object:Gem::Version
|
276
|
+
version: '0'
|
277
|
+
requirements: []
|
278
|
+
rubyforge_project: vimdo
|
279
|
+
rubygems_version: 2.0.3
|
280
|
+
signing_key:
|
281
|
+
specification_version: 4
|
282
|
+
summary: Vimdo is a ruby gem to automate tasks with vim remote servers
|
283
|
+
test_files: []
|