howzit 2.1.13 → 2.1.15
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 +4 -4
- data/.gitignore +1 -0
- data/.irbrc +6 -0
- data/CHANGELOG.md +18 -0
- data/README.md +1 -1
- data/README.rdoc +6 -0
- data/Rakefile +15 -5
- data/bin/howzit +2 -4
- data/docker/Dockerfile-2.6 +1 -1
- data/docker/Dockerfile-2.7 +1 -1
- data/docker/Dockerfile-3.0 +1 -1
- data/docker/Dockerfile-3.2 +11 -0
- data/docker/bash_profile +1 -0
- data/lib/howzit/buildnote.rb +7 -3
- data/lib/howzit/config.rb +28 -1
- data/lib/howzit/prompt.rb +16 -0
- data/lib/howzit/stringutils.rb +80 -0
- data/lib/howzit/version.rb +1 -1
- data/lib/howzit.rb +2 -2
- data/scripts/runtests.sh +3 -1
- data/spec/buildnote_spec.rb +15 -3
- data/spec/cli_spec.rb +1 -1
- data/spec/spec_helper.rb +5 -0
- data/spec/topic_spec.rb +4 -1
- data/src/_README.md +2 -2
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 801a2edf83210d0abd3cf17ab9c9259469429478c48b8245df7475bde19c6676
|
4
|
+
data.tar.gz: c47dd24e16f255fcbbd0ac5acadb3c57f423bda0237bbbb85b43f8c82e08b0db
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f8ea4385da70cb5cf7e8d66b5352f164d7cee71b050cf47a544539bf61d0ffd95b4c46f77347b8cf016fd50bd9edf6f7fe1b088fb4f8d324af9343c833334204
|
7
|
+
data.tar.gz: 7bc8190df842331c74ab4dc0146262b886c1174d3fcf2faef35dc536d0622fe29c2868c4db6e2067e1198c801116d8b67bb0272214cfe8a75dd210a86ec8db66
|
data/.gitignore
CHANGED
data/.irbrc
ADDED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,21 @@
|
|
1
|
+
### 2.1.15
|
2
|
+
|
3
|
+
2024-08-07 13:10
|
4
|
+
|
5
|
+
#### FIXED
|
6
|
+
|
7
|
+
- Prompt for editor when $EDITOR is not defined
|
8
|
+
- Use exec for CLI editors provide a separate process
|
9
|
+
- Remove tests for editor in main executable
|
10
|
+
|
11
|
+
### 2.1.14
|
12
|
+
|
13
|
+
2024-08-06 16:36
|
14
|
+
|
15
|
+
#### IMPROVED
|
16
|
+
|
17
|
+
- Better algorithm for best match when `multiple_matches: best` is set
|
18
|
+
|
1
19
|
### 2.1.13
|
2
20
|
|
3
21
|
2024-08-05 12:04
|
data/README.md
CHANGED
@@ -2,13 +2,13 @@
|
|
2
2
|
# Howzit
|
3
3
|
|
4
4
|
[](https://rubygems.org/gems/howzit)
|
5
|
-
[](https://travis-ci.org/makenew/ruby-gem)
|
6
5
|
[](./LICENSE.txt)
|
7
6
|
|
8
7
|
A command-line reference tool for tracking project build systems
|
9
8
|
|
10
9
|
Howzit is a tool that allows you to keep Markdown-formatted notes about a project's tools and procedures. It functions as an easy lookup for notes about a particular task, as well as a task runner to automatically execute appropriate commands.
|
11
10
|
|
11
|
+
|
12
12
|
## Features
|
13
13
|
|
14
14
|
- Match topic titles with any portion of title
|
data/README.rdoc
ADDED
data/Rakefile
CHANGED
@@ -6,6 +6,13 @@ require 'rspec/core/rake_task'
|
|
6
6
|
require 'rubocop/rake_task'
|
7
7
|
require 'yard'
|
8
8
|
require 'tty-spinner'
|
9
|
+
require 'rdoc/task'
|
10
|
+
|
11
|
+
Rake::RDocTask.new do |rd|
|
12
|
+
rd.main = 'README.rdoc'
|
13
|
+
rd.rdoc_files.include('README.rdoc', 'lib/**/*.rb', 'bin/**/*')
|
14
|
+
rd.title = 'Howzit'
|
15
|
+
end
|
9
16
|
|
10
17
|
task default: %i[test yard]
|
11
18
|
|
@@ -41,17 +48,20 @@ task :dockertest, :version, :login do |_, args|
|
|
41
48
|
args.with_defaults(version: 'all', login: false)
|
42
49
|
case args[:version]
|
43
50
|
when /^a/
|
44
|
-
%w[
|
51
|
+
%w[2 3 32].each do |v|
|
45
52
|
Rake::Task['dockertest'].reenable
|
46
53
|
Rake::Task['dockertest'].invoke(v, false)
|
47
54
|
end
|
48
55
|
Process.exit 0
|
56
|
+
when /^32/
|
57
|
+
img = 'howzittest32'
|
58
|
+
file = 'docker/Dockerfile-3.2'
|
49
59
|
when /^3/
|
50
60
|
img = 'howzittest3'
|
51
61
|
file = 'docker/Dockerfile-3.0'
|
52
|
-
when /6$/
|
53
|
-
|
54
|
-
|
62
|
+
# when /6$/
|
63
|
+
# img = 'howzittest26'
|
64
|
+
# file = 'docker/Dockerfile-2.6'
|
55
65
|
when /(^2|7$)/
|
56
66
|
img = 'howzittest27'
|
57
67
|
file = 'docker/Dockerfile-2.7'
|
@@ -64,7 +74,7 @@ task :dockertest, :version, :login do |_, args|
|
|
64
74
|
|
65
75
|
exec "docker run -v #{File.dirname(__FILE__)}:/howzit -it #{img} /bin/bash -l" if args[:login]
|
66
76
|
|
67
|
-
spinner = TTY::Spinner.new(
|
77
|
+
spinner = TTY::Spinner.new("[:spinner] Running tests #{img}", hide_cursor: true)
|
68
78
|
|
69
79
|
spinner.auto_spin
|
70
80
|
res = `docker run --rm -v #{File.dirname(__FILE__)}:/howzit -it #{img}`
|
data/bin/howzit
CHANGED
@@ -159,15 +159,13 @@ OptionParser.new do |opts|
|
|
159
159
|
Process.exit 0
|
160
160
|
end
|
161
161
|
|
162
|
-
|
163
|
-
desc = %(Edit buildnotes file in current working directory using editor (#{editor}))
|
162
|
+
desc = %(Edit buildnotes file in current working directory using default editor)
|
164
163
|
opts.on('-e', '--edit', desc) do
|
165
164
|
Howzit.buildnote.edit
|
166
165
|
Process.exit 0
|
167
166
|
end
|
168
167
|
|
169
|
-
|
170
|
-
opts.on('--edit-config', "Edit configuration file using editor (#{config_editor})") do
|
168
|
+
opts.on('--edit-config', "Edit configuration file using default editor") do
|
171
169
|
Howzit.config.editor
|
172
170
|
Process.exit 0
|
173
171
|
end
|
data/docker/Dockerfile-2.6
CHANGED
data/docker/Dockerfile-2.7
CHANGED
data/docker/Dockerfile-3.0
CHANGED
@@ -0,0 +1,11 @@
|
|
1
|
+
FROM ruby:3.2.0
|
2
|
+
# RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
|
3
|
+
RUN mkdir /howzit
|
4
|
+
WORKDIR /howzit
|
5
|
+
# COPY ./ /howzit/
|
6
|
+
RUN gem install bundler:2.2.29
|
7
|
+
RUN apt-get update -y
|
8
|
+
RUN apt-get install -y less vim
|
9
|
+
COPY ./docker/inputrc /root/.inputrc
|
10
|
+
COPY ./docker/bash_profile /root/.bash_profile
|
11
|
+
CMD ["scripts/runtests.sh"]
|
data/docker/bash_profile
CHANGED
data/lib/howzit/buildnote.rb
CHANGED
@@ -499,7 +499,7 @@ module Howzit
|
|
499
499
|
## @return [String] file path
|
500
500
|
##
|
501
501
|
def glob_note
|
502
|
-
Dir.glob('*.{txt,md,markdown}').select(&:build_note?)[0]
|
502
|
+
Dir.glob('*.{txt,md,markdown}').select(&:build_note?).sort[0]
|
503
503
|
end
|
504
504
|
|
505
505
|
##
|
@@ -655,12 +655,14 @@ module Howzit
|
|
655
655
|
def edit_note
|
656
656
|
editor = Howzit.options.fetch(:editor, ENV['EDITOR'])
|
657
657
|
|
658
|
+
editor = Howzit.config.update_editor if editor.nil?
|
659
|
+
|
658
660
|
raise 'No editor defined' if editor.nil?
|
659
661
|
|
660
662
|
raise "Invalid editor (#{editor})" unless Util.valid_command?(editor)
|
661
663
|
|
662
664
|
create_note(prompt: true) if note_file.nil?
|
663
|
-
|
665
|
+
exec %(#{editor} "#{note_file}")
|
664
666
|
end
|
665
667
|
|
666
668
|
##
|
@@ -680,6 +682,8 @@ module Howzit
|
|
680
682
|
def edit_template_file(file)
|
681
683
|
editor = Howzit.options.fetch(:editor, ENV['EDITOR'])
|
682
684
|
|
685
|
+
editor = Howzit.config.update_editor if editor.nil?
|
686
|
+
|
683
687
|
raise 'No editor defined' if editor.nil?
|
684
688
|
|
685
689
|
raise "Invalid editor (#{editor})" unless Util.valid_command?(editor)
|
@@ -780,7 +784,7 @@ module Howzit
|
|
780
784
|
when :first
|
781
785
|
topic_matches.push(matches[0])
|
782
786
|
when :best
|
783
|
-
topic_matches.push(matches.
|
787
|
+
topic_matches.push(matches.sort_by { |a| [a.title.comp_distance(s), a.title.length] })
|
784
788
|
when :all
|
785
789
|
topic_matches.concat(matches)
|
786
790
|
else
|
data/lib/howzit/config.rb
CHANGED
@@ -127,6 +127,31 @@ module Howzit
|
|
127
127
|
edit_config
|
128
128
|
end
|
129
129
|
|
130
|
+
## Update editor config
|
131
|
+
def update_editor
|
132
|
+
puts 'No $EDITOR defined, no value in config'
|
133
|
+
editor = Prompt.read_editor
|
134
|
+
if editor.nil?
|
135
|
+
'Cancelled, no editor stored.'
|
136
|
+
Process.exit 1
|
137
|
+
end
|
138
|
+
update_config_option({ config_editor: editor, editor: editor })
|
139
|
+
puts "Default editor set to #{editor}, modify in config file"
|
140
|
+
editor
|
141
|
+
end
|
142
|
+
|
143
|
+
##
|
144
|
+
## Update a config option and resave config file
|
145
|
+
##
|
146
|
+
## @param options [Hash] key value pairs
|
147
|
+
##
|
148
|
+
def update_config_option(options)
|
149
|
+
options.each do |key, value|
|
150
|
+
Howzit.options[key] = value
|
151
|
+
end
|
152
|
+
write_config(Howzit.options)
|
153
|
+
end
|
154
|
+
|
130
155
|
private
|
131
156
|
|
132
157
|
##
|
@@ -263,13 +288,15 @@ module Howzit
|
|
263
288
|
def edit_config
|
264
289
|
editor = Howzit.options.fetch(:config_editor, ENV['EDITOR'])
|
265
290
|
|
291
|
+
editor = update_editor if editor.nil?
|
292
|
+
|
266
293
|
raise 'No config_editor defined' if editor.nil?
|
267
294
|
|
268
295
|
# raise "Invalid editor (#{editor})" unless Util.valid_command?(editor)
|
269
296
|
|
270
297
|
load_config
|
271
298
|
if Util.valid_command?(editor.split(/ /).first)
|
272
|
-
|
299
|
+
exec %(#{editor} "#{config_file}")
|
273
300
|
else
|
274
301
|
`open -a "#{editor}" "#{config_file}"`
|
275
302
|
end
|
data/lib/howzit/prompt.rb
CHANGED
@@ -159,6 +159,22 @@ module Howzit
|
|
159
159
|
system('stty', @stty_save)
|
160
160
|
end
|
161
161
|
|
162
|
+
##
|
163
|
+
## Request editor
|
164
|
+
##
|
165
|
+
def read_editor(default = nil)
|
166
|
+
@stty_save = `stty -g`.chomp
|
167
|
+
|
168
|
+
default ||= 'vim'
|
169
|
+
prompt = "Define a default editor command (default #{default}): "
|
170
|
+
res = Readline.readline(prompt, true).squeeze(' ').strip
|
171
|
+
res = default if res.empty?
|
172
|
+
|
173
|
+
Util.valid_command?(res) ? res : default
|
174
|
+
ensure
|
175
|
+
system('stty', @stty_save)
|
176
|
+
end
|
177
|
+
|
162
178
|
##
|
163
179
|
## Convert a response to an Integer
|
164
180
|
##
|
data/lib/howzit/stringutils.rb
CHANGED
@@ -3,6 +3,86 @@
|
|
3
3
|
module Howzit
|
4
4
|
# String Extensions
|
5
5
|
module StringUtils
|
6
|
+
## Compare strings and return a distance
|
7
|
+
##
|
8
|
+
## @param other [String] The string to compare
|
9
|
+
## @param term [String] The search term
|
10
|
+
##
|
11
|
+
## @return [Float] distance
|
12
|
+
def comp_distance(term)
|
13
|
+
chars = term.split(//)
|
14
|
+
contains_count(chars) + distance(chars)
|
15
|
+
end
|
16
|
+
|
17
|
+
##
|
18
|
+
## Number of matching characters the string contains
|
19
|
+
##
|
20
|
+
## @param chars [String|Array] The characters
|
21
|
+
##
|
22
|
+
def contains_count(chars)
|
23
|
+
chars = chars.split(//) if chars.is_a?(String)
|
24
|
+
count = 0
|
25
|
+
chars.each { |char| count += 1 if self =~ /#{char}/i }
|
26
|
+
count
|
27
|
+
end
|
28
|
+
|
29
|
+
##
|
30
|
+
## Determine if characters are in order
|
31
|
+
##
|
32
|
+
## @param chars [String|Array] The characters
|
33
|
+
##
|
34
|
+
## @return [Boolean] characters are in order
|
35
|
+
##
|
36
|
+
def in_order(chars)
|
37
|
+
chars = chars.split(//) if chars.is_a?(String)
|
38
|
+
position = 0
|
39
|
+
in_order = 0
|
40
|
+
chars.each do |char|
|
41
|
+
new_pos = self[position..] =~ /#{char}/i
|
42
|
+
if new_pos
|
43
|
+
position += new_pos
|
44
|
+
in_order += 1
|
45
|
+
end
|
46
|
+
end
|
47
|
+
in_order
|
48
|
+
end
|
49
|
+
|
50
|
+
##
|
51
|
+
## Determine if a series of characters are all within a given distance of
|
52
|
+
## each other in the String
|
53
|
+
##
|
54
|
+
## @param chars [String|Array] The characters
|
55
|
+
## @param distance [Number] The distance
|
56
|
+
##
|
57
|
+
## @return [Boolean] true if within distance
|
58
|
+
##
|
59
|
+
def in_distance?(chars, distance)
|
60
|
+
chars = chars.split(//) if chars.is_a?(String)
|
61
|
+
rx = Regexp.new(chars.join(".{,#{distance}}"), 'i')
|
62
|
+
self =~ rx ? true : false
|
63
|
+
end
|
64
|
+
|
65
|
+
##
|
66
|
+
## Determine the minimum distance between characters that they all still
|
67
|
+
## fall within
|
68
|
+
##
|
69
|
+
## @param chars [Array] The characters
|
70
|
+
##
|
71
|
+
## @return [Number] distance
|
72
|
+
##
|
73
|
+
def distance(chars)
|
74
|
+
distance = 0
|
75
|
+
max = self.length - chars.length
|
76
|
+
return max unless in_order(chars) == chars.length
|
77
|
+
|
78
|
+
while distance < max
|
79
|
+
return distance if in_distance?(chars, distance)
|
80
|
+
|
81
|
+
distance += 1
|
82
|
+
end
|
83
|
+
distance
|
84
|
+
end
|
85
|
+
|
6
86
|
##
|
7
87
|
## Test if the filename matches the conditions to be a build note
|
8
88
|
##
|
data/lib/howzit/version.rb
CHANGED
data/lib/howzit.rb
CHANGED
data/scripts/runtests.sh
CHANGED
data/spec/buildnote_spec.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
5
|
describe Howzit::BuildNote do
|
6
|
-
subject(:how) {
|
6
|
+
subject(:how) { Howzit.buildnote('builda.md') }
|
7
7
|
|
8
8
|
describe ".note_file" do
|
9
9
|
it "locates a build note file" do
|
@@ -27,43 +27,55 @@ describe Howzit::BuildNote do
|
|
27
27
|
expect(matches.count).to eq 1
|
28
28
|
expect(matches[0].title).to eq 'Topic Tropic'
|
29
29
|
end
|
30
|
+
|
30
31
|
it "fuzzy matches" do
|
31
32
|
Howzit.options[:matching] = 'fuzzy'
|
32
33
|
matches = how.find_topic('trpc')
|
33
34
|
expect(matches.count).to eq 1
|
34
35
|
expect(matches[0].title).to eq 'Topic Tropic'
|
35
36
|
end
|
37
|
+
|
36
38
|
it "succeeds with partial match" do
|
37
39
|
Howzit.options[:matching] = 'partial'
|
38
40
|
matches = how.find_topic('trop')
|
39
41
|
expect(matches.count).to eq 1
|
40
42
|
expect(matches[0].title).to eq 'Topic Tropic'
|
41
43
|
end
|
44
|
+
|
42
45
|
it "succeeds with beginswith match" do
|
43
46
|
Howzit.options[:matching] = 'beginswith'
|
44
47
|
matches = how.find_topic('topic')
|
45
48
|
expect(matches.count).to eq 3
|
46
49
|
expect(matches[0].title).to eq 'Topic Balogna'
|
47
50
|
end
|
51
|
+
|
48
52
|
it "succeeds with exact match" do
|
49
53
|
Howzit.options[:matching] = 'exact'
|
50
54
|
matches = how.find_topic('topic tropic')
|
51
55
|
expect(matches.count).to eq 1
|
52
56
|
expect(matches[0].title).to eq 'Topic Tropic'
|
53
57
|
end
|
58
|
+
|
54
59
|
it "fails with incomplete exact match" do
|
55
60
|
Howzit.options[:matching] = 'exact'
|
56
61
|
matches = how.find_topic('topic trop')
|
57
62
|
expect(matches.count).to eq 0
|
58
63
|
end
|
64
|
+
|
65
|
+
it "Handles multiple matches with best match" do
|
66
|
+
Howzit.options[:matching] = 'fuzzy'
|
67
|
+
Howzit.options[:multiple_matches] = :best
|
68
|
+
matches = how.find_topic('banana')
|
69
|
+
expect(matches.first.title).to match(/banana/i)
|
70
|
+
end
|
59
71
|
end
|
60
72
|
|
61
73
|
describe ".topics" do
|
62
74
|
it "contains 4 topics" do
|
63
|
-
expect(how.list_topics.count).to eq
|
75
|
+
expect(how.list_topics.count).to eq 4
|
64
76
|
end
|
65
77
|
it "outputs a newline-separated string for completion" do
|
66
|
-
expect(how.list_completions.scan(/\n/).count).to eq
|
78
|
+
expect(how.list_completions.scan(/\n/).count).to eq 3
|
67
79
|
end
|
68
80
|
end
|
69
81
|
end
|
data/spec/cli_spec.rb
CHANGED
@@ -15,7 +15,7 @@ describe 'CLI' do
|
|
15
15
|
execute_script('bin/howzit', use_bundler: true, args: %w[-L])
|
16
16
|
expect(last_execution).to be_successful
|
17
17
|
expect(last_execution.stdout).to match(/Topic Balogna/)
|
18
|
-
expect(last_execution.stdout.split(/\n/).count).to eq
|
18
|
+
expect(last_execution.stdout.split(/\n/).count).to eq 4
|
19
19
|
end
|
20
20
|
|
21
21
|
it 'lists available tasks' do
|
data/spec/spec_helper.rb
CHANGED
@@ -63,8 +63,13 @@ def save_buildnote
|
|
63
63
|
|
64
64
|
Bermuda, Bahama, something something wanna.
|
65
65
|
@copy(Balogna) Just some balogna
|
66
|
+
|
67
|
+
## Happy Bgagngagnga
|
68
|
+
|
69
|
+
This one is just to throw things off
|
66
70
|
EONOTE
|
67
71
|
File.open('builda.md', 'w') { |f| f.puts note }
|
72
|
+
# puts "Saved to builda.md: #{File.exist?('builda.md')}"
|
68
73
|
end
|
69
74
|
|
70
75
|
def delete_buildnote
|
data/spec/topic_spec.rb
CHANGED
@@ -21,7 +21,10 @@ describe Howzit::Topic do
|
|
21
21
|
end
|
22
22
|
|
23
23
|
describe Howzit::Topic do
|
24
|
-
subject(:topic) {
|
24
|
+
subject(:topic) {
|
25
|
+
bn = Howzit.buildnote
|
26
|
+
bn.find_topic('Topic Balogna')[0]
|
27
|
+
}
|
25
28
|
|
26
29
|
describe '.title' do
|
27
30
|
it 'has the correct title' do
|
data/src/_README.md
CHANGED
@@ -2,12 +2,12 @@
|
|
2
2
|
# Howzit
|
3
3
|
|
4
4
|
[](https://rubygems.org/gems/howzit)
|
5
|
-
[](https://travis-ci.org/makenew/ruby-gem)
|
6
5
|
[](./LICENSE.txt)
|
7
|
-
|
6
|
+
|
8
7
|
A command-line reference tool for tracking project build systems
|
9
8
|
|
10
9
|
Howzit is a tool that allows you to keep Markdown-formatted notes about a project's tools and procedures. It functions as an easy lookup for notes about a particular task, as well as a task runner to automatically execute appropriate commands.
|
10
|
+
<!--END GITHUB-->
|
11
11
|
|
12
12
|
## Features
|
13
13
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: howzit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.15
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brett Terpstra
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-08-
|
11
|
+
date: 2024-08-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -294,6 +294,7 @@ files:
|
|
294
294
|
- ".github/FUNDING.yml"
|
295
295
|
- ".gitignore"
|
296
296
|
- ".howzit.taskpaper.bak"
|
297
|
+
- ".irbrc"
|
297
298
|
- ".rspec"
|
298
299
|
- ".rubocop.yml"
|
299
300
|
- ".travis.yml"
|
@@ -303,12 +304,14 @@ files:
|
|
303
304
|
- Guardfile
|
304
305
|
- LICENSE.txt
|
305
306
|
- README.md
|
307
|
+
- README.rdoc
|
306
308
|
- Rakefile
|
307
309
|
- bin/howzit
|
308
310
|
- docker/Dockerfile
|
309
311
|
- docker/Dockerfile-2.6
|
310
312
|
- docker/Dockerfile-2.7
|
311
313
|
- docker/Dockerfile-3.0
|
314
|
+
- docker/Dockerfile-3.2
|
312
315
|
- docker/bash_profile
|
313
316
|
- docker/inputrc
|
314
317
|
- fish/completions/bld.fish
|