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 +7 -0
- data/bin/paned_repl +41 -0
- data/lib/paned_repl/constants.rb +3 -0
- data/lib/paned_repl/repls/base_repl.rb +21 -0
- data/lib/paned_repl/repls.rb +1 -0
- data/lib/paned_repl/tmux.rb +66 -0
- data/lib/paned_repl/utils/html_printer.rb +40 -0
- data/lib/paned_repl/utils.rb +1 -0
- data/lib/paned_repl.rb +39 -0
- data/lib/version.rb +3 -0
- metadata +109 -0
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,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
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: []
|