cmd_tools 1.1.1 → 2.0.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.
- data/README.rdoc +4 -23
- data/bin/cmd_tools +4 -0
- data/cmd_tools.gemspec +11 -11
- data/lib/cmd_tools/command/backup.rb +60 -0
- data/lib/cmd_tools/command/emacs_launch.rb +42 -0
- data/lib/cmd_tools/command/trash.rb +24 -0
- data/lib/cmd_tools/command.rb +4 -0
- data/lib/cmd_tools/runner.rb +37 -0
- data/lib/cmd_tools/version.rb +1 -1
- metadata +29 -21
- data/bin/bak +0 -10
- data/bin/emacs_launcher_cui +0 -4
- data/bin/emacs_launcher_gui +0 -4
- data/bin/emacs_launcher_stop +0 -4
- data/bin/tsh +0 -10
- data/lib/cmd_tools/bin/bak.rb +0 -66
- data/lib/cmd_tools/bin/emacs_launcher.rb +0 -46
- data/lib/cmd_tools/bin/tsh.rb +0 -30
data/README.rdoc
CHANGED
@@ -1,26 +1,7 @@
|
|
1
1
|
= CmdTools
|
2
2
|
== What is this?
|
3
3
|
Simple small command line utilities.
|
4
|
-
==
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
tsh file1 file2 *~ dir1 dir2 1206??_photo
|
9
|
-
=== +bak+
|
10
|
-
Back up files and directories within current directory into ./bak_since_SOME_NUMBERES directory with bak.+TIME_NOW+. prefix.
|
11
|
-
==== Usage
|
12
|
-
bak file1 file2 *~ dir1 dir2 1206??_photo
|
13
|
-
=== +cmd_tools_emacs_launcher_for_alternate_editor_of_emacsclient+
|
14
|
-
Deleted: please use +emacs_launcher_(g|c)ui+.
|
15
|
-
=== +emacs_launcher_(g|c)ui+
|
16
|
-
Launch emacs in (G|C)UI mode.
|
17
|
-
1. If emacs daemon is not running, start a new daemon.
|
18
|
-
2. If GUI mode and no frame exist, create a new frame.
|
19
|
-
3. Open +files+ by emacsclient in (G|C)UI mode.
|
20
|
-
==== Usage
|
21
|
-
alias em='emacs_launcher_gui'
|
22
|
-
alias e='emacs_launcher_cui'
|
23
|
-
=== +emacs_launcher_stop+
|
24
|
-
Stop emacs daemon launched by +emacs_launcher_(g|c)ui+.
|
25
|
-
==== Usage
|
26
|
-
emacs_launcher_stop
|
4
|
+
== Usage
|
5
|
+
Please type
|
6
|
+
cmd_tools help
|
7
|
+
on a command line to see usages.
|
data/bin/cmd_tools
ADDED
data/cmd_tools.gemspec
CHANGED
@@ -12,21 +12,21 @@ Gem::Specification.new do |s|
|
|
12
12
|
s.add_development_dependency 'ruby_patch', '~> 0.3'
|
13
13
|
s.author = 'kshramt'
|
14
14
|
s.description = <<-EOS
|
15
|
-
Command line tools
|
16
|
-
|
17
|
-
|
18
|
-
|
15
|
+
Command line tools. Please type
|
16
|
+
|
17
|
+
$ cmd_tools help
|
18
|
+
|
19
|
+
to see details.
|
19
20
|
EOS
|
20
|
-
s.executables << '
|
21
|
-
s.executables << 'tsh'
|
22
|
-
s.executables << 'emacs_launcher_gui'
|
23
|
-
s.executables << 'emacs_launcher_cui'
|
24
|
-
s.executables << 'emacs_launcher_stop'
|
21
|
+
s.executables << 'cmd_tools'
|
25
22
|
s.post_install_message = <<-EOS
|
26
23
|
|
27
24
|
# CmdTools.
|
28
|
-
alias
|
29
|
-
alias
|
25
|
+
alias bak='cmd_tools backup'
|
26
|
+
alias tsh='cmd_tools trash'
|
27
|
+
alias em='cmd_tools emacs_launch --mode=gui'
|
28
|
+
alias e='cmd_tools emacs_launch --mode=cui'
|
29
|
+
alias emacs_stop=''cmd_tools emacs_stop'
|
30
30
|
|
31
31
|
EOS
|
32
32
|
s.required_ruby_version = '~> 1.9'
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module ::CmdTools::Command::Backup
|
2
|
+
require 'fileutils'
|
3
|
+
require 'find'
|
4
|
+
require 'ruby_patch'
|
5
|
+
extend ::RubyPatch::AutoLoad
|
6
|
+
|
7
|
+
BAK_DIR_HEAD = "bak_since_"
|
8
|
+
BAK_DIR_REG = /(\A|\/)#{BAK_DIR_HEAD}\d{12}\z/
|
9
|
+
BAK_PREFIX = 'bak.'
|
10
|
+
|
11
|
+
# Back up files and directories to <tt>bak_dir</tt>.
|
12
|
+
# @param [Array<String>] files Files and directories to be backed up.
|
13
|
+
def self.run(*files)
|
14
|
+
time_stamp = Time.now.ymdhms
|
15
|
+
bak_dir = get_bak_dir(time_stamp)
|
16
|
+
nested_bak_dir_reg = /\A#{bak_dir}\/.*#{BAK_DIR_HEAD}\d{12}\z/
|
17
|
+
FileUtils.mkdir_p(bak_dir)
|
18
|
+
(files.flatten.map{|f| f.chomp('/')} - ['.', '..', bak_dir])\
|
19
|
+
.select{|f| File.exist?(f)}\
|
20
|
+
.each{|f|
|
21
|
+
dest = get_dest(bak_dir, f, time_stamp)
|
22
|
+
begin
|
23
|
+
FileUtils.cp_r(f, dest)
|
24
|
+
rescue
|
25
|
+
warn "WARN: Failed to back up #{f}."
|
26
|
+
end
|
27
|
+
|
28
|
+
delete_nested_bak_dir(dest, nested_bak_dir_reg) if(File.directory?(dest))
|
29
|
+
}
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def self.get_bak_dir(time_stamp)
|
35
|
+
Dir.foreach('.')\
|
36
|
+
.select{|f| File.directory?(f)}\
|
37
|
+
.select{|f| f =~ BAK_DIR_REG}\
|
38
|
+
.first\
|
39
|
+
or BAK_DIR_HEAD + time_stamp
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.get_dest(bak_dir, file, time_stamp)
|
43
|
+
ext = File.extname(file)
|
44
|
+
File.join(bak_dir, [BAK_PREFIX, file, '.', time_stamp, ext].join)
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.delete_nested_bak_dir(dest, nested_bak_dir_reg)
|
48
|
+
Find.find(dest){|f| # I did not used #select method chain style to use Find.prune.
|
49
|
+
next unless File.directory?(f)
|
50
|
+
next unless f =~ nested_bak_dir_reg
|
51
|
+
|
52
|
+
$stdout.puts "Delete #{f}? [y/N]"
|
53
|
+
if $stdin.gets.strip =~ /\Ay/i
|
54
|
+
$stdout.puts "Deleting: #{f}"
|
55
|
+
FileUtils.rm_rf(f)
|
56
|
+
Find.prune
|
57
|
+
end
|
58
|
+
}
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module ::CmdTools::Command::EmacsLaunch
|
2
|
+
require 'ruby_patch'
|
3
|
+
extend ::RubyPatch::AutoLoad
|
4
|
+
|
5
|
+
# Open +files+ by +mode+ (:gui/:cui) mode.
|
6
|
+
# Launch emacs daemon if necessary.
|
7
|
+
# Create new frame if necessary.
|
8
|
+
# You can edit ~/.config/cmd_tools/config.yaml to specify an emacs executable.
|
9
|
+
# For example, if you are a Mac user who uses MacPorts, following modification will be useful.
|
10
|
+
# - :emacs: emacs
|
11
|
+
# + :emacs: /Applications/MacPorts/Emacs.app/Contents/MacOS/Emacs
|
12
|
+
def self.run(mode, *files)
|
13
|
+
system "#{::CmdTools::Config.emacs} --daemon" unless self.daemon_running?
|
14
|
+
|
15
|
+
files = files.flatten.join(' ')
|
16
|
+
case mode
|
17
|
+
when :gui
|
18
|
+
if self.number_of_frames <= 1 # emacs daemon has one (invisible) frame.
|
19
|
+
exec "emacsclient -c -n #{files}"
|
20
|
+
else
|
21
|
+
exec "emacsclient -n #{files}"
|
22
|
+
end
|
23
|
+
when :cui
|
24
|
+
exec "emacsclient -t #{files}"
|
25
|
+
else
|
26
|
+
raise ArgumentError, "Expected :gui or :cui, but got #{mode}."
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# Stop emacs daemon.
|
31
|
+
def self.stop
|
32
|
+
exec "emacsclient -e '(kill-emacs)'"
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.daemon_running?
|
36
|
+
system "emacsclient -e '()' > /dev/null 2>&1"
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.number_of_frames
|
40
|
+
`emacsclient -e "(length (visible-frame-list))"`.to_i
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module ::CmdTools::Command::Trash
|
2
|
+
require 'fileutils'
|
3
|
+
require 'ruby_patch'
|
4
|
+
extend ::RubyPatch::AutoLoad
|
5
|
+
|
6
|
+
TRASH_DIR = File.join(ENV['HOME'], '.myTrash')
|
7
|
+
|
8
|
+
# Move files and directories into <tt>TRASH_DIR</tt>.
|
9
|
+
# @param [Array<String>] files Files and directories to be moved into <tt>TRASH_DIR</tt>.
|
10
|
+
def self.run(*files)
|
11
|
+
FileUtils.mkdir_p(TRASH_DIR)
|
12
|
+
time = Time.now.ymdhms
|
13
|
+
prefix = File.join(TRASH_DIR, time) + '.'
|
14
|
+
(files.flatten - ['.', '..'])\
|
15
|
+
.select{|f| File.exist?(f)}\
|
16
|
+
.each{|f|
|
17
|
+
begin
|
18
|
+
FileUtils.mv(f, prefix + File.basename(f))
|
19
|
+
rescue
|
20
|
+
warn "WARN: Failed to discard #{f}."
|
21
|
+
end
|
22
|
+
}
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'thor'
|
2
|
+
|
3
|
+
class ::CmdTools::Runner < Thor
|
4
|
+
require 'ruby_patch'
|
5
|
+
extend ::RubyPatch::AutoLoad
|
6
|
+
|
7
|
+
desc "backup FILE1 FILE2 ...", "Backup files and directories."
|
8
|
+
def backup(*files)
|
9
|
+
puts ::CmdTools::Command::Backup.run(*files).join("\t")
|
10
|
+
end
|
11
|
+
|
12
|
+
desc "trash FILE1 FILE2 ...", "Move files and directories to ~/.myTrash"
|
13
|
+
def trash(*files)
|
14
|
+
puts ::CmdTools::Command::Trash.run(*files).join("\t")
|
15
|
+
end
|
16
|
+
|
17
|
+
desc "emacs_launch FILE1 FILE2 ...", "Launch emacs in MODE mode."
|
18
|
+
long_desc <<-EOS
|
19
|
+
Launch emacs in (G|C)UI mode.
|
20
|
+
|
21
|
+
1. If emacs daemon is not running, start a new daemon.
|
22
|
+
|
23
|
+
2. If GUI mode and no frame exist, create a new frame.
|
24
|
+
|
25
|
+
3. Open files by emacsclient in (G|C)UI mode.
|
26
|
+
EOS
|
27
|
+
method_option :mode, type: :string, required: true, desc: "MODE should be 'gui' or 'cui'."
|
28
|
+
def emacs_launch(*files)
|
29
|
+
mode = options['mode'].to_sym
|
30
|
+
::CmdTools::Command::EmacsLaunch.run(mode, *files)
|
31
|
+
end
|
32
|
+
|
33
|
+
desc "emacs_stop", "Stop emacs daemon."
|
34
|
+
def emacs_stop
|
35
|
+
::CmdTools::Command::EmacsLaunch.stop
|
36
|
+
end
|
37
|
+
end
|
data/lib/cmd_tools/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cmd_tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-09-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ruby_patch
|
16
|
-
requirement: &
|
16
|
+
requirement: &69899570 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,32 +21,33 @@ dependencies:
|
|
21
21
|
version: '0.3'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
25
|
-
description: !
|
26
|
-
|
24
|
+
version_requirements: *69899570
|
25
|
+
description: ! 'Command line tools. Please type
|
26
|
+
|
27
|
+
|
28
|
+
$ cmd_tools help
|
29
|
+
|
30
|
+
|
31
|
+
to see details.
|
32
|
+
|
33
|
+
'
|
27
34
|
email:
|
28
35
|
executables:
|
29
|
-
-
|
30
|
-
- tsh
|
31
|
-
- emacs_launcher_gui
|
32
|
-
- emacs_launcher_cui
|
33
|
-
- emacs_launcher_stop
|
36
|
+
- cmd_tools
|
34
37
|
extensions: []
|
35
38
|
extra_rdoc_files: []
|
36
39
|
files:
|
37
40
|
- README.rdoc
|
38
|
-
- bin/
|
39
|
-
- bin/emacs_launcher_cui
|
40
|
-
- bin/emacs_launcher_gui
|
41
|
-
- bin/emacs_launcher_stop
|
42
|
-
- bin/tsh
|
41
|
+
- bin/cmd_tools
|
43
42
|
- cmd_tools.gemspec
|
44
43
|
- lib/cmd_tools.rb
|
45
44
|
- lib/cmd_tools/bin.rb
|
46
|
-
- lib/cmd_tools/
|
47
|
-
- lib/cmd_tools/
|
48
|
-
- lib/cmd_tools/
|
45
|
+
- lib/cmd_tools/command.rb
|
46
|
+
- lib/cmd_tools/command/backup.rb
|
47
|
+
- lib/cmd_tools/command/emacs_launch.rb
|
48
|
+
- lib/cmd_tools/command/trash.rb
|
49
49
|
- lib/cmd_tools/config.rb
|
50
|
+
- lib/cmd_tools/runner.rb
|
50
51
|
- lib/cmd_tools/version.rb
|
51
52
|
homepage:
|
52
53
|
licenses: []
|
@@ -54,9 +55,15 @@ post_install_message: ! '
|
|
54
55
|
|
55
56
|
# CmdTools.
|
56
57
|
|
57
|
-
alias
|
58
|
+
alias bak=''cmd_tools backup''
|
59
|
+
|
60
|
+
alias tsh=''cmd_tools trash''
|
61
|
+
|
62
|
+
alias em=''cmd_tools emacs_launch --mode=gui''
|
63
|
+
|
64
|
+
alias e=''cmd_tools emacs_launch --mode=cui''
|
58
65
|
|
59
|
-
alias
|
66
|
+
alias emacs_stop=''''cmd_tools emacs_stop''
|
60
67
|
|
61
68
|
|
62
69
|
'
|
@@ -82,3 +89,4 @@ signing_key:
|
|
82
89
|
specification_version: 3
|
83
90
|
summary: Command line tools.
|
84
91
|
test_files: []
|
92
|
+
has_rdoc:
|
data/bin/bak
DELETED
data/bin/emacs_launcher_cui
DELETED
data/bin/emacs_launcher_gui
DELETED
data/bin/emacs_launcher_stop
DELETED
data/bin/tsh
DELETED
data/lib/cmd_tools/bin/bak.rb
DELETED
@@ -1,66 +0,0 @@
|
|
1
|
-
module CmdTools
|
2
|
-
module Bin
|
3
|
-
|
4
|
-
# bak is an abbreviation of backup.
|
5
|
-
module Bak
|
6
|
-
require 'fileutils'
|
7
|
-
require 'find'
|
8
|
-
require 'ruby_patch'
|
9
|
-
extend ::RubyPatch::AutoLoad
|
10
|
-
|
11
|
-
BAK_DIR_HEAD = "bak_since_"
|
12
|
-
BAK_DIR_REG = /(\A|\/)#{BAK_DIR_HEAD}\d{12}\z/
|
13
|
-
BAK_PREFIX = 'bak.'
|
14
|
-
|
15
|
-
# Back up files and directories to <tt>bak_dir</tt>.
|
16
|
-
# @param [Array<String>] files Files and directories to be backed up.
|
17
|
-
def self.run(*files)
|
18
|
-
time_stamp = Time.now.ymdhms
|
19
|
-
bak_dir = get_bak_dir(time_stamp)
|
20
|
-
nested_bak_dir_reg = /\A#{bak_dir}\/.*#{BAK_DIR_HEAD}\d{12}\z/
|
21
|
-
FileUtils.mkdir_p(bak_dir)
|
22
|
-
(files.flatten.map{|f| f.chomp('/')} - ['.', '..', bak_dir])\
|
23
|
-
.select{|f| File.exist?(f)}\
|
24
|
-
.each{|f|
|
25
|
-
dest = get_dest(bak_dir, f, time_stamp)
|
26
|
-
begin
|
27
|
-
FileUtils.cp_r(f, dest)
|
28
|
-
rescue
|
29
|
-
warn "WARN: Failed to back up #{f}."
|
30
|
-
end
|
31
|
-
|
32
|
-
delete_nested_bak_dir(dest, nested_bak_dir_reg) if(File.directory?(dest))
|
33
|
-
}
|
34
|
-
end
|
35
|
-
|
36
|
-
private
|
37
|
-
|
38
|
-
def self.get_bak_dir(time_stamp)
|
39
|
-
Dir.foreach('.')\
|
40
|
-
.select{|f| File.directory?(f)}\
|
41
|
-
.select{|f| f =~ BAK_DIR_REG}\
|
42
|
-
.first\
|
43
|
-
or BAK_DIR_HEAD + time_stamp
|
44
|
-
end
|
45
|
-
|
46
|
-
def self.get_dest(bak_dir, file, time_stamp)
|
47
|
-
ext = File.extname(file)
|
48
|
-
File.join(bak_dir, [BAK_PREFIX, file, '.', time_stamp, ext].join)
|
49
|
-
end
|
50
|
-
|
51
|
-
def self.delete_nested_bak_dir(dest, nested_bak_dir_reg)
|
52
|
-
Find.find(dest){|f| # I did not used #select method chain style to use Find.prune.
|
53
|
-
next unless File.directory?(f)
|
54
|
-
next unless f =~ nested_bak_dir_reg
|
55
|
-
|
56
|
-
$stdout.puts "Delete #{f}? [y/N]"
|
57
|
-
if $stdin.gets.strip =~ /\Ay/i
|
58
|
-
$stdout.puts "Deleting: #{f}"
|
59
|
-
FileUtils.rm_rf(f)
|
60
|
-
Find.prune
|
61
|
-
end
|
62
|
-
}
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
@@ -1,46 +0,0 @@
|
|
1
|
-
module CmdTools
|
2
|
-
module Bin
|
3
|
-
module EmacsLauncher
|
4
|
-
require 'ruby_patch'
|
5
|
-
extend ::RubyPatch::AutoLoad
|
6
|
-
|
7
|
-
# Open +files+ by +mode+ (:gui/:cui) mode.
|
8
|
-
# Launch emacs daemon if necessary.
|
9
|
-
# Create new frame if necessary.
|
10
|
-
# You can edit ~/.config/cmd_tools/config.yaml to specify an emacs executable.
|
11
|
-
# For example, if you are a Mac user who uses MacPorts, following modification will be useful.
|
12
|
-
# - :emacs: emacs
|
13
|
-
# + :emacs: /Applications/MacPorts/Emacs.app/Contents/MacOS/Emacs
|
14
|
-
def self.run(mode, *files)
|
15
|
-
system "#{::CmdTools::Config.emacs} --daemon" unless self.daemon_running?
|
16
|
-
|
17
|
-
files = files.flatten.join(' ')
|
18
|
-
case mode
|
19
|
-
when :gui
|
20
|
-
if self.number_of_frames <= 1 # emacs daemon has one (invisible) frame.
|
21
|
-
exec "emacsclient -c -n #{files}"
|
22
|
-
else
|
23
|
-
exec "emacsclient -n #{files}"
|
24
|
-
end
|
25
|
-
when :cui
|
26
|
-
exec "emacsclient -t #{files}"
|
27
|
-
else
|
28
|
-
raise ArgumentError, "Unknown mode: #{mode}"
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
# Stop emacs daemon.
|
33
|
-
def self.stop
|
34
|
-
exec "emacsclient -e '(kill-emacs)'"
|
35
|
-
end
|
36
|
-
|
37
|
-
def self.daemon_running?
|
38
|
-
system "emacsclient -e '()' > /dev/null 2>&1"
|
39
|
-
end
|
40
|
-
|
41
|
-
def self.number_of_frames
|
42
|
-
`emacsclient -e "(length (visible-frame-list))"`.to_i
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
data/lib/cmd_tools/bin/tsh.rb
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
module CmdTools
|
2
|
-
module Bin
|
3
|
-
|
4
|
-
# tsh is an abbreviation of trash.
|
5
|
-
module Tsh
|
6
|
-
require 'fileutils'
|
7
|
-
require 'ruby_patch'
|
8
|
-
extend ::RubyPatch::AutoLoad
|
9
|
-
|
10
|
-
TRASH_DIR = File.join(ENV['HOME'], '.myTrash')
|
11
|
-
|
12
|
-
# Move files and directories into <tt>TRASH_DIR</tt>.
|
13
|
-
# @param [Array<String>] files Files and directories to be moved into <tt>TRASH_DIR</tt>.
|
14
|
-
def self.run(*files)
|
15
|
-
FileUtils.mkdir_p(TRASH_DIR)
|
16
|
-
time = Time.now.ymdhms
|
17
|
-
prefix = File.join(TRASH_DIR, time) + '.'
|
18
|
-
(files.flatten - ['.', '..'])\
|
19
|
-
.select{|f| File.exist?(f)}\
|
20
|
-
.each{|f|
|
21
|
-
begin
|
22
|
-
FileUtils.mv(f, prefix + File.basename(f))
|
23
|
-
rescue
|
24
|
-
warn "WARN: Failed to discard #{f}."
|
25
|
-
end
|
26
|
-
}
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|