zashoku 1.2.2 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5c9d68807a73e91e73c87ad6af21cc72de3ae449
4
- data.tar.gz: e7e99cb91eba49934f4fb115a6f4bfaf0140ff74
3
+ metadata.gz: d711517f1114c2ab894274ee55ec0f1b77b5f14e
4
+ data.tar.gz: 425fe6cd0aa648c76dadb70beb16f9ade10109e2
5
5
  SHA512:
6
- metadata.gz: 8383c221bd72be387f28c29c94105bc0d82a2b9926162bbe24bb9bb2f50e3104e7493216f75669e3fd9220a23d3c275ef91aa6b835ab7591c75bfe1832aa02e0
7
- data.tar.gz: d47b1e76fe7e6cb8aea0e83fad13668cb5df52eb9f436235e2d80460d1cd1b7736b67f671bedbaef97dd9118404c320ba47aa76da243c27e2e0184b1477243b0
6
+ metadata.gz: 2903f26cff66c1dbc0515f66a89f5a1e35ec09af22adab661e754c1660feb083ad5f97112ac5d9bfbfb798898cb28b9641a69bd49ca0333d6da9efc2d967ac50
7
+ data.tar.gz: e9ff48aa435939b22b27ae07c7472a4c8cf8109d97984fb8b8f72eadea52ed0acb53a7b8a5010aae1bf9756e2d1d5459b6defd5b7ec6d5ba2c179392d985ce05
@@ -10,3 +10,6 @@ keymaps:
10
10
  258: current_view move_cursor down
11
11
  " ": current_view expand $selected_group
12
12
  q: quit
13
+ ":": enter_command
14
+ format:
15
+ statusline: " "
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'yaml'
4
4
  require 'fileutils'
5
+ require 'pp'
5
6
 
6
7
  module Zashoku
7
8
  class Config < Controller
@@ -16,6 +17,7 @@ module Zashoku
16
17
 
17
18
  def reload
18
19
  @conf = merge!(default_conf, user_conf)
20
+ save
19
21
  end
20
22
 
21
23
  def merge!(this, that)
@@ -43,23 +45,27 @@ module Zashoku
43
45
  end
44
46
 
45
47
  def pref_model(title, value, trail)
46
- Model.new(title: title, value: value, trail: trail)
48
+ Item.new('title' => title, 'value' => value, 'trail' => trail)
47
49
  end
48
50
 
49
- def items
50
- @conf.map do |title, pref|
51
- next if IGNORE.key? title
51
+ def items(c = @conf, pre = '', path = [])
52
+ return pref_model(pre, c, path) unless c.respond_to?(:map)
53
+ c.map do |title, pref|
54
+ # next if IGNORE.key? title
55
+ t = "#{pre}_#{title}"
56
+ pth = path + [title]
52
57
  case pref
53
58
  when Hash
54
59
  pref.map do |subt, subpref|
55
- pref_model("#{title}_#{subt}", subpref, [title, subt])
60
+ items(subpref, "#{pre}_#{title}_#{subt}", [title, subt])
61
+ #pref_model("#{title}_#{subt}", subpref, [title, subt])
56
62
  end
57
63
  when Array
58
- pref_model(title, pref.join(':'), [title])
64
+ pref_model(t, pref.join(':'), pth)
59
65
  else
60
- pref_model(title, pref, [title])
66
+ pref_model(t, pref, pth)
61
67
  end
62
- end.flatten.compact
68
+ end.flatten #.compact
63
69
  end
64
70
 
65
71
  def parse_dir(path)
@@ -13,7 +13,10 @@ module Zashoku
13
13
  end
14
14
 
15
15
  def base_conf
16
- Util.get_yaml(File.join(Zashoku::Root, 'config/daemon.yml'))
16
+ merge!(
17
+ Util.get_yaml(File.join(Zashoku::Root, 'config/daemon.yml')),
18
+ Util.get_yaml(File.join(Zashoku::AppRoot, 'config/daemon.yml')),
19
+ )
17
20
  end
18
21
  end
19
22
  end
@@ -13,7 +13,10 @@ module Zashoku
13
13
  end
14
14
 
15
15
  def base_conf
