yoke 0.1
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/.gitignore +17 -0
- data/Gemfile +3 -0
- data/LICENSE.txt +22 -0
- data/README.md +64 -0
- data/Rakefile +1 -0
- data/bin/yoke +30 -0
- data/lib/yoke/alias.rb +77 -0
- data/lib/yoke/base.rb +143 -0
- data/lib/yoke/bash.rb +17 -0
- data/lib/yoke/version.rb +3 -0
- data/lib/yoke/zsh.rb +17 -0
- data/lib/yoke.rb +5 -0
- data/yoke.gemspec +26 -0
- metadata +126 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 Jelle Vandebeeck
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
# Yoke
|
2
|
+
|
3
|
+
Alias your current directory for fast directory access.
|
4
|
+
|
5
|
+
Create an alias for the current directory with a small 'yoke' command. And when you're somewhere else just type the name of the create alias and you'll be cd'ed to the director.
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
Install the gem:
|
10
|
+
|
11
|
+
$ gem install yoke
|
12
|
+
|
13
|
+
## Usage
|
14
|
+
|
15
|
+
There are only 5 functions you can use with ths gem. We'll start with the beginning.
|
16
|
+
|
17
|
+
### Help
|
18
|
+
|
19
|
+
Get an overview of all commands available with a small description.
|
20
|
+
|
21
|
+
yoke help
|
22
|
+
|
23
|
+
### Setup
|
24
|
+
|
25
|
+
Prepare your current shell (bash or zsh) so that it loads the .yoke file every time you start a new shell.
|
26
|
+
|
27
|
+
yoke setup
|
28
|
+
|
29
|
+
### up
|
30
|
+
|
31
|
+
Create a new alias for the current directory with the name of the current directory.
|
32
|
+
|
33
|
+
yoke
|
34
|
+
yoke up
|
35
|
+
yoke up the_alias_name
|
36
|
+
|
37
|
+
You can pass an extra parameter (the\_alias\_name) so that the alias will be this name instead of the current directory name.
|
38
|
+
|
39
|
+
### down
|
40
|
+
|
41
|
+
Remove the alias that exists with the name of the current directory.
|
42
|
+
|
43
|
+
yoke down
|
44
|
+
yoke down the_alias_name
|
45
|
+
|
46
|
+
You can pass an extra parameter (the\_alias\_name) so that the alias with this name will be removed instead of the current directory name.
|
47
|
+
|
48
|
+
### list
|
49
|
+
|
50
|
+
Show the list of aliases created with yoke.
|
51
|
+
|
52
|
+
yoke list
|
53
|
+
|
54
|
+
## License
|
55
|
+
|
56
|
+
Check out the LICENSE.txt file. Really awesome reading material...
|
57
|
+
|
58
|
+
## Contributing
|
59
|
+
|
60
|
+
1. Fork it
|
61
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
62
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
63
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
64
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/bin/yoke
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
#! /usr/bin/ruby
|
2
|
+
|
3
|
+
require "thor"
|
4
|
+
require "yoke"
|
5
|
+
|
6
|
+
class YokeCommand < Thor
|
7
|
+
default_command :up
|
8
|
+
|
9
|
+
desc "up [NAME]", "Create the alias for the current directory with the current directory name or use the given name as the alias."
|
10
|
+
def up(name=nil)
|
11
|
+
Yoke::Base.add(name)
|
12
|
+
end
|
13
|
+
|
14
|
+
desc "down [NAME]", "Remove the alias for the current directory or remove the alias with the given name."
|
15
|
+
def down(name=nil)
|
16
|
+
Yoke::Base.remove(name)
|
17
|
+
end
|
18
|
+
|
19
|
+
desc "list", "List all the aliases."
|
20
|
+
def list
|
21
|
+
Yoke::Base.list
|
22
|
+
end
|
23
|
+
|
24
|
+
desc "setup", "Setup yoke with ZSH/BASH."
|
25
|
+
def setup
|
26
|
+
Yoke::Base.setup
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
YokeCommand.start
|
data/lib/yoke/alias.rb
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
module Yoke
|
2
|
+
class Alias
|
3
|
+
class << self
|
4
|
+
def list
|
5
|
+
return {} unless Yoke::Base.has_alias_file?
|
6
|
+
|
7
|
+
aliases = {}
|
8
|
+
File.readlines(Yoke::Base.alias_file_path).each do |line|
|
9
|
+
if line.start_with? "alias"
|
10
|
+
alias_extract = line.scan(/^alias\s(\w+)\=\"cd (.+)\"$/).last
|
11
|
+
aliases[alias_extract[0]] = alias_extract[1]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
aliases
|
15
|
+
end
|
16
|
+
|
17
|
+
def add(path, name)
|
18
|
+
Yoke::Base.create_alias_file
|
19
|
+
if list.has_key?(name)
|
20
|
+
false
|
21
|
+
else
|
22
|
+
content = []
|
23
|
+
added = false
|
24
|
+
File.readlines(Yoke::Base.alias_file_path).each do |line|
|
25
|
+
if line.start_with? "alias"
|
26
|
+
alias_extract = line.scan(/^alias\s(\w+)\=\"cd (.+)\"$/).last
|
27
|
+
if alias_extract[1] == path
|
28
|
+
content << alias_string(name, path)
|
29
|
+
added = true
|
30
|
+
else
|
31
|
+
content << line
|
32
|
+
end
|
33
|
+
else
|
34
|
+
content << line
|
35
|
+
end
|
36
|
+
end
|
37
|
+
File.open(Yoke::Base.alias_file_path, "w") do |file|
|
38
|
+
content.each { |line| file.puts line }
|
39
|
+
end
|
40
|
+
unless added
|
41
|
+
File.open(Yoke::Base.alias_file_path, 'a') do |file|
|
42
|
+
file.puts alias_string(name, path)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
true
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def remove(path, name)
|
50
|
+
return false unless Yoke::Base.has_alias_file?
|
51
|
+
|
52
|
+
if list.has_key?(name)
|
53
|
+
content = []
|
54
|
+
File.readlines(Yoke::Base.alias_file_path).each do |line|
|
55
|
+
if line.start_with? "alias"
|
56
|
+
alias_extract = line.scan(/^alias\s(\w+)\=\"cd (.+)\"$/).last
|
57
|
+
if alias_extract[0] != name
|
58
|
+
content << line
|
59
|
+
end
|
60
|
+
else
|
61
|
+
content << line
|
62
|
+
end
|
63
|
+
end
|
64
|
+
File.open(Yoke::Base.alias_file_path, "w") do |file|
|
65
|
+
content.each { |line| file.puts line }
|
66
|
+
end
|
67
|
+
else
|
68
|
+
false
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def alias_string(name, path)
|
73
|
+
"alias #{name.squish.downcase.tr(" ","_")}=\"cd #{path}\""
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
data/lib/yoke/base.rb
ADDED
@@ -0,0 +1,143 @@
|
|
1
|
+
require "yoke/alias"
|
2
|
+
require "yoke/zsh"
|
3
|
+
require "yoke/bash"
|
4
|
+
|
5
|
+
module Yoke
|
6
|
+
class Base
|
7
|
+
FILENAME = ".yoke"
|
8
|
+
|
9
|
+
class << self
|
10
|
+
def setup
|
11
|
+
if %x[echo $SHELL].include?("zsh")
|
12
|
+
Yoke::Zsh.setup
|
13
|
+
else
|
14
|
+
Yoke::Bash.setup
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def add(name=nil)
|
19
|
+
puts yoke_text
|
20
|
+
|
21
|
+
path = Dir.pwd
|
22
|
+
name = name || File.basename(path)
|
23
|
+
if Yoke::Alias.add(path, name)
|
24
|
+
puts_text("")
|
25
|
+
puts_text("Added #{name} as alias for #{path}")
|
26
|
+
else
|
27
|
+
puts_text("")
|
28
|
+
puts_text("The alias with #{name} already exists")
|
29
|
+
end
|
30
|
+
source_text
|
31
|
+
puts end_text
|
32
|
+
end
|
33
|
+
|
34
|
+
def remove(name=nil)
|
35
|
+
puts yoke_text
|
36
|
+
|
37
|
+
path = Dir.pwd
|
38
|
+
name = name || File.basename(path)
|
39
|
+
if Yoke::Alias.remove(path, name)
|
40
|
+
puts_text("")
|
41
|
+
puts_text("Removed #{name} as an alias")
|
42
|
+
else
|
43
|
+
puts_text("")
|
44
|
+
puts_text("The alias with #{name} is does not exist")
|
45
|
+
end
|
46
|
+
delete_text(name)
|
47
|
+
puts end_text
|
48
|
+
end
|
49
|
+
|
50
|
+
def list
|
51
|
+
puts yoke_text
|
52
|
+
|
53
|
+
list = Yoke::Alias.list
|
54
|
+
if list.count > 0
|
55
|
+
puts_text("")
|
56
|
+
puts_text("Listing all aliases")
|
57
|
+
puts_text("")
|
58
|
+
longest_word_count = list.keys.group_by(&:size).max.last.last.size
|
59
|
+
list.each do |alias_link, path|
|
60
|
+
printf "### %-#{longest_word_count}s %s %-#{sharp_count - 9 - longest_word_count - path.size}s###\n", alias_link, path, ""
|
61
|
+
end
|
62
|
+
else
|
63
|
+
puts_text("")
|
64
|
+
puts_text("No aliases to list")
|
65
|
+
end
|
66
|
+
puts_text("")
|
67
|
+
puts end_text
|
68
|
+
end
|
69
|
+
|
70
|
+
def directory?(path)
|
71
|
+
File.directory?(path)
|
72
|
+
end
|
73
|
+
|
74
|
+
def alias_file_path
|
75
|
+
File.join(Dir.home, FILENAME)
|
76
|
+
end
|
77
|
+
|
78
|
+
def has_alias_file?
|
79
|
+
File.exists?(alias_file_path)
|
80
|
+
end
|
81
|
+
|
82
|
+
def create_alias_file
|
83
|
+
unless has_alias_file?
|
84
|
+
puts_text("")
|
85
|
+
puts_text("Generated #{FILENAME} file")
|
86
|
+
File.open(alias_file_path, "w") { |f| f.write(empty_file_contents) }
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def empty_file_contents
|
91
|
+
<<TEXT
|
92
|
+
# File generated by Yoke (http://fousa.be/apps/yoke).
|
93
|
+
#
|
94
|
+
# Do not alter this file or yoke will stop working correctly.
|
95
|
+
#
|
96
|
+
TEXT
|
97
|
+
end
|
98
|
+
|
99
|
+
def yoke_text
|
100
|
+
<<TEXT
|
101
|
+
#############################################################################################################
|
102
|
+
### YOKE ####################################################################################################
|
103
|
+
#############################################################################################################
|
104
|
+
TEXT
|
105
|
+
end
|
106
|
+
|
107
|
+
def end_text
|
108
|
+
<<TEXT
|
109
|
+
#############################################################################################################
|
110
|
+
TEXT
|
111
|
+
end
|
112
|
+
|
113
|
+
def delete_text(alias_name)
|
114
|
+
puts_text("")
|
115
|
+
puts_text("To remove this alias immediately run the following command:")
|
116
|
+
puts_text("")
|
117
|
+
puts_text("unalias #{alias_name}")
|
118
|
+
puts_text("")
|
119
|
+
puts_text("Or just start another shell and the aliases are reloaded for you!")
|
120
|
+
puts_text("")
|
121
|
+
end
|
122
|
+
|
123
|
+
def source_text
|
124
|
+
puts_text("")
|
125
|
+
puts_text("You should reload the 'yoke' aliases defined in your .yoke file.")
|
126
|
+
puts_text("You can do this by executing the following command:")
|
127
|
+
puts_text("")
|
128
|
+
puts_text("source ~/.yoke")
|
129
|
+
puts_text("")
|
130
|
+
puts_text("Or just start another shell and the aliases are reloaded for you!")
|
131
|
+
puts_text("")
|
132
|
+
end
|
133
|
+
|
134
|
+
def sharp_count
|
135
|
+
"#############################################################################################################".size
|
136
|
+
end
|
137
|
+
|
138
|
+
def puts_text(text)
|
139
|
+
printf "### %-#{sharp_count - 8}s ###\n", text
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
data/lib/yoke/bash.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
module Yoke
|
2
|
+
class Bash
|
3
|
+
class << self
|
4
|
+
def custom_path
|
5
|
+
File.join(Dir.home)
|
6
|
+
end
|
7
|
+
|
8
|
+
def setup
|
9
|
+
unless File.exists?(custom_path)
|
10
|
+
File.open(custom_path, 'a') do |file|
|
11
|
+
file.puts "source ~/#{Yoke::Base::FILENAME}"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/yoke/version.rb
ADDED
data/lib/yoke/zsh.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
module Yoke
|
2
|
+
class Zsh
|
3
|
+
class << self
|
4
|
+
def custom_path
|
5
|
+
File.join(Dir.home, ".oh-my-zsh/custom/yoke.zsh")
|
6
|
+
end
|
7
|
+
|
8
|
+
def setup
|
9
|
+
unless File.exists?(custom_path)
|
10
|
+
File.open(custom_path, 'a') do |file|
|
11
|
+
file.puts "source ~/#{Yoke::Base::FILENAME}"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/yoke.rb
ADDED
data/yoke.gemspec
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'yoke/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "yoke"
|
8
|
+
spec.version = Yoke::VERSION
|
9
|
+
spec.platform = Gem::Platform::RUBY
|
10
|
+
spec.authors = ["Jelle Vandebeeck"]
|
11
|
+
spec.email = ["jelle@fousa.be"]
|
12
|
+
spec.description = %q{Alias your current directory for fast directory access.}
|
13
|
+
spec.summary = %q{Create an alias for the current directory with a small 'yoke' command. And when you're somewhere else just type the name of the create alias and you'll be cd'ed to the director.}
|
14
|
+
spec.homepage = "https://github.com/fousa/yoke"
|
15
|
+
spec.license = "MIT"
|
16
|
+
|
17
|
+
spec.files = `git ls-files`.split($/)
|
18
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
19
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
20
|
+
spec.require_paths = ["lib"]
|
21
|
+
|
22
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
23
|
+
spec.add_development_dependency "rake"
|
24
|
+
spec.add_development_dependency "rspec"
|
25
|
+
spec.add_dependency 'thor', '0.18.1'
|
26
|
+
end
|
metadata
ADDED
@@ -0,0 +1,126 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: yoke
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.1'
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Jelle Vandebeeck
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-05-22 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: bundler
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '1.3'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.3'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rake
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rspec
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: thor
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - '='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 0.18.1
|
70
|
+
type: :runtime
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - '='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 0.18.1
|
78
|
+
description: Alias your current directory for fast directory access.
|
79
|
+
email:
|
80
|
+
- jelle@fousa.be
|
81
|
+
executables:
|
82
|
+
- yoke
|
83
|
+
extensions: []
|
84
|
+
extra_rdoc_files: []
|
85
|
+
files:
|
86
|
+
- .gitignore
|
87
|
+
- Gemfile
|
88
|
+
- LICENSE.txt
|
89
|
+
- README.md
|
90
|
+
- Rakefile
|
91
|
+
- bin/yoke
|
92
|
+
- lib/yoke.rb
|
93
|
+
- lib/yoke/alias.rb
|
94
|
+
- lib/yoke/base.rb
|
95
|
+
- lib/yoke/bash.rb
|
96
|
+
- lib/yoke/version.rb
|
97
|
+
- lib/yoke/zsh.rb
|
98
|
+
- yoke.gemspec
|
99
|
+
homepage: https://github.com/fousa/yoke
|
100
|
+
licenses:
|
101
|
+
- MIT
|
102
|
+
post_install_message:
|
103
|
+
rdoc_options: []
|
104
|
+
require_paths:
|
105
|
+
- lib
|
106
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
107
|
+
none: false
|
108
|
+
requirements:
|
109
|
+
- - ! '>='
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
112
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
requirements: []
|
119
|
+
rubyforge_project:
|
120
|
+
rubygems_version: 1.8.25
|
121
|
+
signing_key:
|
122
|
+
specification_version: 3
|
123
|
+
summary: Create an alias for the current directory with a small 'yoke' command. And
|
124
|
+
when you're somewhere else just type the name of the create alias and you'll be
|
125
|
+
cd'ed to the director.
|
126
|
+
test_files: []
|