lab42_tmux2 0.0.4 → 0.0.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: aa6d271b6905b366c4b25b82446a8704b74c7472
4
- data.tar.gz: 85114f4fe2219da5a411b0ab9cb08cd1ac12abd3
3
+ metadata.gz: 79993d86d50f7c16d0da14ae7b0f328e6cc4ecdf
4
+ data.tar.gz: ce574b34edc975cb667c7ebec4e848b65db6e3b3
5
5
  SHA512:
6
- metadata.gz: 1725b3048d60964398e95a044267b781b86c354c8f921447529e36f145d976eb0d53b541054d3864b8667f4d050f50e16c855e9cda7149ababd0c07ca7c5a957
7
- data.tar.gz: bd945cd058a3be6b6f93b5791fc533ed386947e7341556533b7426fae0c4ce3b49e2ff4d15c34cc06dc9dfe6658b1f8e2d2e068b52b5910011bdd8ac32fd7065
6
+ metadata.gz: 6ff696863217be3ba06ebae74000eaf979eddbfca3c9f142a71d59c635f7116cb6f14724ca752ed889b6c988bf8a5578000ab5f521846b0c2ee4c9222e427420
7
+ data.tar.gz: 0e4b95d44b3935d5567c7512e1f2b3f31a0616cf79f234d8a9fcc4832d9bb59f0987f729954dbea2ce5c552c6a8fb43bb76de2e30dfe04ed13d75c0cded78b47
data/README.md CHANGED
@@ -134,8 +134,55 @@ end
134
134
  Plugins are easy to write, just MP the `Lab42::Tmux::Session` class. However precise guidelines
135
135
  how to do this will be available soon, also you might want to create some configuration.
136
136
 
