yac 1.3.2 → 1.4.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/CHANGELOG CHANGED
@@ -1,3 +1,13 @@
1
+ === 1.4.0 / 2008-12-28
2
+
3
+ * highlight commands,e.g: $ ls
4
+ * <rename/add> use '@' as prefix will impact the main repository,otherwise private repository
5
+ * use built-in configure file,if ~/.yacrc doesn't exist
6
+ * doesn't init empty repository,if havn't provide 'clone-from'
7
+ * truncate filename when choose for tidiness
8
+ * if file is empty then delete <edit/add>
9
+ * ...
10
+
1
11
  === 1.3.0 / 2008-11-20
2
12
 
3
13
  * add office support (odf,odp,ods,uof,doc...)
data/Manifest CHANGED
@@ -1,10 +1,10 @@
1
+ Manifest
1
2
  CHANGELOG
2
3
  resources/yacrc
3
4
  bin/yac
4
5
  Rakefile
5
- yac.gemspec
6
6
  lib/git.rb
7
7
  lib/format.rb
8
+ lib/symbol.rb
8
9
  lib/yac.rb
9
10
  README.rdoc
10
- Manifest
data/README.rdoc CHANGED
@@ -13,79 +13,66 @@
13
13
 
14
14
  == How To Use
15
15
 
16
- === To initialize repositories:
17
- When you run any command,The repositories will be initialize automatically.
16
+ === Initialize repositories:
17
+ $ yac -i
18
18
 
19
- === To show a cheat sheet:
20
- $ yac (show) [cheatsheet] ( you can use * for any chars)
21
- Eg:
22
- $ yac lin*x
23
- $ yac l/o/a To show linux/gentoo/masked
19
+ === Show a cheat sheet:
20
+ $ yac /cheatsheet/ ( * => any chars)
21
+ E.g:
22
+ $ yac lin*x => linux linux/welcome
23
+ $ yac l/o/a => linux/gentoo/masked linux/gentoo/layman
24
24
 
25
25
  === To edit a cheat sheet
26
- $ yac -e [cheatsheet] (Yes,you can use * for any chars also,then choose one to edit)
26
+ $ yac -e /cheatsheet/ ( * => any chars)
27
27
 
28
28
  === To add a cheat sheet
29
- $ yac -a [cheatsheet] (OMG,you can also use *)
30
- Eg:
29
+ $ yac -a /cheatsheet/ ( * => any chars)
30
+ ('rename/add' use '@' as prefix will impact the main repository,otherwise private repository)
31
+ Eg:
31
32
  $ yac -a li*x/install
32
- Then will display all directories match /li*x/,feel freely to choose one of them,
33
- A new file named install.ch will be added to the directory!
34
33
  $ yac -a l/oo/install
35
- Oh,no,you can choose linux/gentoo as the directory for the install file
36
34
 
37
35
  === To rm a cheat sheet
38
- $ yac -r [cheatsheet] (Sure,you can use *)
36
+ $ yac -r [cheatsheet] ( * => any chars)
39
37
 
40
38
  === Search all sheets
41
- $ yac -S [keyword] (@Take Attention:@ You are allowed to use perl-like Regex)
42
- Eg:
39
+ $ yac -S [keyword] (@Take Attention:@ Perl-like Regexp)
40
+ Eg:
43
41
  $ yac -S lin.*x
44
- $ yac -S '\$:' To Search $:
45
- And Even:
42
+ $ yac -S '\$:' => To Search $:
46
43
  $ yac -S "r(uby|ails)"
47
44
 
48
45
  === Update repositories
49
- $ yac -u main => Update main repository
50
- $ yac -u all => Update all repositories
51
- $ yac -u => Update private repository
46
+ $ yac -u main => main repository
47
+ $ yac -u all => all repositories
48
+ $ yac -u => private repository
52
49
 
53
50
  === Shell
54
- $ yac -s main => Open the main repository's shell
55
- $ yac -s => Open the private repository's shell
51
+ $ yac -s main => Main repository's shell
52
+ $ yac -s => Private repository's shell
56
53
 
57
54
  == Repository Push
58
- $ yac -p main => Push the main repository
59
- $ yac -p all => Push all repositories
60
- $ yac -p => Push the private repository
55
+ $ yac -p main => Main repository
56
+ $ yac -p all => All repositories
57
+ $ yac -p => Private repository
61
58
 
62
59
  == Rename/mv a cheatsheet:
63
- $ yac -m [orign_name] [new_name]
60
+ $ yac -m [orign_name] [new_name]
61
+ ('rename/add' use '@' as prefix impact the main repository,otherwise private repository)
64
62
 
65
63
  === Help (display this file)
66
- $ yac -h
64
+ $ yac -h
67
65
 
68
66
  === Version