16
- Util.get_yaml(File.join(Zashoku::Root, 'config/view.yml'))
16
+ merge!(
17
+ Util.get_yaml(File.join(Zashoku::Root, 'config/view.yml')),
18
+ Util.get_yaml(File.join(Zashoku::AppRoot, 'config/view.yml')),
19
+ )
17
20
  end
18
21
  end
19
22
  end
@@ -16,8 +16,8 @@ module Zashoku
16
16
  end
17
17
 
18
18
  def method_missing(m, *args, &block)
19
- p @attributes[m.to_s]
20
19
  return @attributes[m.to_s] if @attributes.key?(m.to_s)
20
+ #raise "error #{m} not found"
21
21
  super
22
22
  end
23
23
  end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zashoku
4
+ module Conf
5
+ extend Zashoku::Module
6
+
7
+ Version = [1, 0, 0].freeze
8
+ Root = File.expand_path('../', __dir__)
9
+
10
+ autoload :ConfigView, File.join(Root, 'lib/conf/config_view')
11
+
12
+ def self.view
13
+ ConfigView.new
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zashoku
4
+ module Conf
5
+ class ConfigView < Zashoku::View
6
+ def refresh_attributes
7
+ @attributes = {
8
+ 't' => Zashoku.conf.get(%w[title conf]),
9
+ }
10
+ end
11
+
12
+ def refresh_items
13
+ @items = Zashoku.conf.items
14
+ end
15
+
16
+ def get_format
17
+ Zashoku.conf.get(%w[format conf])
18
+ end
19
+ end
20
+ end
21
+ end
@@ -52,7 +52,7 @@ module Zashoku
52
52
  def lost_connection
53
53
  @alive = false
54
54
  Zashoku.logger.debug('lost connection')
55
- Zashoku.alert('no connection')
55
+ Util.alert('no connection')
56
56
  Thread.exit
57
57
  end
58
58
 
@@ -2,49 +2,51 @@
2
2
 
3
3
  require 'optparse'
4
4
 
5
- class Options
6
- def self.parse(args)
7
- options = {
8
- daemon: false,
9
- server: true,
10
- server_command: nil,
11
- generate: false,
12
- template: nil,
13
- generate_name: nil
14
- }
15
-
16
- parser = OptionParser.new do |opts|
17
- opts.banner = 'Usage: zashoku [options]'
18
-
19
- opts.on('-s [COMMAND]', '--server [COMMAND]', 'pass commands to the server') do |cmd|
20
- options[:server] = true
21
- options[:server_command] = cmd || 'start'
5
+ module Zashoku
6
+ class Options
7
+ def self.parse(args)
8
+ options = {
9
+ daemon: false,
10
+ server: true,
11
+ server_command: nil,
12
+ generate: false,
13
+ template: nil,
14
+ generate_name: nil
15
+ }
16
+
17
+ parser = OptionParser.new do |opts|
18
+ opts.banner = 'Usage: zashoku [options]'
19
+
20
+ opts.on('-s [COMMAND]', '--server [COMMAND]', 'pass commands to the server') do |cmd|
21
+ options[:server] = true
22
+ options[:server_command] = cmd || 'start'
23
+ end
24
+
25
+ opts.on('-d', '--daemon', 'daemonize the server') do |d|
26
+ options[:daemonize] = true
27
+ end
28
+
29
+ opts.on('-g TEMPLATE', '--generate TEMPLATE', 'generate a template') do |template|
30
+ options[:template] = template
31
+ options[:generate] = true
32
+ end
33
+
34
+ opts.on_tail('-h', '--help', 'Show this message') do
35
+ puts opts
36
+ exit
37
+ end
38
+
39
+ opts.on_tail('--version', 'Show version') do
40
+ puts Zashoku::Version.join('.')
41
+ exit
42
+ end
22
43
  end
23
44
 
24
- opts.on('-d', '--daemon', 'daemonize the server') do |d|
25
- options[:daemonize] = true
26
- end
27
-
28
- opts.on('-g TEMPLATE', '--generate TEMPLATE', 'generate a template') do |template|
29
- options[:template] = template
30
- options[:generate] = true
31
- end
45
+ parser.parse!(args)
32
46
 
33
- opts.on_tail('-h', '--help', 'Show this message') do
34
- puts opts
35
- exit
36
- end
47
+ options[:generate_name] = args.pop if options[:template]
37
48
 