137
- The plugin guidelines and some plugins (vi, ruby, rvm, python's virtualenv) are planned for
138
- the near future.
137
+ However, the goal of plugins being to be combineable the `lab42_tmux2` gem offers a mechanism to
138
+ protect plugins from each other. This works as follows:
139
+
140
+ #### A Vim Plugin
141
+
142
+ ##### Commands, The Easy One
143
+
144
+ Instead of MPatching Lab42::Tmux::Session::Commands you just write your own module of commands, e.g.
145
+
146
+ ```ruby
147
+ require 'lab42/tmux/auto_import'
148
+ module VimCommands
149
+ def vim_window name, **options
150
+ new_window name do
151
+ send_keys "vi #{options.fetch :dir, '.'}"
152
+ if options[:nerdtree]
153
+ send_keys_raw 'C-w', 'l'
154
+ end
155
+ end
156
+ end
157
+ end
158
+ ```
159
+
160
+ Now you _register_ the plugin via `Lab42::Tmux::Plugins.register VimCommands`, the benefit of doing this is, that
161
+ the plugin will not overwrite other plugins that might have implemented a `vim_window` command, and later plugins, that
162
+ on their account want to define a `vim_window` command will not be able to overwite yours.
163
+
164
+ ##### Configuration, A Little Bit More Complicated
165
+
166
+ **Not yet implemented c.f. Issues**
167
+
168
+ Imagine, and it is quite useful as explained above, that whenever we use the plugin we want to have a changed default configuration.
169
+ In our case we want to set a `pre_waint_interval` and a `post_wait_interval` by default. We could simply invoke
170
+ `Lab42::Tmux::Session.config{ ... }` but we would be exposed to the same dangers as above, _breaking_ and _being broken_.
171
+
172
+ Although conflicts might still arise, it is much saver to wrap our methods in a `with_config` block, that adds temporary configuration
173
+
174
+ ```ruby
175
+ # ...
176
+ def vim_window name, **options
177
+ # config.pre_wait_interval.nil?
178
+ with_config pre_wait_interval: 0.1 do
179
+ # config.pre_wait_interval == 0.1
180
+ # other config values are unchanged
181
+ # ...
182
+ end
183
+ # config.pre_wait_interval.nil?
184
+ end
185
+ ```
139
186
 
140
187
  ## Dev Notes
141
188
 
@@ -0,0 +1,8 @@
1
+
2
+ module Lab42
3
+ module Tmux
4
+ module Plugins
5
+ Conflict = Class.new RuntimeError
6
+ end # module Plugins
7
+ end # module Tmux
8
+ end # module Lab42
@@ -0,0 +1,31 @@
1
+ require_relative 'plugins/conflict'
2
+ module Lab42
3
+ module Tmux
4
+ module Plugins extend self
5
+ @registered = Set.new
6
+ attr_reader :registered
7
+
8
+ def register a_module, as: nil
9
+ if as
10
+ # Not yet implemented
11
+ raise ArgumentError 'as: is not yet implemented'
12
+ register_namespaced a_module, as
13
+ else
14
+ register_directly a_module
15
+ end
16
+ end
17
+
18
+ private
19
+ def register_directly a_module
20
+ conflicts = []
21
+ a_module.instance_methods.each do | im_name |
22
+ conflicts << im_name if registered.include? im_name
23
+ registered << im_name
24
+ end
25
+ raise Conflict unless conflicts.empty?
26
+
27
+ Session.send :include, a_module
28
+ end
29
+ end
30
+ end # module Tmux
31
+ end # module Lab42
@@ -1,6 +1,6 @@
1
1
 
2
2
  module Lab42
3
3
  module Tmux
4
- VERSION = '0.0.4'
4
+ VERSION = '0.0.5'
5
5
  end # module Tmux
6
6
  end # module Lab42
@@ -0,0 +1,38 @@
1
+ require 'lab42/tmux/auto_import'
2
+ require 'lab42/core/hash'
3
+
4
+ module VimPlugin
5
+
6
+ def vim_command command, params
7
+ send_keys ":#{command} #{params}"
8
+ end
9
+
10
+ def vim_new_window name, **options
11
+ new_window name do
12
+ send_keys "vi #{__vim_dir options}"
13
+ __vim_source options
14
+ __vim_colorscheme options
15
+ end
16
+ end
17
+
18
+ private
19
+
20
+ def __vim_colorscheme options
21
+ options.with_present :colorscheme do | cs |
22
+ vim_command :colorscheme, cs
23
+ end
24
+ end
25
+
26
+ def __vim_dir options
27
+ options.fetch :dir, '.'
28
+ end
29
+
30
+ def __vim_source options
31
+ options.with_present :source do | source |
32
+ vim_command :source, source
33
+ end
34
+ end
35
+
36
+ end # module VimPlugin
37
+
38
+ Lab42::Tmux::Plugins.register VimPlugin
data/lib/lab42/tmux.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require_relative 'tmux/config'
2
2
  require_relative 'tmux/interface'
3
3
  require_relative 'tmux/session'
4
+ require_relative 'tmux/plugins'
4
5
 
5
6
  module Lab42
6
7
  module Tmux
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lab42_tmux2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Dober
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-16 00:00:00.000000000 Z
11
+ date: 2014-11-23 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: lab42_core
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.1.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.1.1
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: forwarder2
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -80,11 +94,14 @@ files:
80
94
  - lib/lab42/tmux/dry_run.rb
81
95
  - lib/lab42/tmux/errors.rb
82
96
  - lib/lab42/tmux/interface.rb
97
+ - lib/lab42/tmux/plugins.rb
98
+ - lib/lab42/tmux/plugins/conflict.rb
83
99
  - lib/lab42/tmux/session.rb
84
100
  - lib/lab42/tmux/session/commands.rb
85
101
  - lib/lab42/tmux/session/hooks.rb
86
102
  - lib/lab42/tmux/session/parameter_helpers.rb
87
103
  - lib/lab42/tmux/version.rb
104
+ - lib/lab42/tmux/vim_plugin.rb
88
105
  homepage: https://github.com/RobertDober/lab42_tmux2
89
106
  licenses:
90
107
  - MIT