ruby-shell 0.7 → 0.9

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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -0
  3. data/bin/rsh +51 -26
  4. metadata +4 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 800a622da17daf070678be93473db6ebebbc8a2387230d1344941136914b43f5
4
- data.tar.gz: 3eb5c0b1067ed677d7215ac83e6d5ee2dc20075487bb3a090feb2614b5ab1220
3
+ metadata.gz: 2eb807ee53179bcbc57da83b9bdbf7d46d524ad01d384c450df00c0036e636f1
4
+ data.tar.gz: '0595692866bfd1acf9afda02e157232d7e86701063cf7e5deff2654fe9a1c0d0'
5
5
  SHA512:
6
- metadata.gz: f6a32929246f8af6064bec27ab4428c4bb82d850eb893d81ae00fe127390280b43e942cfb3d5e084d1e3bd9137f587d5c642b9a92df018aafa37f8d83805c063
7
- data.tar.gz: 4a8099fd7aa338d1f80845165b10cf7f225bf674951d3439feb719a6c7e2ccb520a45266e151357c3214f73b74951c8e6cc3fdfeff468ba32ed14b3ba16479eb
6
+ metadata.gz: 7e9349dee0b04e6f9e0d91afcb4f60d90111249b80d3820b75a4efa16fdcea26e702ba64c895f84c0e903ec018748f8a9258a369015097e9e55f81a9ee1d7d40
7
+ data.tar.gz: d0ba07abb7b5490609691cafa88fc4c4299823ae91990daab7d5616c69535b2a9e69269141bf93e45721369eaaa93defd496b94101641d2c143b4631134af02f
data/README.md CHANGED
@@ -19,6 +19,9 @@ Or simply `gem install ruby-shell`.
19
19
  * Syntax highlighting, matching nicks, system commands and valid dirs/files
20
20
  * Tab completions for nicks, system commands, command switches and dirs/files
21
21
  * Tab completion presents matches in a list to pick from
22
+ * When you start to write a command, rsh will suggest the first match in the
23
+ history and present that in "toned down" letters - press the arrow right key
24
+ to accept the suggestion.
22
25
  * History with simple editing
23
26
  * Config file (`.rshrc`) updates on exit
24
27
  * Set of simple rsh specific commands like `nick`, `nick?`, `history` and `rmhistory`
data/bin/rsh CHANGED
@@ -2,11 +2,11 @@
2
2
  # encoding: utf-8
3
3
  #
4
4
  # SCRIPT INFO
5
- # Name: RTFM - Ruby Terminal File Manager
5
+ # Name: rsh - Ruby SHell
6
6
  # Language: Pure Ruby, best viewed in VIM
7
7
  # Author: Geir Isene <g@isene.com>
8
8
  # Web_site: http://isene.com/
9
- # Github: https://github.com/isene/RTFM
9
+ # Github: https://github.com/isene/rsh
10
10
  # License: I release all copyright claims. This code is in the public domain.
11
11
  # Permission is granted to use, copy modify, distribute, and sell
12
12
  # this software for any purpose. I make no guarantee about the
@@ -14,7 +14,7 @@
14
14
  # for any damages resulting from its use. Further, I am under no
15
15
  # obligation to maintain or extend this software. It is provided
16
16
  # on an 'as is' basis without any expressed or implied warranty.
17
- @version = "0.6"
17
+ @version = "0.9"
18
18
 
19
19
  # MODULES, CLASSES AND EXTENSIONS
20
20
  class String # Add coloring to strings (with escaping for Readline)
@@ -177,9 +177,10 @@ def getchr # Process key presses
177
177
  return chr
178
178
  end
179
179
  def getstr # A custom Readline-like function
180
- @stk = 0
180
+ @stk = 0
181
181
  @pos = 0
182
- chr = ""
182
+ right = false
183
+ chr = ""
183
184
  @history.insert(0, "")
184
185
  @history_copy = @history.map(&:clone)
185
186
  while chr != "ENTER" # Keep going with readline until user presses ENTER
@@ -188,6 +189,16 @@ def getstr # A custom Readline-like function
188
189
  print @prompt
189
190
  row, @pos0 = @c.pos
190
191
  print cmd_check(text)