38
- opts.on_tail('--version', 'Show version') do
39
- puts Zashoku::Version.join('.')
40
- exit
41
- end
49
+ options
42
50
  end
43
-
44
- parser.parse!(args)
45
-
46
- options[:generate_name] = args.pop if options[:template]
47
-
48
- options
49
51
  end
50
52
  end
@@ -13,11 +13,10 @@ module Zashoku
13
13
  include Observable
14
14
 
15
15
  def initialize
16
- Zashoku.logger.debug('hhh')
17
16
  @widgets = Zashoku.modules.keys.zip(Zashoku.modules.map do |_k, m|
18
17
  m.widgets if m.respond_to?(:widgets)
19
18
  end).to_h.compact
20
- Zashoku.logger.debug(@widgets)
19
+ Zashoku.logger.debug("loaded widgets for #{@widgets.keys.join(', ')}")
21
20
  refresh
22
21
  end
23
22
 
@@ -36,15 +35,18 @@ module Zashoku
36
35
  end
37
36
 
38
37
  def refresh
39
- @items = @widgets.map do |_k, m|
40
- m.map { |_j, w| w.item }
41
- end.flatten
38
+ @cl = Zashoku::conf.get(%w[color main])
39
+ @attrs = @widgets.map do |_k, m|
40
+ m.map { |j, w| w.attr }
41
+ end.flatten.reduce(&:merge)
42
42
 
43
- @items_formatted = @items.join(' | ')
43
+ format = Zashoku::conf.get(%w[format statusline])
44
+
45
+ @items_formatted = Zashoku::Formatter.format_line(format, @attrs)
44
46
  end
45
47
 
46
48
  def draw
47
- print "\e[#{Util::Term.rows - 1};1H\e[0m#{@items_formatted}\e[K"
49
+ print "\e[#{Util::Term.rows - 1};1H\e[0m#{@cl}#{@items_formatted}\e[K"
48
50
  end
49
51
  end
50
52
  end
@@ -4,14 +4,14 @@ module Zashoku
4
4
  module Statusline
5
5
  class Widget
6
6
  def initialize
7
- @item = ''
7
+ @attr = {}
8
8
  refresh
9
9
  end
10
10
 
11
11
  def refresh; end
12
12
 
13
- def item
14
- @item
13
+ def attr
14
+ @attr
15
15
  end
16
16
  end
17
17
  end