69
- $ yac -v
70
-
71
- === Documents format
72
- All text file add ".ch" as suffix for butter editor highlight
73
- (A very very simple vim script can be found here : http://www.vim.org/scripts/script.php?script_id=2399)
74
-
75
- At the beginning of the row,plus N = for the N-class title
76
-
77
- Words wrapped by @ for highlight
67
+ $ yac -v
78
68
 
79
69
  === The configure file
80
- Default use $HOME/.yacrc , See the example file under resources directory
81
-
82
- === Others
83
- Add @ before [keyword] will only affect the main repository
70
+ <$HOME/.yacrc> OR <Example file under resources directory>
84
71
 
85
72
  == REQUIREMENTS:
86
73
  * Ruby
87
74
  * Git
88
- * rubygems
75
+ * RubyGems
89
76
 
90
77
  == LICENSE:
91
78
 
@@ -94,5 +81,5 @@ This software is shared by GPL3 License
94
81
  Copyright (c) 2008 Jinzhu Zhang
95
82
 
96
83
  == BY: Jinzhu Zhang
97
- http://www.zhangjinzhu.com
98
- wosmvp (no-spam) gmail (no-spam) com
84
+ http://www.zhangjinzhu.com
85
+ wosmvp (no-spam) gmail (no-spam) com
data/bin/yac CHANGED
@@ -1,3 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
2
  require File.join(File.dirname(__FILE__), "..", "lib", "yac.rb")
3
+
3
4
  Yac.new(ARGV)
data/lib/format.rb CHANGED
@@ -1,86 +1,57 @@
1
- class Symbol
2
- def to_proc
3
- Proc.new { |*args| args.shift.__send__(self, *args) }
1
+ module Format
2
+
3
+ def Error(x)
4
+ colorful "Please Provide A Valid Command To Operate #{x} (~/.yacrc)",'warn'
4
5
  end
5
- end
6
6
 
7
- module Format
8
- Pdf_Error = "Please Modify ~/.yacrc To Provide A Valid Command To Operate PDF Document"
9
- Image_Error = "Please Modify ~/.yacrc To Provide A Valid Command To Operate Image Document"
10
- Office_Error = "Please Modify ~/.yacrc To Provide A Valid Command To Operate Office Document"
11
- Doc_Error = "Please Modify ~/.yacrc To Provide A Valid Command To Operate Text Document"
7
+ def handle_file(file,action = 'show')
8
+ colorful(file,"filename")
12
9
 
13
- def format_file(file)
14
- colorful(file,"filename") if file
15
10
  case `file "#{file}" 2>/dev/null`
16
11
  when / PDF document/
17
- colorful(Pdf_Error,'warn') unless system("#{Yac::CONFIG["pdf_command"]||'evince'} '#{file}' 2>/dev/null")
12
+ Error('PDF') unless system("#{Yac::CONFIG["#{action}_pdf"]} '#{file}' ")
18
13
  when /( image)|( bitmap)|(\.svg)/
19
- colorful(Image_Error,'warn') unless system("#{Yac::CONFIG["image_command"]||'eog'} '#{file}' 2>/dev/null")
14
+ Error('Image') unless system("#{Yac::CONFIG["#{action}_image"]} '#{file}'")
20
15
  when /Office Document/
21
- open_office(file)
16
+ Error('Office') unless system("#{Yac::CONFIG["#{action}_office"]} '#{file}'")
22
17
  else
23
- if File.extname(file) =~ /^\.(od[tfspg]|uof)$/ #Support odf uof ods odp...
24
- open_office(file)
18
+ if File.extname(file) =~ /^\.(od[tfspg]|uof)$/ # FileType: odf uof ods odp ...
19
+ Error('Office') unless system("#{Yac::CONFIG["#{action}_office"]} '#{file}'")
25
20
  else
26
- File.new(file).each do |x|
27
- format_section(x)
28
- end
21
+ action =~ /show/ ? File.new(file).each {|x| format_text(x)} : edit_text(file)
29
22
  end
30
23
  end
31
24
  end
32
25
 
33
- def format_section(section,empha_regexp = false)
34
- if section =~ /^(=+)\s+(.*)/
35
- level,stuff = $1.size,$2
36
- # Highlight the keyword when searching
37
- stuff = empha(stuff,"head#{level}",empha_regexp) if empha_regexp
38
- colorful("\s"*(level-1) + stuff,"head#{level}")
39
- else
40
- section = empha(section,"text",empha_regexp) if empha_regexp
41
- colorful(section)
42
- end
26
+ def edit_text(file)
27
+ FileUtils.mkdir_p(File.dirname(file)) # Prepare Directory When Add File
28
+ Error('Text') unless system("#{Yac::CONFIG["editor"]||ENV['EDITOR']} '#{file}'")
43
29
  end
44
30
 
45
- def edit_file(file)
46
- case `file "#{file}" 2>/dev/null`
47
- when / PDF /
48
- colorful(Pdf_Error,'warn') unless system("#{Yac::CONFIG["pdf_edit_command"]||'ooffice'} '#{file}' 2>/dev/null")
49
- when /( image )|(\.svg)/
50
- colorful(Image_Error,'warn') unless system("#{Yac::CONFIG["image_edit_command"]||'gimp'} '#{file}' 2>/dev/null")
51
- when /Office Document/
52
- open_office(file)
31
+ def format_text(section,empha_regexp = false)
32
+ if section =~ /^(=+)\s+(.*)/
33
+ level,section = $1.size,$2
34
+ # Highlight keyword when searching
35
+ section = empha(section,"head#{level}",empha_regexp) if empha_regexp
36
+ colorful("\s"*(level-1) + section,"head#{level}")
53
37
  else
54
- if File.extname(file) =~ /^\.(od[tfspg]|uof)$/ #Support odf uof ods odp...
55
- open_office(file)
56
- else
57
- edit_text(file)
58
- end
38
+ # command or plain text
39
+ level = (section =~ /^\s*\$\s+/) ? 'shell' : 'text'
40
+ section.sub!(/^(\s*\$\s+.*)/,"\e[#{@color['shell']}m"+'\1'+"\e[0m")
41
+ section = empha(section,level,empha_regexp) if empha_regexp
42
+ colorful(section)
59
43
  end
60
44
  end
61
45
 
62
- def open_office(file)
63
- colorful(Office_Error,'warn') unless system("#{Yac::CONFIG["office_command"]||'ooffice'} '#{file}' 2>/dev/null")
64
- end
65
-
66
- def edit_text(file)
67
- prepare_dir(file)
68
- colorful(Doc_Error,'warn') unless system("#{Yac::CONFIG["editor"] || ENV['EDITOR'] ||'vim'} '#{file}' 2>/dev/null")
69
- end
70
-
71
46
  def colorful(stuff,level="text",line_break = true)
72
47
  stuff = empha(stuff,level)
73
- print "\e[%sm%s\e[0m " % [Yac::CONFIG[level],stuff.rstrip]
48
+ print "\e[%sm%s\e[0m " % [@color[level],stuff.rstrip]
74
49
  print "\n" if line_break
75
50
  end
76
51
 
77
52
  def empha(stuff,level="text",empha_regexp=/(@(.*)@)/)
78
53
  stuff.to_s.scan(empha_regexp) do |x|
79
- return stuff.gsub(x[0],"\e[0m\e[#{Yac::CONFIG["empha"]}m%s\e[0m\e[%sm" % [x[1],Yac::CONFIG[level]])
54
+ return stuff.gsub(x[0],"\e[0m\e[#{@color["empha"]}m%s\e[0m\e[%sm" % [x[1],@color[level]])
80
55
  end
81
56
  end
82
-
83
- def prepare_dir(file)
84
- FileUtils.mkdir_p(File.dirname(file))
85
- end
86
57
  end
data/lib/git.rb CHANGED
@@ -1,41 +1,45 @@
1
1
  class Git
2
- def initialize(path)
3
- @working_path = path
4
- end
5
-
6
- def self.clone(from,path,name)
7
- `cd #{path} && git clone #{from} #{name}`
8
- end
9
-
10
- def self.init(path)
11
- `cd #{path} && git init`
12
- end
13
-
14
- def mv(orig,new,with_commit = true)
15
- `cd '#@working_path' && git mv #{orig} #{new}`
16
- self.commit("#{clean_name(orig)} Renamed to #{clean_name(new)}") if with_commit
17
- end
18
-
19
- def add(file,with_commit = true)
20
- `cd '#@working_path' && git add '#{file}'`
21
- self.commit("#{clean_name(file)} Added") if with_commit
22
- end
23
-
24
- def edit(file,with_commit = true)
25
- `cd '#@working_path' && git add '#{file}'`
26
- self.commit("#{clean_name(file)} Updated") if with_commit
27
- end
28
-
29
- def rm(file,with_commit=true)
30
- `cd '#@working_path' && git rm -f '#{file}'`
31
- self.commit("#{clean_name(file)} Removed") if with_commit
32
- end
33
-
34
- def commit(msg,*args)
35
- `cd '#@working_path' && git commit #{args.to_s} -m '#{msg}'`
36
- end
37
-
38
- def clean_name(f)
39
- return f.sub(/^(.*)?\/(main|private)\/(.*)/,'\3').sub(/^@/,'')
2
+ class << self
3
+ def clone(from,path)
4
+ system("git clone #{from} #{path}")
5
+ end
6
+
7
+ def init(path)
8
+ system("mkdir -p #{path}")
9
+ system("cd #{path} && git init")
10
+ end
11
+
12
+ def mv(orig,new)
13
+ FileUtils.mkdir_p(File.dirname(new))
14
+ system("git mv #{orig} #{new}")
15
+ self.commit("#{cleanup_name(orig)} Renamed to #{cleanup_name(new)}")
16
+ end
17
+
18
+ def add(file)
19
+ if File.exist?(file)
20
+ return system("rm #{file}") if File.zero?(file)
21
+ system("git add '#{file}'")
22
+ self.commit("#{cleanup_name(file)} Added")
23
+ end
24
+ end
25
+
26
+ def edit(file)
27
+ return rm(file) if File.zero?(file)
28
+ system("git add '#{file}'")
29
+ self.commit("#{cleanup_name(file)} Updated")
30
+ end
31
+
32
+ def rm(file)
33
+ system("git rm -f '#{file}'")
34
+ self.commit("#{cleanup_name(file)} Removed")
35
+ end
36
+
37
+ def commit(msg,*args)
38
+ system("git commit #{args.to_s} -m '#{msg}' >/dev/null")
39
+ end
40
+
41
+ def cleanup_name(f)
42
+ return f.sub(/^(.*)?\/(main|private)\/(.*)/,'\3').sub(/^@/,'')
43
+ end
40
44
  end
41
45
  end
data/lib/symbol.rb ADDED
@@ -0,0 +1,5 @@
1
+ class Symbol
2
+ def to_proc
3
+ Proc.new { |*args| args.shift.__send__(self, *args) }
4
+ end
5
+ end
data/lib/yac.rb CHANGED
@@ -1,188 +1,190 @@
1
1
  $LOAD_PATH << File.dirname(__FILE__)
2
- %w(git fileutils yaml format).each {|f| require f}
2
+ %w(git fileutils yaml format symbol).each {|f| require f}
3
3
 
4
- module Yac
4
+ module Yac
5
5
  include Format
6
6
  extend self
7
- VERSION = '1.3.2'
8
- YACRC = File.join("#{ENV['HOME']}",".yacrc")
9
7
 
10
- FileUtils.cp(File.join(File.dirname(__FILE__), "..","resources","yacrc"), YACRC) unless File.exist?(YACRC)
8
+ VERSION = '1.4.0'
9
+
10
+ @color = {
11
+ 'head1' => "1;31",
12
+ 'head2' => "1;36",
13
+ 'head3' => "1;33",
14
+ 'head4' => "1;32",
15
+ 'head5' => "1;34",
16
+ 'head6' => "1;35",
17
+ 'head7' => "1;37",
18
+
19
+ 'shell' => "01;35",
20
+ 'warn' => "31",
21
+ 'notice' => "33",
22
+ 'empha' => "31",
23
+ 'filename' => "34",
24
+ 'line_number' => "32",
25
+ }
11
26
 
12
- CONFIG = YAML.load_file(File.join(ENV['HOME'],".yacrc"))
27
+ YACRC = File.join("#{ENV['HOME']}",".yacrc")
28
+ CONFIG = YAML.load_file( File.exist?(YACRC) ? YACRC :
29
+ File.join(File.dirname(__FILE__), "..","resources","yacrc"))
13
30
 
14
31
  CONFIG["root"] ||= File.join(ENV['HOME'],".yac")
15
32
 
16
- @main_path, @pri_path = File.join(CONFIG["root"],"/main/"), File.join(CONFIG["root"],"/private/")
17
- @main_git = Git.new(@main_path)
18
- @pri_git = Git.new(@pri_path)
33
+ @main_path = File.join(CONFIG["root"],"/main/")
34
+ @pri_path = File.join(CONFIG["root"],"/private/")
19
35
 
20
36
  def new(args)
21
- init unless File.exist?(@main_path) && File.exist?(@pri_path)
22
37
  (help && exit) if args.empty?
23
- case args.first
24
- when "-S" then search(args[1,args.size])
25
- when "-u" then update(args[1,args.size])
26
- when "-p" then push(args[1,args.size])
27
- when "-l" then log(args[1,args.size])
28
- when "-a" then add(args[1,args.size])
29
- when "-e" then edit(args[1,args.size])
38
+ operate,target = args.first,args[1,args.size].join(' ')
39
+ case operate
40
+ when "-i" then init
41
+ when "-S" then search(target)
42
+ when "-u" then update(target)
43
+ when "-p" then push(target)
44
+ when "-l" then log(target)
45
+ when "-a" then add(target)
46
+ when "-e" then edit(target)
30
47
  when /^(help|-h|yac|--help)$/ then help
31
- when "-s" then shell(args[1,args.size])
32
- when "-r" then rm(args[1,args.size])
48
+ when "-s" then shell(target)
49
+ when "-r" then rm(target)
33
50
  when "-m" then mv(args[1,args.size])
34
51
  when "-v" then colorful("Yac Version: #{Yac::VERSION}",'notice')
35
- else show(args)
52
+ else show(operate + ' ' + target)
36
53
  end
37
54
  end
38
55
 
39
56
  def init
40
- FileUtils.mkdir_p(CONFIG['root'])
41
57
  {"main" => @main_path,"private" => @pri_path}.each do |name,path|
42
58
  if File.exist?(path)
43
59
  colorful("#{name} repository has already initialized.","notice")
44
- else
45
- if CONFIG["#{name}"] && CONFIG["#{name}"]['clone-from']
46
- colorful("Initialize #{name} repository from #{CONFIG[name]['clone-from']} to #{CONFIG['root']}/#{name}","notice")
47
- Git.clone(CONFIG["#{name}"]['clone-from'],CONFIG['root'],name)
48
- else
49
- colorful("Initialize #{name} repository from scratch to #{CONFIG['root']}/#{name}","notice")
50
- prepare_dir(path)
51
- Git.init(path)
52
- end
60
+ elsif CONFIG["#{name}"] && CONFIG["#{name}"]['clone-from']
61
+ colorful("Initialize #{name} repository from #{CONFIG[name]['clone-from']}","notice")
62
+ Git.clone(CONFIG["#{name}"]['clone-from'],path)
53
63
  end
54
64
  end
55
65
  end
56
66
 
57
67
  def show(args)
58
- args.each {|x| show_single(x)}
68
+ loop do
69
+ file = search_name(args,"Show")
70
+ file ? handle_file(file) : break
71
+ end
59
72
  end
60
73
 
61
74
  def search(args)
62
- args.each {|x| search_content(x)}
63
- end
64
-
65
- def update(args)
66
- git_command(args,'pull')
67
- rescue
68
- colorful("ERROR: can not update the repository,\n\n#{$!}","warn")
69
- end
70
-
71
- def push(args)
72
- git_command(args,'push')
73
- rescue
74
- colorful("Usage:\nyac push ( main | all )\n\nTry `yac -h` for more help\n\n#{$1}","warn")
75
- end
76
-
77
- def log(args)
78
- git_command(args,'log --color --date-order --reverse')
75
+ search_content(args)
79
76
  end
80
77
 
81
- def git_command(env,command)
82
- case env.to_s
83
- when /main/ then git_path = [@main_path]
84
- when /all/ then git_path = [@main_path,@pri_path]
85
- else git_path = [@pri_path]
86
- end
87
-
88
- git_path.each do |x|
89
- colorful(x,'filename')
90
- colorful( `cd #{x} && git #{command}` ,"notice")
78
+ def add(args)
79
+ file = add_file(args,'.yac')
80
+ if file && confirm("You Are Adding #{file}")
81
+ edit_text(file)
82
+ Git.add(file)
91
83
  end
92
84
  end
93
85
 
94
86
  def edit(args)
95
- args.each {|x| edit_single(x)}
96
- end
97
-
98
- def add(args)
99
- args.each {|x| add_single(x)}
87
+ file = search_name(args,"Edit")
88
+ if file
89
+ handle_file(file,'edit')
90
+ Git.edit(file)
91
+ end
100
92
  end
101
93
 
102
94
  def rm(args)
103
- args.each {|x| rm_single(x)}
95
+ file = search_name(args,"Remove")
96
+ if file && confirm("You Are Removing #{file}.")
97
+ Git.rm(file)
98
+ end
104
99
  end
105
100
 
106
101
  def help
107
- format_file(File.dirname(__FILE__)+"/../README.rdoc")
102
+ handle_file(File.dirname(__FILE__)+"/../README.rdoc")
108
103
  end
109
104
 
110
105
  def shell(args)
111
- case args.to_s
112
- when /main/
106
+ if args.to_s =~ /main/
113
107
  colorful(" Welcome To The Main Yac Repository","notice")
114
- system "cd '#{@main_path}'; sh"
108
+ system("cd '#{@main_path}'; sh")
115
109
  else
116
110
  colorful(" Welcome To The Private Yac Repository","notice")
117
- system "cd '#{@pri_path}'; sh"
111
+ system("cd '#{@pri_path}'; sh")
118
112
  end
119
113
  end
120
114
 
121
115
  def mv(args)
122
- (colorful("Usage:\nyac mv [orign_name] [new_name]\n\nTry `yac -h` for more help","warn");exit) unless args.size == 2
116
+ (colorful("Usage:\nyac mv [orign_name] [new_name]","warn");exit) unless args.size == 2
123
117
  file = search_name(args[0],"Rename")
124
- #You can use $ yac mv linux.ch linux/ to rename linux.ch to linux/linux.ch
125
- new_filename = args[1].sub(/\/$/,file.sub(/.*\/(.*)(\..*)/,'/\1')).sub(/^(@)?/,file =~ /^#{@main_path}/ ? "@":"")
126
- new_name = add_file(new_filename ,file.sub(/.*(\..*)/,'\1'))
118
+
119
+ # You can use $ yac mv linux linux/ to rename linux to linux/linux
120
+ new_filename = args[1] =~ /\/$/ ? args[1] : args[1] + file.match(/[^\/]$/).to_s
121
+ new_filename = '@' + new_filename if file =~ /^#{@main_path}/
122
+ new_name = add_file(new_filename)
123
+
127
124
  if new_name && confirm("You Are Renaming #{file} To #{new_name}")
128
- prepare_dir(new_name)
129
- @working_git.mv(file,new_name)
125
+ Git.mv(file,new_name)
130
126
  end
131
127
  end
132
128
 
133
129
  protected
134
- def add_single(args)
135
- file = add_file(args)
136
- if file && confirm("You Are Adding #{file}")
137
- edit_text(file)
138
- @working_git.add(file)
139
- end
140
- end
141
-
142
- def add_file(args,suffix = ".ch")
143
- if args.include?('/') && args =~ /(@?)(?:(.*)\/)(.+)/ #choose directory
130
+ def add_file(args,*suffix)
131
+ suffix = suffix ? suffix.to_s : ''
132
+ if args.include?('/') && args =~ /(@?)(?:(.*)\/)(.+)/ #choose directory
144
133
  prefix,path_name,file_name = $1,$2,$3
145
- path = prefix.empty? ? @pri_path : @main_path #choose git path
146
- # Yes,you can use 'l/e' to choose 'linux/gentoo'
134
+ path = prefix.empty? ? @pri_path : @main_path #choose git path
135
+ # Use 'l/e' to choose 'linux/gentoo'
147
136
  all_path = %x{
148
- find #{path} -type d -iwholename '#{path}*#{path_name.gsub(/\//,'*/*')}*' -not -iwholename '*.git*'| sed 's/^.*\\/\\(private\\|main\\)\\//#{prefix}/'
137
+ find -L #{path} -type d -iwholename '#{path}*#{path_name.gsub(/\//,'*/*')}*' -not -iwholename '*\/.git\/*' | sed 's/^.*\\/\\(private\\|main\\)\\//#{prefix}/'
149
138
  }.to_a.map(&:strip).concat([prefix+path_name]).uniq
150
139
 
151
140
  colorful("Which directory do you want to use:","notice")
152
141
  choosed_path = choose_one(all_path)
153
- return full_path(choosed_path + "/" + file_name + suffix) if choosed_path
142
+ return choosed_path ? full_path(choosed_path + "/" + file_name + suffix) : false
154
143
  else
155
- return full_path(args+suffix)
144
+ return full_path(args + suffix)
156
145
  end
157
146
  end
158
147
 
159
- def show_single(args)
160
- loop do
161
- file = search_name(args,"Show")
162
- file ? format_file(file) : break
163
- end
148
+ #
149
+ # Git
150
+ #
151
+
152
+ def update(args)
153
+ git_command(args,'pull')
164
154
  end
165
155
 
166
- def rm_single(args)
167
- file = search_name(args,"Remove")
168
- if file && confirm("You Are Removing #{file}.")
169
- @working_git.rm(file)
170
- end
156
+ def push(args)
157
+ git_command(args,'push')
171
158
  end
172
159
 
173
- def edit_single(args)
174
- file = search_name(args,"Edit")
175
- if file
176
- edit_file(file)
177
- @working_git.edit(file)
160
+ def log(args)
161
+ git_command(args,'log --color')
162
+ end
163
+
164
+ def git_command(env,command)
165
+ case env.to_s
166
+ when /main/ then git_path = [@main_path]
167
+ when /all/ then git_path = [@main_path,@pri_path]
168
+ else git_path = [@pri_path]
169
+ end
170
+
171
+ git_path.each do |x|
172
+ colorful(x,'filename')
173
+ system("cd #{x} && git #{command}")
178
174
  end
179
175
  end
180
176
 
181
- def search_name(args,msg = nil)
182
- path = (args =~ /^(@)/) ? [@main_path] : [@main_path , @pri_path]
177
+ #
178
+ # Search
179
+ #
180
+
181
+ def search_name(args,msg)
182
+ path = (args =~ /^(@)/) ? [@pri_path] : [@main_path , @pri_path]
183
183
  result = []
184
184
  path.each do |x|
185
- result.concat(`find "#{x}" -type f -iwholename '#{x}*#{args.gsub(/\//,'*/*').sub(/^@/,'').strip}*' -not -iwholename '*\/.git\/*'| sed 's/^.*\\/\\(private\\|main\\)\\//#{x=~/main/ ? '@':'' }/'`.to_a)
185
+ result.concat( %x{
186
+ find -L "#{x}" -type f -iwholename '#{x}*#{args.gsub(/\//,'*/*').sub(/^@/,'').strip}*' -not -iwholename '*\/.git\/*'| sed 's/^.*\\/\\(private\\|main\\)\\//#{x=~/main/ ? '@':'' }/'
187
+ }.to_a )
186
188
  end
187
189
 
188
190
  if result.empty?
@@ -195,58 +197,65 @@ module Yac
195
197
  end
196
198
 
197
199
  def search_content(args)
198
- result = `find "#{@pri_path}" -iname '*.ch' -not -iwholename '*\/.git\/*' -exec grep -HniP '#{args}' '{}' \\;`.to_a
199
- result.concat(`find "#{@main_path}" -iname '*.ch' -not -iwholename '*\/.git\/*' -exec grep -HniP '#{args}' '{}' \\; | sed 's/^/@/g'`.to_a)
200
+ # find -type f -exec sh -c 'file="{}";type=$(file $file);[[ $type =~ " text" ]] && echo $file' \; => Too slow
201
+
202
+ # If use @ as prefix , only search private repository
203
+ result = args.sub!(/^@/,'') ? [] : %x(
204
+ find "#{@main_path}" -not -iwholename '*\/.git\/*' | grep -E '*\.[ch|yac|yml]'| xargs grep -HniP '#{args}' | sed 's/^/@/g'
205
+ ).to_a
206
+
207
+ result.concat %x(
208
+ find "#{@pri_path}" -not -iwholename '*\/.git\/*' | grep -E '*\.[ch|yac|yml]'| xargs grep -HniP '#{args}'
209
+ ).to_a
210
+
200
211
  all_result = []
201
212
  result.each do |x|
202
213
  stuff = x.split(':',3)
203
214
  colorful(File.basename(stuff[0]).sub(/\..*/,''),"filename",false)
204
215
  colorful(stuff[1],"line_number",false)
205
- format_section(stuff[2],/((#{args}))/i)
216
+ format_text(stuff[2],/((#{args}))/i)
206
217
  all_result << stuff[0].sub(/(@?).*\/(?:main|private)\/(.*)/,'\1'+'\2')
207
218
  end
208
219
  all_result.uniq!
209
220
  loop do
210
- colorful("All files Contain #{args.strip},Choose one to show","notice")
221
+ colorful("All files Contain #{args.strip}","notice")
211
222
  file = full_path(choose_one(all_result))
212
- file ? format_file(file) : break
223
+ file ? handle_file(file) : break
213
224
  end
214
225
  end
215
226
 
216
- def full_path(args)
217
- return false unless args
218
- if args =~ /^@/
219
- @working_git = @main_git
220
- file = @main_path + args.sub(/^@/,"")
221
- else
222
- @working_git = @pri_git
223
- file = @pri_path + args
224
- end
225
- return file.strip
227
+ def full_path(filename)
228
+ return false unless filename
229
+ filename.sub!(/^@/,'') ? Dir.chdir(@main_path) : Dir.chdir(@pri_path)
230
+ return filename.strip
226
231
  end
227
232
 
228
233
  def confirm(*msg)
229
- colorful("#{msg.to_s}\nAre You Sure (Y/N) (q to quit):","notice",false)
234
+ colorful("#{msg.to_s}\nAre You Sure (Y/N) (q:quit):","notice",false)
230
235
  return STDIN.gets.to_s =~ /n|q/i ? false : true
231
236
  end
232
237
 
233
- def choose_one(stuff)
234
- if stuff.size > 0
235
- stuff.each_index do |x|
236
- colorful("%2s" % (x+1).to_s,"line_number",false)
237
- printf "%-22s\t" % [stuff[x].rstrip]
238
- print "\n" if (x+1)%3 == 0
239
- end
240
- printf "\n"
241
- num = choose_range(stuff.size)
242
- return stuff[num-1].to_s.strip #return the filename
238
+ def choose_one(args)
239
+ return false unless args.size > 0
240
+
241
+ args.each_index do |x|
242
+ printf "\e[%dm%3s\e[0m" % [args[x] =~ /^@/ ? 36:34,x+1]
243
+ printf " %-22s" % [trancate_filename(args[x].strip)]
244
+ print "\n" if (x+1)%3 == 0
243
245
  end
244
- rescue #Rescue for user input q to quit
246
+ puts "\n" if args.size%3 != 0
247
+
248
+ num = choose_range(args.size)
249
+ return num ? args[num-1].to_s.strip : false #return the filename
250
+ end
251
+
252
+ def trancate_filename(name)
253
+ name.sub!(/\..*$/,'').sub!(/^@/,'')
254
+ content = name.size > 22 ? '..' + name.reverse[0,20].reverse : name
245
255
  end
246
256
 
247
- #choose a valid number
248
257
  def choose_range(size)
249
- colorful("Please Input A Valid Number To Choose (1..#{size}) (q to quit): ","notice",false)
258
+ colorful("Please Input A Valid Number (1..#{size}) (q:quit): ","notice",false)
250
259
  num = STDIN.gets
251
260
  return false if num =~ /q/i
252
261
  choosed_num = num.strip.empty? ? 1 : num.to_i
data/resources/yacrc CHANGED
@@ -1,54 +1,19 @@
1
1
  #root:
2
- # add_if_not_exist: true
2
+
3
3
  main:
4
4
  clone-from: git://github.com/wosmvp/cheat.git
5
- # push-to:
5
+ # push-to:
6
6
  private:
7
- # clone-from:
8
- # push-to:
7
+ # clone-from:
8
+ # push-to:
9
9
 
10
- pdf_command: evince
11
- office_command: ooffice
12
- #image_command: evince
13
- #editor: vim
14
- #pdf_edit_command: ooffice
15
- #image_edit_command: gimp
16
10
 
17
- head1: "1;31"
18
- head2: "1;36"
19
- head3: "1;33"
20
- head4: "1;32"
21
- head5: "1;34"
22
- head6: "1;35"
23
- head7: "1;37"
11
+ editor: vim
24
12
 
25
- warn: "31"
26
- notice: "33"
27
- empha: "31;43"
28
- filename: "34"
29
- line_number: "32"
30
- text:
13
+ show_pdf: evince
14
+ show_image: eog
15
+ show_office: ooffice
31
16
 
32
- # How To Set Color
33
- #1 - Change text to hicolor (bold) mode
34
- #4 - " " " Underline
35
- #5 - " " " Blink
36
- #8 - " " " Hidden (same color as bg)
37
- #30 - " " " Black
38
- #31 - " " " Red
39
- #32 - " " " Green
40
- #33 - " " " Yellow
41
- #34 - " " " Blue
42
- #35 - " " " Magenta
43
- #36 - " " " Cyan
44
- #37 - " " " White
45
- #40 - Change background to Black
46
- #41 - " " " Red
47
- #42 - " " " Green
48
- #43 - " " " Yellow
49
- #44 - " " " Blue
50
- #45 - " " " Magenta
51
- #46 - " " " Cyan
52
- #47 - " " " White
53
- #0 - Turn off all attributes.
54
- #7 - Change to Black text on a White background
17
+ edit_pdf: ooffice
18
+ edit_image: gimp
19
+ edit_office: ooffice
data/yac.gemspec CHANGED
@@ -2,17 +2,17 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{yac}
5
- s.version = "1.3.2"
5
+ s.version = "1.4.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Jinzhu Zhang"]
9
- s.date = %q{2008-12-15}
9
+ s.date = %q{2008-12-28}
10
10
  s.default_executable = %q{yac}
11
11
  s.description = %q{Yet Another Cheat: sexy command line tool for cheat sheet.}
12
12
  s.email = %q{wosmvp@gmail.com}
13
13
  s.executables = ["yac"]
14
- s.extra_rdoc_files = ["CHANGELOG", "bin/yac", "lib/git.rb", "lib/format.rb", "lib/yac.rb", "README.rdoc"]
15
- s.files = ["CHANGELOG", "resources/yacrc", "bin/yac", "Rakefile", "yac.gemspec", "lib/git.rb", "lib/format.rb", "lib/yac.rb", "README.rdoc", "Manifest"]
14
+ s.extra_rdoc_files = ["CHANGELOG", "bin/yac", "lib/git.rb", "lib/format.rb", "lib/symbol.rb", "lib/yac.rb", "README.rdoc"]
15
+ s.files = ["Manifest", "CHANGELOG", "resources/yacrc", "bin/yac", "Rakefile", "lib/git.rb", "lib/format.rb", "lib/symbol.rb", "lib/yac.rb", "README.rdoc", "yac.gemspec"]
16
16
  s.has_rdoc = true
17
17
  s.homepage = %q{http://www.zhangjinzhu.com}
18
18
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Yac", "--main", "README.rdoc"]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yac
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.2
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jinzhu Zhang
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-12-15 00:00:00 +08:00
12
+ date: 2008-12-28 00:00:00 +08:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -24,19 +24,21 @@ extra_rdoc_files:
24
24
  - bin/yac
25
25
  - lib/git.rb
26
26
  - lib/format.rb
27
+ - lib/symbol.rb
27
28
  - lib/yac.rb
28
29
  - README.rdoc
29
30
  files:
31
+ - Manifest
30
32
  - CHANGELOG
31
33
  - resources/yacrc
32
34
  - bin/yac
33
35
  - Rakefile
34
- - yac.gemspec
35
36
  - lib/git.rb
36
37
  - lib/format.rb
38
+ - lib/symbol.rb
37
39
  - lib/yac.rb
38
40
  - README.rdoc
39
- - Manifest
41
+ - yac.gemspec
40
42
  has_rdoc: true
41
43
  homepage: http://www.zhangjinzhu.com
42
44
  post_install_message: