termdump 0.2.0
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/README.md +80 -0
- data/Rakefile +20 -0
- data/bin/termdump +6 -0
- data/etc/Rakefile +19 -0
- data/etc/_termdump +25 -0
- data/etc/man.sh +3 -0
- data/etc/termdump +47 -0
- data/etc/termdump.1 +79 -0
- data/etc/termdump.1.md +61 -0
- data/lib/termdump/command.rb +81 -0
- data/lib/termdump/main.rb +474 -0
- data/lib/termdump/process.rb +19 -0
- data/lib/termdump/session.rb +84 -0
- data/lib/termdump/terminal/base/base.rb +50 -0
- data/lib/termdump/terminal/base/default.rb +6 -0
- data/lib/termdump/terminal/base/mock.rb +50 -0
- data/lib/termdump/terminal/base/terminal_helper.rb +35 -0
- data/lib/termdump/terminal/gnome_terminal.rb +44 -0
- data/lib/termdump/terminal/guake.rb +48 -0
- data/lib/termdump/terminal/terminator.rb +94 -0
- data/lib/termdump/terminal/xterm.rb +22 -0
- data/lib/termdump/version.rb +4 -0
- data/lib/termdump.rb +1 -0
- data/test/run_cmd.sh +8 -0
- data/test/test_basic_terminal.rb +32 -0
- data/test/test_command.rb +66 -0
- data/test/test_gnome_terminal.rb +13 -0
- data/test/test_main.rb +241 -0
- data/test/test_session.rb +112 -0
- data/test/test_terminator.rb +27 -0
- metadata +88 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 4837eea42355201b14f0cee3c1181f50e1f7a06a
|
4
|
+
data.tar.gz: 953466fc7b97cd9bea4a765df361438d017f79e8
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b96f0653fde8b878bde672c3e230752521e45958cd20020d24e6d9fb6fb3d1b3eb57baa4f0c0ead2a395a968c6ea1e93e399436394509b8cf35ae54dbcd58a74
|
7
|
+
data.tar.gz: c130b998cb570f3b839d43c25277a50402ab7ffdb0952a83755946b15eea106c050ae795a01ec1351742d3a47fc6ebbabc7a9bed050ba3875c926207c36b20f3
|
data/README.md
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
# termdump
|
2
|
+
|
3
|
+
[](http://travis-ci.org/spacewander/termdump)
|
4
|
+
|
5
|
+
Dump your (pseudo)terminal session and replay it. You can use it to bootstrap daily work.
|
6
|
+
|
7
|
+
## Usage
|
8
|
+
|
9
|
+
```shell
|
10
|
+
Usage: termdump [options] [session]
|
11
|
+
-i, --init initialize configure interactively
|
12
|
+
-e, --edit [session] edit session
|
13
|
+
-d, --delete [session] delete session
|
14
|
+
-s, --save [session] save session
|
15
|
+
--stdout print dump result to stdout while saving a session
|
16
|
+
--exclude exclude current pty while saving a session
|
17
|
+
-l, --list list all sessions
|
18
|
+
-v, --version print version
|
19
|
+
```
|
20
|
+
|
21
|
+
### initialize configure
|
22
|
+
|
23
|
+
```shell
|
24
|
+
$ termdump -i
|
25
|
+
```
|
26
|
+
|
27
|
+
### dump a session
|
28
|
+
|
29
|
+
```shell
|
30
|
+
$ termdump -s mydailywork
|
31
|
+
# or `termdump -s mydailywork --exclude`
|
32
|
+
# if you want to exclude the pty running this command
|
33
|
+
```
|
34
|
+
|
35
|
+
### load a session
|
36
|
+
|
37
|
+
```shell
|
38
|
+
$ termdump mydailywork
|
39
|
+
```
|
40
|
+
|
41
|
+
### edit a session
|
42
|
+
|
43
|
+
```shell
|
44
|
+
$ termdump -e mydailywork
|
45
|
+
```
|
46
|
+
|
47
|
+
### delete a session
|
48
|
+
|
49
|
+
```shell
|
50
|
+
$ termdump -d mydailywork
|
51
|
+
```
|
52
|
+
|
53
|
+
Read more in [session syntax and examples](sessions.md) and [configure](configure.md).
|
54
|
+
|
55
|
+
## Supported terminal
|
56
|
+
|
57
|
+
- [x] gnome-terminal
|
58
|
+
- [x] terminator
|
59
|
+
- [x] xterm
|
60
|
+
- [x] guake
|
61
|
+
- [ ] urxvt
|
62
|
+
- [ ] konsole
|
63
|
+
- [ ] xfce4-terminal
|
64
|
+
|
65
|
+
If you want to support Terminal X, you can write a terminal file under
|
66
|
+
https://github.com/spacewander/termdump/tree/master/lib/termdump/terminal and then send me a pr.
|
67
|
+
Currently there is not a plan to support terminals in OS X platform, since I don't have OS X to test with.
|
68
|
+
If you want to implement one, you may need to use [cliclick](https://github.com/BlueM/cliclick) instead of `xdotool`.
|
69
|
+
|
70
|
+
## Requirements
|
71
|
+
|
72
|
+
Current requirements are `ps` and `xdotool`.
|
73
|
+
We use `ps` to get the result of terminal session, and `xdotool` to emulate typing.
|
74
|
+
|
75
|
+
`ps` has been shipped with your OS probably.
|
76
|
+
You can install `xdotool` via [this guide](http://www.semicomplete.com/projects/xdotool/#idp9392).
|
77
|
+
|
78
|
+
## Video
|
79
|
+
|
80
|
+
TODO
|
data/Rakefile
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
# encoding: UTF-8
|
3
|
+
|
4
|
+
require 'rake'
|
5
|
+
require 'rake/testtask'
|
6
|
+
|
7
|
+
Rake::TestTask.new do |t|
|
8
|
+
t.libs << 'lib'
|
9
|
+
t.libs << 'test'
|
10
|
+
t.pattern = 'test/**/test_*.rb'
|
11
|
+
t.verbose = false
|
12
|
+
# so we can type `rake TEST="xxx"` instead of `rake TEST="test/test_xxx.rb"`
|
13
|
+
test = ENV['TEST']
|
14
|
+
unless test.nil?
|
15
|
+
ENV['TEST'] = 'test/test_' + test unless test.start_with? 'test/test_'
|
16
|
+
ENV['TEST'] += '.rb' unless test.end_with? '.rb'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
task :default => :test
|
data/bin/termdump
ADDED
data/etc/Rakefile
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
# encoding: UTF-8
|
3
|
+
|
4
|
+
require 'rake'
|
5
|
+
require 'fileutils'
|
6
|
+
|
7
|
+
task :prepare do
|
8
|
+
bash_completion_dir = '/etc/bash_completion.d'
|
9
|
+
if Dir.exist?(bash_completion_dir)
|
10
|
+
FileUtils.cp './termdump', bash_completion_dir
|
11
|
+
end
|
12
|
+
#FileUtils.cp './_termdump', '/usr/share/zsh/functions/Completion/_termdump'
|
13
|
+
|
14
|
+
man_page_dir = '/usr/share/man/man1'
|
15
|
+
if Dir.exist?(man_page_dir)
|
16
|
+
FileUtils.cp 'termdump.1', man_page_dir
|
17
|
+
end
|
18
|
+
end
|
19
|
+
task :default => :prepare
|
data/etc/_termdump
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
#compdef termdump
|
2
|
+
|
3
|
+
local state session_dir
|
4
|
+
session_dir="(~/.config/termdump/session/)"
|
5
|
+
|
6
|
+
_arguments \
|
7
|
+
{-i,--init}'[initialize configure interactively]' \
|
8
|
+
{-e,--edit}'[edit session]: :->session' \
|
9
|
+
{-d,--delete}'[delete session]: :->session' \
|
10
|
+
{-s,--save}'[save session]: :->save' \
|
11
|
+
{-l,--list}'[list all sessions]' \
|
12
|
+
{-v,--version}'[print version]' \
|
13
|
+
{-h,--help}'[show usage message]' \
|
14
|
+
'*:load session:->session' && return 0
|
15
|
+
|
16
|
+
case "$state" in
|
17
|
+
session )
|
18
|
+
_files -W ${session_dir} -g '*.yml(:t:r)'
|
19
|
+
;;
|
20
|
+
save )
|
21
|
+
_arguments \
|
22
|
+
'--exclude[exclude current pty while saving a session]' \
|
23
|
+
'--stdout[print dump result to stdout while saving a session]' \
|
24
|
+
'*:save session:_files -W ${session_dir} -g "*.yml(:t:r)"'
|
25
|
+
esac
|
data/etc/man.sh
ADDED
data/etc/termdump
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
# bash completion script for termdump
|
2
|
+
_termdump() {
|
3
|
+
local pre cur
|
4
|
+
|
5
|
+
COMPREPLY=()
|
6
|
+
pre=${COMP_WORDS[COMP_CWORD-1]}
|
7
|
+
cur=${COMP_WORDS[COMP_CWORD]}
|
8
|
+
|
9
|
+
list_session_dir() {
|
10
|
+
find ~/.config/termdump/session/ -iname '*.yml' -exec basename -s '.yml' {} \;
|
11
|
+
}
|
12
|
+
|
13
|
+
case "$pre" in
|
14
|
+
-e|--edit|-d|--delete )
|
15
|
+
COMPREPLY=( $( compgen -W "$(list_session_dir)" ) )
|
16
|
+
return 0
|
17
|
+
;;
|
18
|
+
-i )
|
19
|
+
return 0
|
20
|
+
;;
|
21
|
+
-l|--list )
|
22
|
+
COMPREPLY=( $( compgen -W "-d --delete -e --edit" ) )
|
23
|
+
return 0
|
24
|
+
;;
|
25
|
+
-s )
|
26
|
+
COMPREPLY=( $( compgen -W "--exclude --stdout" -- $cur ) )
|
27
|
+
COMPREPLY+=( $( compgen -W "$(list_session_dir)" -- $cur ) )
|
28
|
+
return 0
|
29
|
+
esac
|
30
|
+
|
31
|
+
complete_options() {
|
32
|
+
local opts
|
33
|
+
opts='-i --init -d --delete -e --edit -h --help -l --list -s --save
|
34
|
+
-v --version'
|
35
|
+
echo "$opts"
|
36
|
+
}
|
37
|
+
|
38
|
+
case "$cur" in
|
39
|
+
-* )
|
40
|
+
COMPREPLY=( $( compgen -W "$(complete_options)" -- $cur ) )
|
41
|
+
;;
|
42
|
+
* )
|
43
|
+
COMPREPLY=( $( compgen -W "$(complete_options)" -- $cur ) )
|
44
|
+
COMPREPLY+=( $( compgen -W "$(list_session_dir)" -- $cur ) )
|
45
|
+
esac
|
46
|
+
}
|
47
|
+
complete -F _termdump filenames termdump
|
data/etc/termdump.1
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
.TH "TERMDUMP" "1" "Jul 17, 2015" "Termdump User Manuals" ""
|
2
|
+
.SH NAME
|
3
|
+
.PP
|
4
|
+
termdump \-\- Dump your pty session and replay it
|
5
|
+
.SH SYNOPSIS
|
6
|
+
.PP
|
7
|
+
termdump [\f[I]option\f[]] [\f[I]session\f[]]
|
8
|
+
.SH DESCRIPTION
|
9
|
+
.PP
|
10
|
+
Dump your (pseudo)terminal session and replay it.
|
11
|
+
You can use it to bootstrap daily work.
|
12
|
+
.SH OPTIONS
|
13
|
+
.TP
|
14
|
+
.B \-h, \-\-help
|
15
|
+
output usage information
|
16
|
+
.RS
|
17
|
+
.RE
|
18
|
+
.TP
|
19
|
+
.B \-i, \-\-init
|
20
|
+
initialize configure interactively
|
21
|
+
.RS
|
22
|
+
.RE
|
23
|
+
.TP
|
24
|
+
.B \-e, \-\-edit \f[I]session\f[]
|
25
|
+
edit session
|
26
|
+
.RS
|
27
|
+
.RE
|
28
|
+
.TP
|
29
|
+
.B \-d, \-\-delete \f[I]session\f[]
|
30
|
+
delete session
|
31
|
+
.RS
|
32
|
+
.RE
|
33
|
+
.TP
|
34
|
+
.B \-s, \-\-save \f[I]session\f[]
|
35
|
+
save session
|
36
|
+
.RS
|
37
|
+
.RE
|
38
|
+
.TP
|
39
|
+
.B \-l, \-\-list
|
40
|
+
list all sessions
|
41
|
+
.RS
|
42
|
+
.RE
|
43
|
+
.TP
|
44
|
+
.B \-v, \-\-version
|
45
|
+
print version
|
46
|
+
.RS
|
47
|
+
.RE
|
48
|
+
.PP
|
49
|
+
If you run \f[C]termdump\f[] with a session name only, it will replay
|
50
|
+
the session.
|
51
|
+
.SH SAVE OPTIONS
|
52
|
+
.TP
|
53
|
+
.B \-\-stdout
|
54
|
+
print dump result to stdout while saving a session
|
55
|
+
.RS
|
56
|
+
.RE
|
57
|
+
.TP
|
58
|
+
.B \-\-exclude
|
59
|
+
exclude current pty while saving a session
|
60
|
+
.RS
|
61
|
+
.RE
|
62
|
+
.SH EXAMPLE
|
63
|
+
.PP
|
64
|
+
At the first time you use this tool, you may need to run
|
65
|
+
\f[C]termdump\ \-i\f[] to set up configure.
|
66
|
+
.PP
|
67
|
+
Then you can run \f[C]termdump\ \-s\ [\-\-exclude]\f[] to save your
|
68
|
+
current pty session.
|
69
|
+
.PP
|
70
|
+
Run \f[C]termdump\ \-l\f[] to list all saved sessions,
|
71
|
+
\f[C]termdump\ \-e\f[] to edit one, and \f[C]termdump\ \-d\f[] to delete
|
72
|
+
one.
|
73
|
+
.PP
|
74
|
+
To replay your session, you can run \f[C]termdump\ [session]\f[].
|
75
|
+
.SH REPORTING BUGS
|
76
|
+
.PP
|
77
|
+
<https://github.com/spacewander/termdump/issues>
|
78
|
+
.SH AUTHORS
|
79
|
+
spacewander <spacewanderlzx@gmail.com>.
|
data/etc/termdump.1.md
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
% TERMDUMP(1) Termdump User Manuals
|
2
|
+
% spacewander <spacewanderlzx@gmail.com>
|
3
|
+
% Jul 17, 2015
|
4
|
+
|
5
|
+
# NAME
|
6
|
+
termdump -- Dump your pty session and replay it
|
7
|
+
|
8
|
+
# SYNOPSIS
|
9
|
+
|
10
|
+
termdump [*option*] [*session*]
|
11
|
+
|
12
|
+
# DESCRIPTION
|
13
|
+
|
14
|
+
Dump your (pseudo)terminal session and replay it. You can use it to bootstrap daily work.
|
15
|
+
|
16
|
+
# OPTIONS
|
17
|
+
|
18
|
+
-h, --help
|
19
|
+
: output usage information
|
20
|
+
|
21
|
+
-i, --init
|
22
|
+
: initialize configure interactively
|
23
|
+
|
24
|
+
-e, --edit *session*
|
25
|
+
: edit session
|
26
|
+
|
27
|
+
-d, --delete *session*
|
28
|
+
: delete session
|
29
|
+
|
30
|
+
-s, --save *session*
|
31
|
+
: save session
|
32
|
+
|
33
|
+
-l, --list
|
34
|
+
: list all sessions
|
35
|
+
|
36
|
+
-v, --version
|
37
|
+
: print version
|
38
|
+
|
39
|
+
If you run `termdump` with a session name only, it will replay the session.
|
40
|
+
|
41
|
+
# SAVE OPTIONS
|
42
|
+
|
43
|
+
--stdout
|
44
|
+
: print dump result to stdout while saving a session
|
45
|
+
|
46
|
+
--exclude
|
47
|
+
: exclude current pty while saving a session
|
48
|
+
|
49
|
+
# EXAMPLE
|
50
|
+
|
51
|
+
At the first time you use this tool, you may need to run `termdump -i` to set up configure.
|
52
|
+
|
53
|
+
Then you can run `termdump -s [--exclude]` to save your current pty session.
|
54
|
+
|
55
|
+
Run `termdump -l` to list all saved sessions, `termdump -e` to edit one, and `termdump -d` to delete one.
|
56
|
+
|
57
|
+
To replay your session, you can run `termdump [session]`.
|
58
|
+
|
59
|
+
# REPORTING BUGS
|
60
|
+
|
61
|
+
<https://github.com/spacewander/termdump/issues>
|
@@ -0,0 +1,81 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
require 'optparse'
|
3
|
+
|
4
|
+
require 'termdump/main'
|
5
|
+
require 'termdump/version'
|
6
|
+
|
7
|
+
module TermDump
|
8
|
+
class Command
|
9
|
+
def initialize args
|
10
|
+
@args = OpenStruct.new(:stdout => false, :action => :load, :list => false,
|
11
|
+
:session => '', :exclude => false)
|
12
|
+
OptionParser.new do |opts|
|
13
|
+
opts.banner = "Usage: termdump [options] [session]"
|
14
|
+
opts.on('-i', '--init', 'initialize configure interactively') {
|
15
|
+
@args.action = :init
|
16
|
+
}
|
17
|
+
opts.on('-e', '--edit [session]', 'edit session') do |name|
|
18
|
+
@args.action = :edit
|
19
|
+
name.nil? ? @args.list = true : @args.session = name
|
20
|
+
end
|
21
|
+
opts.on('-d', '--delete [session]', 'delete session') do |name|
|
22
|
+
@args.action = :delete
|
23
|
+
name.nil? ? @args.list = true : @args.session = name
|
24
|
+
end
|
25
|
+
opts.on('-s', '--save [session]', 'save session') do |name|
|
26
|
+
@args.action = :save
|
27
|
+
name.nil? ? @args.list = true : @args.session = name
|
28
|
+
end
|
29
|
+
|
30
|
+
opts.on_tail('--stdout', 'print dump result to stdout while saving a session') {
|
31
|
+
@args.stdout = true
|
32
|
+
}
|
33
|
+
opts.on_tail('--exclude', 'exclude current pty while saving a session') {
|
34
|
+
@args.exclude = true
|
35
|
+
}
|
36
|
+
opts.on_tail('-l', '--list', 'list all sessions') {
|
37
|
+
@args.list = true
|
38
|
+
}
|
39
|
+
opts.on_tail('-v', '--version', 'print version') do
|
40
|
+
puts VERSION
|
41
|
+
exit 0
|
42
|
+
end
|
43
|
+
opts.parse! args
|
44
|
+
|
45
|
+
# :load is the default action if no option given
|
46
|
+
if @args.action == :load
|
47
|
+
args.size > 0 ? @args.session = args[0] : @args.list = true
|
48
|
+
end
|
49
|
+
# --stdout should be used with --save
|
50
|
+
if @args.stdout || @args.exclude
|
51
|
+
if @args.action != :save
|
52
|
+
puts opts.help
|
53
|
+
exit 1
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def run
|
60
|
+
main = Main.new
|
61
|
+
if @args.action == :save
|
62
|
+
main.save @args.session, @args.stdout, @args.exclude
|
63
|
+
elsif @args.action == :init
|
64
|
+
main.init
|
65
|
+
elsif @args.list
|
66
|
+
main.list @args.action
|
67
|
+
else
|
68
|
+
name = @args.session
|
69
|
+
case @args.action
|
70
|
+
when :delete
|
71
|
+
main.delete_session name
|
72
|
+
when :edit
|
73
|
+
main.edit_session name
|
74
|
+
when :load
|
75
|
+
main.load_session name
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
end
|