@@ -0,0 +1,123 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'amatch'
4
+
5
+ module Zashoku
6
+ module Util
7
+ class Readline
8
+ attr_accessor :ac_index, :hy_index, :ac_sorted, :prompt, :x, :y, :history
9
+
10
+ def initialize(prompt = '', ac_tree: {}, history: [])
11
+ @prompt = prompt
12
+ @ac_index = 0
13
+ @history = history
14
+ @hy_index = 0
15
+ @ac_sorted = []
16
+ @tree = ac_tree
17
+ @y = Term.rows
18
+ end
19
+
20
+ def draw(string)
21
+ print "\e[#{y};0H#{prompt}#{string}\e[K\e[#{y};#{@x + 1}H"
22
+ end
23
+
24
+ def read(string = '')
25
+ @x = prompt.length
26
+ Curses.curs_set(1)
27
+ max = Term.cols
28
+
29
+ loop do
30
+ draw(string)
31
+ c = Curses.getch
32
+ @ac_index = 0 unless c == 9
33
+ case c
34
+ when Curses::KEY_LEFT
35
+ @x = [prompt.length, x-1].max
36
+ when Curses::KEY_RIGHT
37
+ @x = [prompt.length + string.length, x+1].min
38
+ when Curses::KEY_UP
39
+ @history.unshift(string) if hy_index == 0
40
+ @hy_index += 1
41
+ if hy_index >= history.length
42
+ @hy_index = history.length - 1
43
+ Curses.beep
44
+ end
45
+ string = history[hy_index]
46
+ @x = string.length + prompt.length
47
+ when Curses::KEY_DOWN
48
+ if hy_index == 1
49
+ @hy_index = 0
50
+ string = @history.shift
51
+ elsif hy_index > 1
52
+ string = history[@hy_index -= 1] || ''
53
+ else
54
+ @hy_index = 0
55
+ Curses.beep
56
+ end
57
+ @x = string.length + prompt.length
58
+ when 10, ?\n, ?\r
59
+ break
60
+ when 127 #backspace
61
+ print "\e[#{y};#{x}H "
62
+ @x -= 1
63
+ break if @x < prompt.length
64
+ rx = @x - prompt.length
65
+ string = string[0...rx] + string[rx..-1]
66
+ string[x - prompt.length] = ''
67
+ when 9 #tab
68
+ if @ac_index == 0
69
+ acl = ac_list(string)
70
+ @ac_sorted = sort_ac_list(acl, string)
71
+ end
72
+ string = @ac_sorted[@ac_index] || ''
73
+ @x = @prompt.length + string.length
74
+ @ac_index += 1
75
+ @ac_index = 0 if @ac_index >= ac_sorted.length
76
+ when /[[:print:]]/
77
+ if (@x < max)
78
+ rx = @x - prompt.length
79
+ string = string[0...rx] + c.chr + string[rx..-1]
80
+ @x += 1
81
+ else
82
+ Curses.beep
83
+ end
84
+ else
85
+ Curses.beep
86
+ end
87
+ @history[@hy_index] = string
88
+ end
89
+
90
+ Curses.curs_set(0)
91
+ print "\e[#{y};0H\e[2K"
92
+
93
+ @hy_index = 0
94
+ @history.unshift(string)
95
+ @history.reject! { |e| e.empty? }
96
+ string
97
+ end
98
+
99
+ def safe_dig(tree, path)
100
+ l = @tree.dig(path.shift)
101
+ return l if l.class != Hash || path.empty?
102
+ safe_dig(tree, path)
103
+ end
104
+
105
+ def ac_list(string)
106
+ path = string.split
107
+ path << '' if string[-1] == ' '
108
+ if path.length > 1
109
+ ac = safe_dig(@tree, path[0...-1])
110
+ return [string] unless ac
111
+ ac.map { |n| (path[0...-1] + [n]).join(' ') }
112
+ else
113
+ @tree.keys
114
+ end
115
+ end
116
+
117
+ def sort_ac_list(list, string)
118
+ m = Amatch::JaroWinkler.new(string)
119
+ list.map { |e| [m.match(e.to_s), e] }.sort.map { |a| a[1] }.reverse
120
+ end
121
+ end
122
+ end
123
+ end
@@ -1,30 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'base64'
4
- require 'readline'
4
+ require_relative 'readline'
5
5
 
6
6
  module Zashoku
7
7
  module Util
8
- def self.readline(prompt = '', default = '')
9
- Term.bold.echo_on
10
- print "\033[" + String(Term.rows) + ';1H'
11
- Term.show_cursor
12
- Readline.completion_append_character = ''
13
- Readline.pre_input_hook = lambda do
14
- Readline.insert_text default.to_s
15
- Readline.redisplay
16
- Readline.pre_input_hook = nil
17
- end
18
- input = Readline.readline(prompt, false)
19
- Term.hide_cursor.nobold.echo_off.clear
20
- input
21
- end
22
-
23
- def self.error_message(message)
24
- # use statusline to show error messages
25
- print "\e[#{Term.rows - 1};1H\e[31m #{message}\e[K"
26
- end
27
-
28
8
  def self.encode_object(d)
29
9
  Base64.strict_encode64(Marshal.dump(d))
30
10
  end
@@ -37,10 +17,18 @@ module Zashoku
37
17
  {}
38
18
  end
39
19
 
40
- def self.get_yaml(file)
41
- YAML.safe_load(File.open(file, 'r', &:read)) || {}
20
+ def self.get_yaml(file, nil_value = {})
21
+ YAML.safe_load(File.open(file, 'r', &:read)) || nil_value
42
22
  rescue Errno::ENOENT
43
- {}
23
+ nil_value
24
+ end
25
+
26
+ def self.put_yaml(file, data)
27
+ File.open(file, 'w') { |f| f.puts YAML.dump(data) }
28
+ end
29
+
30
+ def self.alert(msg)
31
+ print "\e[#{Term.rows};0H\e[31m#{msg}\e[K"
44
32
  end
