ruby-shell 1.0.1 → 1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -1
  3. data/bin/rsh +43 -33
  4. metadata +7 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e671511dc4e419615c55552486a75258b34b7cdc422e6ce224334f83eaaccf7f
4
- data.tar.gz: 48200a99d192e11175b626302d5cc35fcfd688567f35ee420fd452d74799c790
3
+ metadata.gz: 6d3646331db7eac6ea26f07f0878354ca9b3ed9f46ebda4e2bd177d252ce67d3
4
+ data.tar.gz: deffdb053c7284ed35110c482a30adfd0ec732ce5eb0d2ea4188638cf92d1b0e
5
5
  SHA512:
6
- metadata.gz: de5c96b7a2163376ffb90954bb0ab8e5d42761d77357118f89614bd92e628d91121e38e6af6819fd13512d79c8e77478d73adec090cd362339582a2802a560fa
7
- data.tar.gz: 5f506016a3c0ffd25c026e21111dbdfbde524f9260552f7d007aa8b0f648ea6f87c19701df2de3d07cd3f5f07b5dfe13420f2b2c292ccc24cad02a6105449646
6
+ metadata.gz: 6dec4e805bf977dd4de28784a1e1bc4c71c7df0c865c73e479e54d053de0743b9592c4c1d331e321da23d1c1e4136709fd7fb269acb372dac50d4aa3f1196737
7
+ data.tar.gz: d50d00d2f0f9af08c1516941a808087936d512f43971eb2374b476c295137048c95bb0890960589dfdc35b9b402147d0c9d162ee1b1d75b0e6ae8b2bc541c7ed
data/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
  The Ruby SHell
5
5
 
6
6
  # Why?
7
- Ruby is my goto language (pun kinda intended). I want full control over my tools and I like challenges that I can tinker with late at night. This is an incomplete project continually being improved. Feel free to add suggestions or code.
7
+ <img src="img/rsh-logo.jpg" align="left" width="150" height="150">Ruby is my goto language (pun kinda intended). I want full control over my tools and I like challenges that I can tinker with late at night. This is an incomplete project continually being improved. Feel free to add suggestions or code.
8
8
 
9
9
  # Design principles
10
10
  Simple. One file. Minimum external requirements.
@@ -29,6 +29,7 @@ Or simply `gem install ruby-shell`.
29
29
  * Set of simple rsh specific commands like nick, nick?, history and rmhistory
30
30
  * rsh specific commands and full set of Ruby commands available via :<command>
31
31
  * All colors are themeable in .rshrc (see github link for possibilities)
32
+ * Copy current command line to primary selection (paste w/middle button) with `Ctrl-y`
32
33
 
33
34
  Special functions/integrations:
34
35
  * Use `r` to launch rtfm (https://github.com/isene/RTFM) - if you have it installed
data/bin/rsh CHANGED
@@ -7,25 +7,20 @@
7
7
  # Author: Geir Isene <g@isene.com>
8
8
  # Web_site: http://isene.com/
9
9
  # Github: https://github.com/isene/rsh
10
- # License: I release all copyright claims. This code is in the public domain.
11
- # Permission is granted to use, copy modify, distribute, and sell
12
- # this software for any purpose. I make no guarantee about the
13
- # suitability of this software for any purpose and I am not liable
14
- # for any damages resulting from its use. Further, I am under no
15
- # obligation to maintain or extend this software. It is provided
16
- # on an 'as is' basis without any expressed or implied warranty.
17
- @version = "1.0.1"
10
+ # License: Public domain
11
+ @version = "1.2"
18
12
 
19
13
  # MODULES, CLASSES AND EXTENSIONS
20
14
  class String # Add coloring to strings (with escaping for Readline)
21
- def c(code); color(self, "\001\e[38;5;#{code}m\002"); end
22
- def b; color(self, "\001\e[1m\002"); end
23
- def i; color(self, "\001\e[3m\002"); end
24
- def u; color(self, "\001\e[4m\002"); end
25
- def l; color(self, "\001\e[5m\002"); end
15
+ def c(code); color(self, "\001\e[38;5;#{code}m\002"); end # Color code
16
+ def b; color(self, "\001\e[1m\002"); end # Bold
17
+ def i; color(self, "\001\e[3m\002"); end # Italic
18
+ def u; color(self, "\001\e[4m\002"); end # Underline
19
+ def l; color(self, "\001\e[5m\002"); end # Blink
20
+ def r; color(self, "\001\e[7m\002"); end # Reverse
26
21
  def color(text, color_code) "#{color_code}#{text}\001\e[0m\002" end
27
22
  end
28
- module Cursor # Terminal cursor movement ANSI codes (thanks to https://github.com/piotrmurach/tty-cursor/tree/master)
23
+ module Cursor # Terminal cursor movement ANSI codes (thanks to https://github.com/piotrmurach/tty-cursor)
29
24
  module_function
30
25
  ESC = "\e".freeze
31
26
  CSI = "\e[".freeze
@@ -102,13 +97,13 @@ begin # Requires
102
97
  end
103
98
  begin # Initialization
104
99
  # Theming
105
- @c_prompt = 196 # Color for basic prompt
106
- @c_cmd = 48 # Color for valid command
107
- @c_nick = 51 # Color for matching nick
108
- @c_gnick = 87 # Color for matching gnick
109
- @c_path = 208 # Color for valid path
110
- @c_switch = 148 # Color for switches/options
111
- @c_tabselect = 207 # Color for selected tabcompleted item
100
+ @c_prompt = 10 # Color for basic prompt
101
+ @c_cmd = 2 # Color for valid command
102
+ @c_nick = 6 # Color for matching nick
103
+ @c_gnick = 14 # Color for matching gnick
104
+ @c_path = 3 # Color for valid path
105
+ @c_switch = 6 # Color for switches/options
106
+ @c_tabselect = 5 # Color for selected tabcompleted item
112
107
  @c_taboption = 244 # Color for unselected tabcompleted item
113
108
  @c_stamp = 244 # Color for time stamp/command
114
109
  # Prompt
@@ -123,12 +118,14 @@ begin # Initialization
123
118
  "/usr/bin",
124
119
  "/home/#{@user}/bin"] # Basic paths for executables if not set in .rshrc
