paned_repl 0.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 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: []