paned_repl 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 012c82144040b8e1bbfaba81dac8b0c549954707
4
+ data.tar.gz: 1f8d10ca5644f5adbf2595c33800b82713a70232
5
+ SHA512:
6
+ metadata.gz: b9ebe88bf982ad2c2b188572ac986cb178b7384552b4f123e0ece25d9e23de5a3ada50632f8573ab1c4c808165ee4212384a389d36cde2ad4a08492bf9c244af
7
+ data.tar.gz: 86dcf59bdfc529f3ea4fec03dbc791aa4a0484fb935b4b3cef0f0daa2fcba6c42cbd28d44b935c8f79e0ca64820c158900c93993785d31b6e661007a0bfa073b
data/bin/paned_repl ADDED
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'thor'
4
+ require 'colored'
5
+
6
+ GENERATED_FILE_NAME = "paned_repl.sh"
7
+
8
+ class PanedReplCLI < Thor
9
+ desc "init", "init"
10
+ def init
11
+ `touch #{GENERATED_FILE_NAME}`
12
+ `chmod a+x #{GENERATED_FILE_NAME}`
13
+ File.open(GENERATED_FILE_NAME, 'w') do |f|
14
+ f.write CLI_SCRIPT
15
+ end
16
+ puts "generated #{GENERATED_FILE_NAME}".green
17
+ puts "run with: #{"sh #{GENERATED_FILE_NAME}".bold}"
18
+ end
19
+ end
20
+
21
+ CLI_SCRIPT = <<-SH
22
+
23
+ #!/bin/bash
24
+
25
+ BASE_TMUX_SESSION=paned_repl_base_tmux_session
26
+
27
+ tmux new -s $BASE_TMUX_SESSION -d
28
+
29
+ tmux send-keys -t $BASE_TMUX_SESSION:0.0 \
30
+ "
31
+ ruby -e '
32
+ require %{paned_repl};
33
+ PanedRepl.start(%{$BASE_TMUX_SESSION});
34
+ '
35
+ " C-m
36
+
37
+ tmux attach -t $BASE_TMUX_SESSION
38
+
39
+ SH
40
+
41
+ PanedReplCLI.start ARGV
@@ -0,0 +1,3 @@
1
+ module PanedRepl::Constants
2
+ HTML_PRINTER_DELIMITER="EYvDlHCgADvpsB3strsY3g"
3
+ end
@@ -0,0 +1,21 @@
1
+ class PanedRepl::Repls::BaseRepl
2
+
3
+ def self.start(name)
4
+ new(name: name).start
5
+ end
6
+
7
+ Sessions = {}
8
+
9
+ include PanedRepl::Tmux
10
+
11
+ attr_reader :name, :pane
12
+
13
+ include AutoInitializer
14
+
15
+ def start
16
+ @pane = 0
17
+ Sessions[name] = self
18
+ PanedRepl.class_exec { Pry.start }
19
+ end
20
+
21
+ end
@@ -0,0 +1 @@
1
+ module PanedRepl::Repls; end
@@ -0,0 +1,66 @@
1
+ module PanedRepl::Tmux
2
+
3
+ def select_pane(n)
4
+ `tmux select-pane -t #{n}`
5
+ end
6
+
7
+ def split_vertical(pane_num=nil)
8
+ pane_num ||= pane
9
+ select_pane(pane_num)
10
+ system "tmux split-window -v"
11
+ if pane_num == pane
12
+ swap_pane pane, pane + 1
13
+ end
14
+ @pane = pane + 1
15
+ select_pane(pane)
16
+ end
17
+
18
+ def split_horizontal(pane_num=nil)
19
+ pane_num ||= pane
20
+ select_pane(pane_num)
21
+ system "tmux split-window -h"
22
+ if pane_num == pane
23
+ swap_pane pane, pane + 1
24
+ end
25
+ @pane = pane + 1
26
+ select_pane(pane)
27
+ end
28
+
29
+ def swap_pane(n1,n2)
30
+ system "tmux swap-pane -s #{n1} -t #{n2}"
31
+ end
32
+
33
+ def kill_pane(n)
34
+ `tmux kill-pane -t #{n}`
35
+ end
36
+
37
+ def send_keys(keys)
38
+ system <<-SH
39
+ tmux send-keys "#{keys}" C-m
40
+ SH
41
+ select_pane pane
42
+ end
43
+
44
+ def create_session(session_name=nil)
45
+ session_name ||= name
46
+ system "tmux new -s #{session_name} -d"
47
+ end
48
+
49
+ def attach(session_name=nil)
50
+ session_name ||= name
51
+ system "tmux attach -t #{session_name}"
52
+ end
53
+
54
+ def even_vertical
55
+ system "tmux select-layout even-vertical"
56
+ end
57
+
58
+ def even_horizontal
59
+ system "tmux select-layout even-horizontal"
60
+ end
61
+
62
+ def tiled
63
+ system "tmux select-layout tiled"
64
+ end
65
+
66
+ end
@@ -0,0 +1,40 @@
1
+
2
+ class PanedRepl::Utils::HtmlPrinter
3
+
4
+ Delimiter = PanedRepl.const("HTML_PRINTER_DELIMITER")
5
+
6
+ using Gemmy.patch("object/i/ergo")
7
+
8
+ def self.start &blk
9
+ Html.io_loop &:ergo
10
+ end
11
+
12
+ def self.io_loop &blk
13
+ html = ''
14
+ loop do
15
+ str = gets.chomp
16
+ if str.ends_with? Delimiter
17
+ new(html: html).print
18
+ html = blk.call html
19
+ else
20
+ html = html + str
21
+ end
22
+ end
23
+ end
24
+
25
+ include AutoInitializer
26
+
27
+ attr_reader :html
28
+
29
+ def create_path
30
+ Tempfile.new.tap { |f|
31
+ f.write html
32
+ f.close
33
+ }.path
34
+ end
35
+
36
+ def print
37
+ puts `cat #{create_path} | w3m -dump -T text/html`
38
+ end
39
+
40
+ end
@@ -0,0 +1 @@
1
+ module PanedRepl::Utils; end
data/lib/paned_repl.rb ADDED
@@ -0,0 +1,39 @@
1
+ require 'gemmy'
2
+ require 'auto_initializer'
3
+
4
+ module PanedRepl
5
+
6
+ def self.sessions
7
+ PanedRepl::Repls::BaseRepl::Sessions
8
+ end
9
+
10
+ def self.base_session
11
+ sessions["paned_repl_base_tmux_session"]
12
+ end
13
+
14
+ def self.panes
15
+ sessions.reduce({}) do |hash, (k,v)|
16
+ hash[k] = v.pane.times.to_a
17
+ end
18
+ end
19
+
20
+ def self.start(name)
21
+ Repls::BaseRepl.start(name)
22
+ end
23
+
24
+ def self.const name
25
+ Constants.const_get name
26
+ end
27
+
28
+ end
29
+
30
+
31
+ first_dependencies = [
32
+ *Gem.find_files("paned_repl/constants.rb").to_a
33
+ ].each &method(:require)
34
+
35
+ all_dependencies = Gem.find_files("paned_repl/**/*.rb").to_a.sort_by do |path|
36
+ path.count "/"
37
+ end
38
+
39
+ (all_dependencies - first_dependencies).each &method(:require)
data/lib/version.rb ADDED
@@ -0,0 +1,3 @@
1
+ module PanedRepl
2
+ VERSION = '0.0.2'
3
+ end
metadata ADDED
@@ -0,0 +1,109 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: paned_repl
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - maxpleaner
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-12-31 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: gemmyrb
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: colored
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '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'
41
+ - !ruby/object:Gem::Dependency
42
+ name: thor
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: auto_initializer
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: ''
70
+ email: maxpleaner@gmail.com
71
+ executables:
72
+ - paned_repl
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - bin/paned_repl
77
+ - lib/paned_repl.rb
78
+ - lib/paned_repl/constants.rb
79
+ - lib/paned_repl/repls.rb
80
+ - lib/paned_repl/repls/base_repl.rb
81
+ - lib/paned_repl/tmux.rb
82
+ - lib/paned_repl/utils.rb
83
+ - lib/paned_repl/utils/html_printer.rb
84
+ - lib/version.rb
85
+ homepage: https://github.com/maxpleaner/paned_repl
86
+ licenses:
87
+ - MIT
88
+ metadata: {}
89
+ post_install_message:
90
+ rdoc_options: []
91
+ require_paths:
92
+ - lib
93
+ required_ruby_version: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: '2.3'
98
+ required_rubygems_version: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: 2.5.1
103
+ requirements: []
104
+ rubyforge_project:
105
+ rubygems_version: 2.5.1
106
+ signing_key:
107
+ specification_version: 4
108
+ summary: A TMux wrapper for dynamic multiplexing in a REPL
109
+ test_files: []