45
33
  end
46
34
  end
@@ -75,6 +75,7 @@ module Zashoku
75
75
 
76
76
  def refresh
77
77
  @items = refresh_items
78
+ @children = @items.class == Hash
78
79
  refresh_attributes
79
80
  refresh_formats
80
81
  dirty_all_lines
@@ -6,6 +6,7 @@ require 'io/console'
6
6
  require 'logger'
7
7
  require 'observer'
8
8
  require 'thread'
9
+ require 'json'
9
10
 
10
11
  require_relative 'core/controller'
11
12
  require_relative 'core/config/view_config'
@@ -18,6 +19,8 @@ require_relative 'core/item'
18
19
  require_relative 'core/module'
19
20
  require_relative 'core/view'
20
21
 
22
+ require_relative 'core/modules/conf/lib/conf'
23
+
21
24
  $stdout.sync = true
22
25
 
23
26
  module Zashoku
@@ -35,19 +38,19 @@ module Zashoku
35
38
  modules[message[:mod]].send(message[:meth], *message[:args])
36
39
  end
37
40
  end
38
-
39
- def alert(message)
40
- print "\e[#{Util::Term.rows - 2};0H #{message}"
41
- end
42
41
  end
43
42
 
44
43
  # Main class for the zashoku application
45
44
  class Viewer
46
45
  include Util
47
46
 
47
+ HISTORY = File.join(Zashoku::Config::CONF_DIR, 'cmd_history.yml')
48
+
48
49
  COMMANDS = {
49
- 'quit' => :cleanup,
50
- 'enter_command' => :get_user_command
50
+ 'quit' => :cleanup,
51
+ 'enter_command' => :get_user_command,
52
+ 'change_view' => :change_view,
53
+ 'map_key' => :map_key
51
54
  }.freeze
52
55
 
53
56
  def initialize
@@ -60,20 +63,35 @@ module Zashoku
60
63
  Zashoku.conf = ViewConfig.new
61
64
 
62
65
  Zashoku.modules = Zashoku::Module.load(Zashoku::ViewerModules)
66
+ Zashoku.modules.merge!('conf' => Conf)
63
67
  Zashoku.conf.reload
64
68
 
65
69
  # note: start daemon if not running
66
70
  Zashoku.client = Net::Client.new(Zashoku::Port)
67
71
  Zashoku.client.callbacks << method(:handle_event)
68
72
 
73
+ @server_modules = Zashoku.client.command('modules')
74
+
69
75
  @views = Zashoku.modules.keys.zip(Zashoku.modules.map do |_k, m|
70
76
  m.view
71
77
  end).to_h
72
78
  @view = @views.keys.first
73
79
 
80
+ Zashoku.logger.debug('initializing statusline')
74
81
  @statusline = Statusline.new
82
+ Zashoku.logger.debug(@statusline)
75
83
  @statusline.add_observer(self, :draw_statusline)
76
84
 
85
+ @cmdline = Util::Readline.new(
86
+ ':',
87
+ ac_tree:
88
+ @views.map { |k, v| [k, v.methods - Object.methods] }.to_h
89
+ .merge(COMMANDS.map { |k, _v| [k, nil] }.to_h)
90
+ .merge({'conf' => Zashoku.conf.methods - Object.methods })
91
+ .merge(@server_modules.map { |m| ['remote::' + m, nil] }.to_h),
92
+ history: Util.get_yaml(HISTORY, [])
93
+ )
94
+
77
95
  init_screen
78
96
  lay_traps!
79
97
  Thread.abort_on_exception = true
@@ -84,9 +102,19 @@ module Zashoku
84
102
  sleep
85
103
  end
86
104
 
105
+ def change_view(new_view)
106
+ Zashoku.logger.debug("Changing view to #{new_view}")
107
+ @views[@view].delete_observers
108
+ #@views[new_view].change_screen_size(redraw: false)
109
+ #@views[new_view].expand(-1)
110
+ @view = new_view
111
+ init_view(@view)
112
+ end
113
+
87
114
  def init_view(view)
88
- @views[@view].add_observer(self, :draw_view)
89
- @views[@view].refresh
115
+ @views[view].add_observer(self, :draw_view)
116
+ @views[view].refresh
117
+ @views[view].dirty_all_lines
90
118
  draw_view
