completely 0.1.2 → 0.1.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c09f951fc28b18f24c2c28fd7c80a15b3731aa07456145ab905c63c2b0dc9634
4
- data.tar.gz: a9a25173ab3358e7eea42fe38552cbced8c6602bf5a0e9e6c414555420ae7af6
3
+ metadata.gz: e8b8cc9f26134e125f8d8ec1d24081bdd3c22217e916c9233b00b471381fadc6
4
+ data.tar.gz: a161403557ba173302233a3f4c3a4b61b084157f648709b1c79627f48aac9c97
5
5
  SHA512:
6
- metadata.gz: b6edd13c5a0084485b7cb7114c45cf30d8c144075a3791aa51a8f5e7fc71df825cb03cb4786bc8fb3832f7bc1a46f06876614493184c4602d7e2e0dfbd3d4854
7
- data.tar.gz: f8eb6cb08636c4281b50d7542d3c92fc8c6914e10597605f48e29ae342b6fb8cd31fff84de9e81dc0a7011bd5e963469c11fe025719e537238883d0a5812b5d9
6
+ metadata.gz: 22d3aa7b9db836ed7977d8888f46412184ea05d8de95632476275b6a33905308556d240014e816a01c47d9d56a35dd3181aec02eec149996587803db3fc47699
7
+ data.tar.gz: a0796eedf218a01c54ba31cdb63a7a9db747ec83eb5f37726fcd67e9b201291b3f6856b28a0323310bbaf613dec3f710a2d667b6ee02751d38d391e20c079287
data/README.md CHANGED
@@ -13,7 +13,10 @@ This tool is for you if:
13
13
 
14
14
  1. You develop your own command line tools.
15
15
  2. Your life feels empty without bash completions.
16
- 3. Bash completion scripts scare you.
16
+ 3. Bash completion scripts seem overly complex to you.
17
+
18
+ Note that if you are building bash command line scripts with [bashly][bashly],
19
+ then this functionality is already integrated with it.
17
20
 
18
21
  ---
19
22
 
@@ -92,7 +95,7 @@ For more options (like setting input/output path), run
92
95
  $ completely --help