192
+ begin
193
+ cmpl = @history[1..].find {|e| e =~ /^#{Regexp.escape(text)}/}
194
+ if text.length > 2 and cmpl
195
+ print cmpl[text.length..].to_s.c(@c_stamp)
196
+ right = true
197
+ else
198
+ right = false
199
+ end
200
+ rescue
201
+ end
191
202
  @c.col(@pos0 + @pos)
192
203
  chr = getchr
193
204
  return "\n" if chr == "C-G" # Ctrl-G escapes the reasdline
@@ -212,6 +223,10 @@ def getstr # A custom Readline-like function
212
223
  @pos = @history_copy[@stk].length
213
224
  end
214
225
  when 'RIGHT' # Move right on the readline
226
+ if right
227
+ @history_copy[@stk] = cmpl
228
+ @pos = @history_copy[@stk].length
229
+ end
215
230
  @pos += 1 unless @pos >= @history_copy[@stk].length
216
231
  when 'LEFT' # Move left on the readline
217
232
  @pos -= 1 unless @pos <= 0
@@ -321,6 +336,7 @@ def tab_switch(str) # TAB completion for command switches (TAB after "-")
321
336
  end
322
337
  def tab_hist(str)
323
338
  sel = @history.select {|el| el =~ /#{str}/}
339
+ sel.delete("")
324
340
  hist = tabselect(sel, true)
325
341
  @tabsearch = hist if hist
326
342
  @pos = @tabstr.length + @tabsearch.length if hist
@@ -357,7 +373,7 @@ def tabselect(ary, hist=false) # Let user select from the incoming array
357
373
  case chr
358
374
  when 'C-G', 'C-C'
359
375
  @c.clear_screen_down
360
- return ""
376
+ return @tabsearch
361
377
  when 'DOWN'
362
378
  i += 1 unless i > ary.length - 2
363
379
  when 'UP'
@@ -365,7 +381,11 @@ def tabselect(ary, hist=false) # Let user select from the incoming array
365
381
  when 'TAB'
366
382
  chr = "ENTER"
367
383
  when 'BACK'
368
- @tabsearch.chop! unless @tabsearch == ''
384
+ if @tabsearch == ''
385
+ @c.clear_screen_down
386
+ return ""
387
+ end
388
+ @tabsearch.chop!
369
389
  hist ? tab_hist(@tabsearch) : tab_all(@tabsearch)
370
390
  return @tabsearch
371
391
  when /^[[:print:]]$/
@@ -423,7 +443,7 @@ def rshrc # Write updates to .rshrc
423
443
  conf.sub!(/^@history.*\n/, "")
424
444
  conf += "@history = #{@history.last(@histsize)}\n"
425
445
  File.write(Dir.home+'/.rshrc', conf)
426
- puts "\n .rshrc updated"
446
+ puts ".rshrc updated"
427
447
  end
428
448
 
429
449
  # RSH FUNCTIONS
@@ -480,24 +500,29 @@ end
480
500
 
481
501
  # MAIN PART
482
502
  loop do
483
- @user = Etc.getpwuid(Process.euid).name # For use in @prompt
484
- @node = Etc.uname[:nodename] # For use in @prompt
485
- h = @history; load(Dir.home+'/.rshrc') if File.exist?(Dir.home+'/.rshrc'); @history = h # reload prompt but not history
486
- @prompt.gsub!(/#{Dir.home}/, '~') # Simplify path in prompt
487
- @cmd = getstr # Main work is here
488
- hist_clean # Clean up the history
489
- @cmd = "ls" if @cmd == "" # Default to ls when no command is given
490
- print "\n"; @c.clear_screen_down
491
- if @cmd == "r" # Integration with rtfm (https://github.com/isene/RTFM)
492
- File.write("/tmp/.rshpwd", Dir.pwd)
493
- system("rtfm /tmp/.rshpwd")
494
- Dir.chdir(File.read("/tmp/.rshpwd"))
495
- next
496
- end
497
- @cmd = "echo \"#{@cmd[1...]},prx,off\" | xrpn" if @cmd =~ /^\=/ # Integration with xrpn (https://github.com/isene/xrpn)
498
503
  begin
504
+ @user = Etc.getpwuid(Process.euid).name # For use in @prompt
505
+ @node = Etc.uname[:nodename] # For use in @prompt
506
+ h = @history; load(Dir.home+'/.rshrc') if File.exist?(Dir.home+'/.rshrc'); @history = h # reload prompt but not history
507
+ @prompt.gsub!(/#{Dir.home}/, '~') # Simplify path in prompt
508
+ @cmd = getstr # Main work is here
509
+ hist_clean # Clean up the history
510
+ @cmd = "ls" if @cmd == "" # Default to ls when no command is given
511
+ print "\n"; @c.clear_screen_down
512
+ if @cmd == "r" # Integration with rtfm (https://github.com/isene/RTFM)
513
+ File.write("/tmp/.rshpwd", Dir.pwd)
514
+ system("rtfm /tmp/.rshpwd")
515
+ Dir.chdir(File.read("/tmp/.rshpwd"))
516
+ next
517
+ end
518
+ @cmd = "echo \"#{@cmd[1...]},prx,off\" | xrpn" if @cmd =~ /^\=/ # Integration with xrpn (https://github.com/isene/xrpn)
499
519
  if @cmd.match(/^\s*:/) # Ruby commands are prefixed with ":"
500
- eval(@cmd[1..-1])
520
+ begin
521
+ eval(@cmd[1..-1])
522
+ rescue StandardError => err
523
+ #rescue Exception => err
524
+ puts "\n#{err}"
525
+ end
501
526
  else # Execute command
502
527
  @cmd.sub!(/^cd (\S*).*/, '\1')
503
528
  @cmd = Dir.home if @cmd == "~"
@@ -510,7 +535,7 @@ loop do
510
535
  ga = @gnick.transform_keys {|k| /\b#{Regexp.escape k}\b/}
511
536
  @cmd = @cmd.gsub(Regexp.union(ga.keys), @gnick)
512
537
  puts "#{Time.now.strftime("%H:%M:%S")}: #{@cmd}".c(@c_stamp)
513
- if @cmd == "fzf" # fzf integration (https://github.com/junegunn/fzf)
538
+ if @cmd == "f" # fzf integration (https://github.com/junegunn/fzf)
514
539
  res = `#{@cmd}`.chomp
515
540
  Dir.chdir(File.dirname(res))
516
541
  else
@@ -522,7 +547,7 @@ loop do
522
547
  end
523
548
  end
524
549
  rescue StandardError => err # Throw error nicely
525
- puts "#{err}"
550
+ puts "\n#{err}"
526
551
  end
527
552
  end
528
553
 
metadata CHANGED
@@ -1,18 +1,19 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-shell
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.7'
4
+ version: '0.9'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Geir Isene
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-05-30 00:00:00.000000000 Z
11
+ date: 2023-06-02 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: 'A shell written in Ruby with extensive tab completions, aliases/nicks,
14
14
  history, syntax highlighting, theming and more. In continual development. New in
15
- 0.7: Added XRPN integration :).'
15
+ 0.9: Added the feature to suggdest the first match in history when you start writing
16
+ a command - press the right arrow key to accept.'
16
17
  email: g@isene.com
17
18
  executables:
18
19
  - rsh