91
119
  end
92
120
 
@@ -103,6 +131,15 @@ module Zashoku
103
131
  end
104
132
  end
105
133
 
134
+ def cleanup
135
+ Zashoku.client.disconnect
136
+ @key_thread&.exit
137
+ Curses.close_screen
138
+ Util.put_yaml(HISTORY, @cmdline.history)
139
+ Term.show_cursor
140
+ exit
141
+ end
142
+
106
143
  def init_screen
107
144
  Curses.noecho
108
145
  Curses.init_screen
@@ -119,7 +156,13 @@ module Zashoku
119
156
  end
120
157
 
121
158
  def get_user_command
122
- Util.readline
159
+ cmd = @cmdline.read
160
+ return unless cmd
161
+ return builtin_command(*cmd.split) if COMMANDS.key?(cmd.split.first)
162
+
163
+ command(*cmd.split) unless cmd.empty?
164
+ rescue
165
+ Util.alert('Error')
123
166
  end
124
167
 
125
168
  def handle_event(event)
@@ -131,6 +174,15 @@ module Zashoku
131
174
  end
132
175
  end
133
176
 
177
+ def builtin_command(cmd, *args)
178
+ Zashoku.logger.debug("executing builtin #{cmd}(#{args})")
179
+ send(COMMANDS[cmd], *args)
180
+ end
181
+
182
+ def map_key(key, mod, command, *args)
183
+ Zashoku.conf.set(['keymaps', mod, key], "#{command} #{args.join(' ')}")
184
+ end
185
+
134
186
  def scan_keyboard!
135
187
  loop do
136
188
  key = Curses.getch
@@ -144,7 +196,10 @@ module Zashoku
144
196
  ''
145
197
  end
146
198
 
147
- return send(COMMANDS[cmd]) if COMMANDS.key?(cmd)
199
+ if COMMANDS.key?(cmd.split.first)
200
+ builtin_command(*cmd.split)
201
+ next
202
+ end
148
203
 
149
204
  mod, meth, *args = cmd.split
150
205
  mod = mod == 'current_view' ? @view : mod
@@ -163,24 +218,6 @@ module Zashoku
163
218
  end
164
219
  end
165
220
 
166
- def cleanup
167
- Zashoku.client.disconnect
168
- @key_thread&.exit
169
- Curses.close_screen
170
- Term.show_cursor
171
- exit
172
- end
173
-
174
- def change_view(new_view:)
175
- @view.delete_observers
176
- @view.pause
177
- new_view.add_observer(self, :draw_view)
178
- new_view.change_screen_size(redraw: false)
179
- new_view.expand(-1)
180
- new_view.unpause
181
- @view = view
182
- end
183
-
184
221
  def draw_view
185
222
  @views[@view].draw
186
223
  end
@@ -3,7 +3,7 @@
3
3
  require_relative 'core/options'
4
4
 
5
5
  module Zashoku
6
- Version = [1, 2, 2].freeze
6
+ Version = [1, 3, 0].freeze
7
7
  Root = File.expand_path('../', __dir__)
8
8
 
9
9
  AppRoot = Root unless const_defined?(:AppRoot)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zashoku
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.2
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - annacrombie
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-15 00:00:00.000000000 Z
11
+ date: 2017-10-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: curses
@@ -107,12 +107,15 @@ files:
107
107
  - "./lib/core/formatter.rb"
108
108
  - "./lib/core/item.rb"
109
109
  - "./lib/core/module.rb"
110
+ - "./lib/core/modules/conf/lib/conf.rb"
111
+ - "./lib/core/modules/conf/lib/conf/config_view.rb"
110
112
  - "./lib/core/net/client.rb"
111
113
  - "./lib/core/net/server.rb"
112
114
  - "./lib/core/options.rb"
113
115
  - "./lib/core/statusline/statusline.rb"
114
116
  - "./lib/core/statusline/widget.rb"
115
117
  - "./lib/core/util/folder_listen.rb"
118
+ - "./lib/core/util/readline.rb"
116
119
  - "./lib/core/util/term.rb"
117
120
  - "./lib/core/util/util.rb"
118
121
  - "./lib/core/view.rb"