ruby-shell 1.1 → 1.2
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/README.md +1 -1
- data/bin/rsh +37 -32
- metadata +7 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6d3646331db7eac6ea26f07f0878354ca9b3ed9f46ebda4e2bd177d252ce67d3
|
4
|
+
data.tar.gz: deffdb053c7284ed35110c482a30adfd0ec732ce5eb0d2ea4188638cf92d1b0e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
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:
|
11
|
-
|
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.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
|
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 =
|
106
|
-
@c_cmd =
|
107
|
-
@c_nick =
|
108
|
-
@c_gnick =
|
109
|
-
@c_path =
|
110
|
-
@c_switch =
|
111
|
-
@c_tabselect =
|
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 =
|
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
|
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
|
@@ -158,7 +155,7 @@ end
|
|
158
155
|
Special functions/integrations:
|
159
156
|
* Use `r` to launch rtfm (https://github.com/isene/RTFM) - if you have it installed
|
160
157
|
* Use `f` to launch fzf (https://github.com/junegunn/fzf) - if you have it installed
|
161
|
-
* 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)
|
162
159
|
* Use `:` followed by a Ruby expression to access the whole world of Ruby
|
163
160
|
|
164
161
|
Special commands:
|
@@ -219,6 +216,7 @@ def getchr # Process key presses
|
|
219
216
|
when '6' then chr = "PgDOWN" ; chr = "C-PgDOWN" if STDIN.getc == "^"
|
220
217
|
when '7' then chr = "HOME" ; chr = "C-HOME" if STDIN.getc == "^"
|
221
218
|
when '8' then chr = "END" ; chr = "C-END" if STDIN.getc == "^"
|
219
|
+
else chr = ""
|
222
220
|
end
|
223
221
|
when 'O' # Set Ctrl+ArrowKey equal to ArrowKey; May be used for other purposes in the future
|
224
222
|
case STDIN.getc
|
@@ -226,6 +224,7 @@ def getchr # Process key presses
|
|
226
224
|
when 'b' then chr = "C-DOWN"
|
227
225
|
when 'c' then chr = "C-RIGHT"
|
228
226
|
when 'd' then chr = "C-LEFT"
|
227
|
+
else chr = ""
|
229
228
|
end
|
230
229
|
end
|
231
230
|
when "", "" then chr = "BACK"
|
@@ -245,6 +244,7 @@ def getchr # Process key presses
|
|
245
244
|
when "\r" then chr = "ENTER"
|
246
245
|
when "\t" then chr = "TAB"
|
247
246
|
when /[[:print:]]/ then chr = c
|
247
|
+
else chr = ""
|
248
248
|
end
|
249
249
|
return chr
|
250
250
|
end
|
@@ -261,9 +261,9 @@ def getstr # A custom Readline-like function
|
|
261
261
|
print @prompt
|
262
262
|
row, @pos0 = @c.pos
|
263
263
|
print cmd_check(@history[0])
|
264
|
-
@ci = @history[1..].find_index {|e| e =~ /^#{Regexp.escape(@history[0])}
|
264
|
+
@ci = @history[1..].find_index {|e| e =~ /^#{Regexp.escape(@history[0])}./}
|
265
265
|
@ci += 1 unless @ci == nil
|
266
|
-
if @history[0].length >
|
266
|
+
if @history[0].length > 1 and @ci
|
267
267
|
print @history[@ci][@history[0].length..].to_s.c(@c_stamp)
|
268
268
|
right = true
|
269
269
|
end
|
@@ -502,11 +502,11 @@ def tabselect(ary, hist=false) # Let user select from the incoming array
|
|
502
502
|
when 'TAB'
|
503
503
|
chr = "ENTER"
|
504
504
|
when 'BACK'
|
505
|
+
@tabsearch.chop!
|
505
506
|
if @tabsearch == ''
|
506
507
|
@c.clear_screen_down
|
507
508
|
return ""
|
508
509
|
end
|
509
|
-
@tabsearch.chop!
|
510
510
|
hist ? tab_hist(@tabsearch) : tab_all(@tabsearch)
|
511
511
|
return @tabsearch
|
512
512
|
when /^[[:print:]]$/
|
@@ -610,9 +610,9 @@ def gnick(nick_str) # Define a generic/global nick to match not only commands (f
|
|
610
610
|
end
|
611
611
|
def nick? # Show nicks
|
612
612
|
puts " Command nicks:".c(@c_nick)
|
613
|
-
@nick.each {|key, value| puts " #{key} = #{value}"}
|
613
|
+
@nick.sort.each {|key, value| puts " #{key} = #{value}"}
|
614
614
|
puts " General nicks:".c(@c_gnick)
|
615
|
-
@gnick.each {|key, value| puts " #{key} = #{value}"}
|
615
|
+
@gnick.sort.each {|key, value| puts " #{key} = #{value}"}
|
616
616
|
end
|
617
617
|
def dirs
|
618
618
|
puts "Past direactories:"
|
@@ -676,7 +676,10 @@ loop do
|
|
676
676
|
system("git status .") if Dir.exist?(".git")
|
677
677
|
next
|
678
678
|
end
|
679
|
-
|
679
|
+
if @cmd =~ /^\=/ # Integration with xrpn (https://github.com/isene/xrpn)
|
680
|
+
@cmd.gsub!(" ", ",")
|
681
|
+
@cmd = "echo \"#{@cmd[1...]},prx,off\" | xrpn"
|
682
|
+
end
|
680
683
|
if @cmd.match(/^\s*:/) # Ruby commands are prefixed with ":"
|
681
684
|
begin
|
682
685
|
eval(@cmd[1..-1])
|
@@ -689,7 +692,7 @@ loop do
|
|
689
692
|
else # Execute command
|
690
693
|
ca = @nick.transform_keys {|k| /((^\K\s*\K)|(\|\K\s*\K))\b(?<!-)#{Regexp.escape k}\b/}
|
691
694
|
@cmd = @cmd.gsub(Regexp.union(ca.keys), @nick)
|
692
|
-
ga = @gnick.transform_keys {|k| /\b#{Regexp.escape k}\b/}
|
695
|
+
ga = @gnick.transform_keys {|k| /\b(?<!-)#{Regexp.escape k}\b/}
|
693
696
|
@cmd = @cmd.gsub(Regexp.union(ga.keys), @gnick)
|
694
697
|
@cmd = "~" if @cmd == "cd"
|
695
698
|
@cmd.sub!(/^cd (\S*).*/, '\1')
|
@@ -717,7 +720,9 @@ loop do
|
|
717
720
|
end
|
718
721
|
else
|
719
722
|
begin
|
720
|
-
|
723
|
+
pre_cmd
|
724
|
+
puts "Not executed: #{@cmd}" unless system (@cmd) # Try execute the command
|
725
|
+
post_cmd
|
721
726
|
rescue StandardError => err
|
722
727
|
puts "\n#{err}"
|
723
728
|
end
|
metadata
CHANGED
@@ -1,19 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-shell
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '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:
|
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.
|
16
|
-
(paste w/middle button) with Ctrl-y'
|
15
|
+
continual development. New in 1.2: Fixed bug on tab handling'
|
17
16
|
email: g@isene.com
|
18
17
|
executables:
|
19
18
|
- rsh
|
@@ -28,7 +27,7 @@ licenses:
|
|
28
27
|
- Unlicense
|
29
28
|
metadata:
|
30
29
|
source_code_uri: https://github.com/isene/rsh
|
31
|
-
post_install_message:
|
30
|
+
post_install_message:
|
32
31
|
rdoc_options: []
|
33
32
|
require_paths:
|
34
33
|
- lib
|
@@ -43,8 +42,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
43
42
|
- !ruby/object:Gem::Version
|
44
43
|
version: '0'
|
45
44
|
requirements: []
|
46
|
-
rubygems_version: 3.
|
47
|
-
signing_key:
|
45
|
+
rubygems_version: 3.4.20
|
46
|
+
signing_key:
|
48
47
|
specification_version: 4
|
49
48
|
summary: rsh - Ruby SHell
|
50
49
|
test_files: []
|