93
96
  ```
94
97
 
95
- ### Suggesting files and directories
98
+ ### Suggesting files, directories and other bash built-ins
96
99
 
97
100
  You may have noticed that the sample file contains two special entries:
98
101
 
@@ -103,6 +106,33 @@ These patterns will add the list of files and directories
103
106
  (when `<file>` is used) or just directories (when `<directory>` is used) to
104
107
  the list of suggestions.
105
108
 
109
+ You may add any of the below keywords to add additional suggestions:
110
+
111
+ | Keyword | Meaning
112
+ |-------------|---------------------
113
+ | `<alias>` | Alias names
114
+ | `<arrayvar>` | Array variable names
115
+ | `<binding>` | Readline key binding names
116
+ | `<builtin>` | Names of shell builtin commands
117
+ | `<command>` | Command names
118
+ | `<directory>` | Directory names
119
+ | `<disabled>` | Names of disabled shell builtins
120
+ | `<enabled>` | Names of enabled shell builtins
121
+ | `<export>` | Names of exported shell variables
122
+ | `<file>` | File names
123
+ | `<function>` | Names of shell functions
124
+ | `<group>` | Group names
125
+ | `<helptopic>` | Help topics as accepted by the help builtin
126
+ | `<hostname>` | Hostnames, as taken from the file specified by the HOSTFILE shell variable
127
+ | `<job>` | Job names
128
+ | `<keyword>` | Shell reserved words
129
+ | `<running>` | Names of running jobs
130
+ | `<service>` | Service names
131
+ | `<signal>` | Signal names
132
+ | `<stopped>` | Names of stopped jobs
133
+ | `<user>` | User names
134
+ | `<variable>` | Names of all shell variables
135
+
106
136
  For those interested in the technical details, any word between `<...>` will
107
137
  simply be added using the [`compgen -A action`][compgen] function, so you can
108
138
  in fact use any of its supported arguments.
@@ -152,3 +182,4 @@ to contribute, feel free to [open an issue][issues].
152
182
 
153
183
  [issues]: https://github.com/DannyBen/completely/issues
154
184
  [compgen]: https://www.gnu.org/software/bash/manual/html_node/Programmable-Completion-Builtins.html
185
+ [bashly]: https://github.com/DannyBen/bashly
data/lib/completely.rb CHANGED
@@ -3,5 +3,5 @@ if ENV['BYEBUG']
3
3
  require 'lp'
4
4
  end
5
5
 
6
- # requires 'completely'
6
+ require 'completely/pattern'
7
7
  require 'completely/completions'
@@ -15,6 +15,10 @@ module Completely
15
15
  @config, @function_name = config, function_name
16
16
  end
17
17
 
18
+ def patterns
19
+ @patterns ||= patterns!
20
+ end
21
+
18
22
  def script
19
23
  ERB.new(template, trim_mode: '%-').result(binding)
20
24
  end
@@ -32,6 +36,12 @@ module Completely
32
36
 
33
37
  private
34
38
 
39
+ def patterns!
40
+ config.map do |text, completions|
41
+ Pattern.new text, completions
42
+ end.sort_by { |pattern| -pattern.length }
43
+ end
44
+
35
45
  def template_path
36
46
  @template_path ||= File.expand_path("template.erb", __dir__)
37
47
  end
@@ -41,11 +51,7 @@ module Completely
41
51
  end
42
52
 
43
53
  def command
44
- @command ||= config.keys.first
45
- end
46
-
47
- def patterns
48
- @patterns ||= config.to_a.sort_by { |k, v| -k.size }.to_h
54
+ @command ||= config.keys.first.split(' ').first
49
55
  end
50
56
 
51
57
  def function_name
@@ -0,0 +1,42 @@
1
+ module Completely
2
+ class Pattern
3
+ attr_reader :text, :completions
4
+
5
+ def initialize(text, completions)
6
+ @text = text
7
+ @completions = completions || []
8
+ end
9
+
10
+ def length
11
+ @length ||= text.size
12
+ end
13
+
14
+ def empty?
15
+ completions.empty?
16
+ end
17
+
18
+ def words
19
+ @words ||= completions.reject { |w| w =~ /^<.*>$/ }
20
+ end
21
+
22
+ def actions
23
+ @actions ||= completions.filter_map do |word|
24
+ action = word[/^<(.+)>$/, 1]
25
+ "-A #{action}" if action
26
+ end
27
+ end
28
+
29
+ def compgen
30
+ @comgen ||= compgen!
31
+ end
32
+
33
+ private
34
+
35
+ def compgen!
36
+ result = []
37
+ result << %Q[#{actions.join ' '}] if actions.any?
38
+ result << %Q[-W "#{words.join ' '}"] if words.any?
39
+ result.any? ? result.join(' ') : nil
40
+ end
41
+ end
42
+ end
@@ -7,12 +7,9 @@
7
7
  local cur=${COMP_WORDS[COMP_CWORD]}
8
8
 
9
9
  case "$COMP_LINE" in
10
- % patterns.each do |pattern, words|
11
- % next unless words
12
- % clean_words = words.reject { |w| w =~ /^<.*>$/ }.join " "
13
- % functions = words.filter_map { |w| func = w[/^<(.+)>$/, 1] ; "-A #{func}" if func }
14
- % flags = functions.any? ? "#{functions.join ' '} -W" : "-W"
15
- '<%= pattern %>'*) COMPREPLY=($(compgen <%= flags %> "<%= clean_words %>" -- "$cur")) ;;
10
+ % patterns.each do |pattern|
11
+ % next if pattern.empty?
12
+ '<%= pattern.text %>'*) COMPREPLY=($(compgen <%= pattern.compgen %> -- "$cur")) ;;
16
13
  % end
17
14
  esac
18
15
  }
@@ -1,3 +1,3 @@
1
1
  module Completely
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: completely
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Danny Ben Shitrit
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-07-20 00:00:00.000000000 Z
11
+ date: 2021-07-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colsole
@@ -51,6 +51,7 @@ files:
51
51
  - lib/completely/cli.rb
52
52
  - lib/completely/command.rb
53
53
  - lib/completely/completions.rb
54
+ - lib/completely/pattern.rb
54
55
  - lib/completely/sample.yaml
55
56
  - lib/completely/template.erb
56
57
  - lib/completely/version.rb