125
120
  # History
126
- @histsize = 100 # Max history if not set in .rshrc
121
+ @histsize = 200 # Max history if not set in .rshrc
127
122
  @hloaded = false # Variable to determine if history is loaded
128
- # Use run-mailcap instead of xgd-open? Set = true in .rshrc if iyou want run-mailcap
123
+ # Use run-mailcap instead of xgd-open? Set "= true" in .rshrc if you want run-mailcap
129
124
  @runmailcap = false
130
125
  # Variable initializations
131
126
  @dirs = ["."]*10
127
+ def pre_cmd; end # User-defined function to be run BEFORE command execution
128
+ def post_cmd; end # User-defined function to be run AFTER command execution
132
129
  end
133
130
 
134
131
  # HELP TEXT
@@ -153,12 +150,14 @@ end
153
150
  * Set of simple rsh specific commands like nick, nick?, history and rmhistory
154
151
  * rsh specific commands and full set of Ruby commands available via :<command>
155
152
  * All colors are themeable in .rshrc (see github link for possibilities)
156
-
153
+ * Copy current command line to primary selection (paste w/middle button) with `Ctrl-y`
154
+
157
155
  Special functions/integrations:
158
156
  * Use `r` to launch rtfm (https://github.com/isene/RTFM) - if you have it installed
159
157
  * Use `f` to launch fzf (https://github.com/junegunn/fzf) - if you have it installed
160
- * Use `=` followed by xrpn commands separated by commas (https://github.com/isene/xrpn)
158
+ * Use `=` followed by xrpn commands separated by commas or double-spaces (https://github.com/isene/xrpn)
161
159
  * Use `:` followed by a Ruby expression to access the whole world of Ruby
160
+
162
161
  Special commands:
163
162
  * `:nick 'll = ls -l'` to make a command alias (ll) point to a command (ls -l)
164
163
  * `:gnick 'h = /home/me'` to make a general alias (h) point to something (/home/me)
@@ -217,6 +216,7 @@ def getchr # Process key presses
217
216
  when '6' then chr = "PgDOWN" ; chr = "C-PgDOWN" if STDIN.getc == "^"
218
217
  when '7' then chr = "HOME" ; chr = "C-HOME" if STDIN.getc == "^"
219
218
  when '8' then chr = "END" ; chr = "C-END" if STDIN.getc == "^"
219
+ else chr = ""
220
220
  end
221
221
  when 'O' # Set Ctrl+ArrowKey equal to ArrowKey; May be used for other purposes in the future
222
222
  case STDIN.getc
@@ -224,6 +224,7 @@ def getchr # Process key presses
224
224
  when 'b' then chr = "C-DOWN"
225
225
  when 'c' then chr = "C-RIGHT"
226
226
  when 'd' then chr = "C-LEFT"
227
+ else chr = ""
227
228
  end
228
229
  end
229
230
  when "", "" then chr = "BACK"
@@ -243,6 +244,7 @@ def getchr # Process key presses
243
244
  when "\r" then chr = "ENTER"
244
245
  when "\t" then chr = "TAB"
245
246
  when /[[:print:]]/ then chr = c
247
+ else chr = ""
246
248
  end
247
249
  return chr
248
250
  end
@@ -259,9 +261,9 @@ def getstr # A custom Readline-like function
259
261
  print @prompt
260
262
  row, @pos0 = @c.pos
261
263
  print cmd_check(@history[0])
262
- @ci = @history[1..].find_index {|e| e =~ /^#{Regexp.escape(@history[0])}/}
264
+ @ci = @history[1..].find_index {|e| e =~ /^#{Regexp.escape(@history[0])}./}
263
265
  @ci += 1 unless @ci == nil
264
- if @history[0].length > 2 and @ci
266
+ if @history[0].length > 1 and @ci
265
267
  print @history[@ci][@history[0].length..].to_s.c(@c_stamp)
266
268
  right = true
267
269
  end
@@ -355,6 +357,9 @@ def getstr # A custom Readline-like function
355
357
  end
356
358
  end
357
359
  lift = true
360
+ when 'C-Y' # Copy command line to primary selection
361
+ system("echo -n '#{@history[0]}' | xclip")
362
+ puts "\n#{Time.now.strftime("%H:%M:%S")}: Copied to primary selection (paste with middle buttoni)".c(@c_stamp)
358
363
  when 'C-K' # Kill/delete that entry in the history
359
364
  @history.delete_at(@stk)
360
365
  @stk -= 1
@@ -497,11 +502,11 @@ def tabselect(ary, hist=false) # Let user select from the incoming array
497
502
  when 'TAB'
498
503
  chr = "ENTER"
499
504
  when 'BACK'
505
+ @tabsearch.chop!
500
506
  if @tabsearch == ''
501
507
  @c.clear_screen_down
502
508
  return ""
503
509
  end
504
- @tabsearch.chop!
505
510
  hist ? tab_hist(@tabsearch) : tab_all(@tabsearch)
506
511
  return @tabsearch
507
512
  when /^[[:print:]]$/
@@ -605,9 +610,9 @@ def gnick(nick_str) # Define a generic/global nick to match not only commands (f
605
610
  end
606
611
  def nick? # Show nicks
607
612
  puts " Command nicks:".c(@c_nick)
608
- @nick.each {|key, value| puts " #{key} = #{value}"}
613
+ @nick.sort.each {|key, value| puts " #{key} = #{value}"}
609
614
  puts " General nicks:".c(@c_gnick)
610
- @gnick.each {|key, value| puts " #{key} = #{value}"}
615
+ @gnick.sort.each {|key, value| puts " #{key} = #{value}"}
611
616
  end
612
617
  def dirs
613
618
  puts "Past direactories:"
@@ -671,7 +676,10 @@ loop do
671
676
  system("git status .") if Dir.exist?(".git")
672
677
  next
673
678
  end
674
- @cmd = "echo \"#{@cmd[1...]},prx,off\" | xrpn" if @cmd =~ /^\=/ # Integration with xrpn (https://github.com/isene/xrpn)
679
+ if @cmd =~ /^\=/ # Integration with xrpn (https://github.com/isene/xrpn)
680
+ @cmd.gsub!(" ", ",")
681
+ @cmd = "echo \"#{@cmd[1...]},prx,off\" | xrpn"
682
+ end
675
683
  if @cmd.match(/^\s*:/) # Ruby commands are prefixed with ":"
676
684
  begin
677
685
  eval(@cmd[1..-1])
@@ -684,7 +692,7 @@ loop do
684
692
  else # Execute command
685
693
  ca = @nick.transform_keys {|k| /((^\K\s*\K)|(\|\K\s*\K))\b(?<!-)#{Regexp.escape k}\b/}
686
694
  @cmd = @cmd.gsub(Regexp.union(ca.keys), @nick)
687
- ga = @gnick.transform_keys {|k| /\b#{Regexp.escape k}\b/}
695
+ ga = @gnick.transform_keys {|k| /\b(?<!-)#{Regexp.escape k}\b/}
688
696
  @cmd = @cmd.gsub(Regexp.union(ga.keys), @gnick)
689
697
  @cmd = "~" if @cmd == "cd"
690
698
  @cmd.sub!(/^cd (\S*).*/, '\1')
@@ -712,7 +720,9 @@ loop do
712
720
  end
713
721
  else
714
722
  begin
715
- puts "No such command or nick: #{@cmd}" unless system (@cmd) # Try execute the command
723
+ pre_cmd
724
+ puts "Not executed: #{@cmd}" unless system (@cmd) # Try execute the command
725
+ post_cmd
716
726
  rescue StandardError => err
717
727
  puts "\n#{err}"
718
728
  end
metadata CHANGED
@@ -1,18 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-shell
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: '1.2'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Geir Isene
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-06-22 00:00:00.000000000 Z
11
+ date: 2024-10-10 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, auto-cd, auto-opening files and more. In
15
- continual development. New in 1.0.1: Better history search vie the key UP.'
15
+ continual development. New in 1.2: Fixed bug on tab handling'
16
16
  email: g@isene.com
17
17
  executables:
18
18
  - rsh
@@ -27,7 +27,7 @@ licenses:
27
27
  - Unlicense
28
28
  metadata:
29
29
  source_code_uri: https://github.com/isene/rsh
30
- post_install_message:
30
+ post_install_message:
31
31
  rdoc_options: []
32
32
  require_paths:
33
33
  - lib
@@ -42,8 +42,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
42
42
  - !ruby/object:Gem::Version
43
43
  version: '0'
44
44
  requirements: []
45
- rubygems_version: 3.3.5
46
- signing_key:
45
+ rubygems_version: 3.4.20
46
+ signing_key:
47
47
  specification_version: 4
48
48
  summary: rsh - Ruby SHell
49
49
  test_files: []