rtfm-filemanager 3.5 → 3.8

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 +3 -0
  3. data/bin/rtfm +18 -39
  4. metadata +5 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fe11017b37608ece785d04b740e858ee400a3518f7ec6e2e90d318c36069d431
4
- data.tar.gz: c1f526b4b1a347c106915e6c4e03486e1adf1464c8050e153b625f1510fa6aa7
3
+ metadata.gz: 3699cc2dad80b5897439a8dae2a37a6865f2ce4eaab7f9f4f145aa81680796a8
4
+ data.tar.gz: d8d969d05f715d99a6bf610771559810202da03b4de75d272c8ffb30f58b5e02
5
5
  SHA512:
6
- metadata.gz: 8cb52b1a6b0d7bd0db5f76486cde99416a1a3fcb9ceee3d1e5e0cc912c6c79c567e104982e9fa32f6a8f53a7cbbe34481f72d30980e24c9a2ffc31ac544db96e
7
- data.tar.gz: 8376fb44256d84321f755842daa76009c5e116a86024977bd1af5bc01c24915198b51c0c082f2e609cd6181ee5dfef36484a6394a376da8f08f1816ad76c5567
6
+ metadata.gz: 3498bc171b280b56c4a4661a8f4c41a9b4878392cefd8f9a33907d0d8dab771d4627e662b48fb3e23569c2433d6f9070c5d16068d6d350bd054e61f74e392517
7
+ data.tar.gz: f17194010e4c9e218df33cfec4edaf0560c89c5e964709518d1374bc226ee094bd211695917dd96c249e35ace943d15e40798f47b6355bc9a82e9530d7100369
data/README.md CHANGED
@@ -64,6 +64,9 @@ of the selected item (directory or file) is shown in the right pane. The right
64
64
  pane is also used to show information such as the currently tagged items, your
65
65
  (book)marks, output from commands, etc.
66
66
 
67
+ When you start RTFM, you can supply a directory path as an argument to let
68
+ RTFM start up in that directory.
69
+
67
70
  You can run any command in the bottom "command bar" and have the output
68
71
  presented in the right pane. Use LEFT and RIGHT keys to go back and forth on
69
72
  the command line, HOME to beginning of line, END to end of line, Backspace or
data/bin/rtfm CHANGED
@@ -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 = "3.5"
17
+ @version = "3.8"
18
18
 
19
19
  # PRELIMINARIES
20
20
  @help = <<HELPTEXT
@@ -199,7 +199,6 @@ begin # BASIC SETUP
199
199
  cmd?('bat') ? @bat = "bat" : @bat = "batcat"
200
200
 
201
201
  STDIN.set_encoding(Encoding::UTF_8) # Set encoding for STDIN
202
- LScolors = `echo $LS_COLORS` # Import LS_COLORS
203
202
 
204
203
  ## Curses setup
205
204
  Curses.init_screen
@@ -251,8 +250,10 @@ begin # BASIC SETUP
251
250
  if File.exist?(Dir.home+'/.rtfm.conf')
252
251
  load(Dir.home+'/.rtfm.conf')
253
252
  end
253
+ Dir.chdir(ARGV[0]) if Dir.exist?(ARGV[0]) and ARGV[0] !~ /\/tmp/
254
254
  end
255
- class Curses::Window # CLASS EXTENSION
255
+ # CLASS EXTENSIONS
256
+ class Curses::Window
256
257
  attr_accessor :fg, :bg, :attr, :text, :update, :pager, :pager_more, :pager_cmd, :locate, :nohistory
257
258
  # General extensions (see https://github.com/isene/Ruby-Curses-Class-Extension)
258
259
  def clr
@@ -282,16 +283,6 @@ class Curses::Window # CLASS EXTENSION
282
283
  # RTFM specific extensions
283
284
  end
284
285
  # GENERIC FUNCTIONS
285
- def get_ls_color(type) # GET THE COLOR FOR THE FILETYPE FROM IMPORTED LS_COLORS
286
- bold = 0
287
- begin
288
- color = LScolors.match(/#{type}=\d*;\d*;(\d*)/)[1]
289
- bold = 1 if LScolors.match(/#{type}=\d*;\d*;\d*;1/)
290
- rescue
291
- color = 7 # Default color
292
- end
293
- return color.to_i, bold
294
- end
295
286
  def syntax_highlight(input) # SYNTAX HIGHLIGHTING FROM ANSI COLOR CODES
296
287
  color_ary = color_parse(input)
297
288
  color_ary.each do | pair |
@@ -308,13 +299,15 @@ def syntax_highlight(input) # SYNTAX HIGHLIGHTING FROM ANSI COLOR CODES
308
299
  end
309
300
  end
310
301
  def color_parse(input) # PARSE ANSI COLOR SEQUENCES
311
- input.gsub!( /\e\[\d;38;5;(\d+);*(\d*)m/, '¤¤\1¤¤\2¤¤')
312
- input.gsub!( /\e\[38;5;(\d+);*(\d*)m/, '¤¤\1¤¤\2¤¤')
313
- input.gsub!( /\e\[\d;38;2;(\d+);*(\d*);\d*m/, '¤¤\1¤¤\2¤¤')
314
- input.gsub!( /\e\[38;2;(\d+);*(\d*);\d*m/, '¤¤\1¤¤\2¤¤')
315
- input.gsub!( /\e\[0m/, "\t")
302
+ input.gsub!(/\e\[\d;38;5;(\d+);*(\d*)m/, '¤¤\1¤¤\2¤¤')
303
+ input.gsub!(/\e\[38;5;(\d+);*(\d*)m/, '¤¤\1¤¤\2¤¤')
304
+ input.gsub!(/\e\[\d;38;2;(\d+);*(\d*);\d*m/, '¤¤\1¤¤\2¤¤')
305
+ input.gsub!(/\e\[38;2;(\d+);*(\d*);\d*m/, '¤¤\1¤¤\2¤¤')
306
+ input.gsub!(/\e\[\d+;(\d+);*(\d*)m/, '¤¤\1¤¤\2¤¤')
307
+ input.gsub!(/\e\[0m/, "")
316
308
  color_array = input.split("¤¤")
317
309
  color_array = color_array.drop(1)
310
+ #color_array.map! { |x| x || 0 }
318
311
  output = color_array.each_slice(3).to_a
319
312
  return output
320
313
  end
@@ -960,7 +953,8 @@ end
960
953
  def get_files(win) # The core of the directory listings
961
954
  ls_cmd = "ls 2>/dev/null #{@lsbase} #{@lsall} #{@lsorder} #{@lsinvert} #{@lsuser}" # Get files in current directory
962
955
  ls_cmd += @selected_safe if win == "right"
963
- @files = `#{ls_cmd}`.split("\n")
956
+ @cfiles = `#{ls_cmd} --color`.split("\n")
957
+ @files = @cfiles.map {|f| f.sub(/^\e\[.*\dm(..*$)/, '\1').sub(/\e.+/, '')}
964
958
  ls_cmd += " -H " if win == "right"
965
959
  ls_cmd += %q[ -lh --time-style="long-iso" | awk '{printf "%s%s%s%11s%6s%6s", $1, " " $3, ":" $4,$6,$7,$5"\n"}']
966
960
  @fspes = `#{ls_cmd}`.split("\n").drop(1)
@@ -1027,7 +1021,8 @@ def list_dir(active) # LIST CONTENT OF A DIRECTORY (BOTH active AND RIGHT WINDOW
1027
1021
  @cont = ""
1028
1022
  end
1029
1023
  while ix < @files.size and t < win.maxy do
1030
- str = @files[ix]
1024
+ str = @files[ix]
1025
+ cstr = @cfiles[ix]
1031
1026
  active ? str_path = str : str_path = "#{@selected}/#{str}"
1032
1027
  begin # Add items matching @tag to @tagged
1033
1028
  if str.match(/#{@tag}/) and @tag != false
@@ -1036,25 +1031,9 @@ def list_dir(active) # LIST CONTENT OF A DIRECTORY (BOTH active AND RIGHT WINDOW
1036
1031
  end
1037
1032
  rescue
1038
1033
  end
1039
- # Determine the filetype of the item
1040
- ftype = ""
1041
- ftype = str.match(/\.([^.]*$)/)[1] if str.match?(/\.([^.]*$)/)
1042
- # Set special filetypes (sequence matters)
1043
- ftype = "bd" if File.blockdev?(str_path)
1044
- ftype = "cd" if File.chardev?(str_path)
1045
- ftype = "pi" if File.pipe?(str_path)
1046
- ftype = "st" if File.sticky?(str_path)
1047
- ftype = "so" if File.socket?(str_path)
1048
- ftype = "ex" if File.executable?(str_path)
1049
- ftype = "di" if File.directory?(str_path)
1050
- ftype = "ln" if File.symlink?(str_path)
1051
- begin
1052
- File.stat(str_path) # Checking if not an orphaned link
1053
- rescue
1054
- ftype = "or" # Set to orphant if no link target
1055
- end
1056
1034
  fg = 7; bold = 0; bg = 0 # Set default color
1057
- fg, bold = get_ls_color(ftype) unless ftype == "" # Color from LS_COLORS
1035
+ fl = color_parse(cstr)
1036
+ fg, bold = fl[0][0].to_i, fl[0][1].to_i unless fl[0] == nil
1058
1037
  init_pair(fg, fg, bg)
1059
1038
  file_marker = color_pair(fg)
1060
1039
  file_marker = file_marker | Curses::A_BOLD if bold == 1
@@ -1708,7 +1687,7 @@ loop do # OUTER LOOP - CATCHING REFRESHES VIA 'r'
1708
1687
  close_screen
1709
1688
  # If launched via the script "r", return current dir and "r" will cd to that
1710
1689
  begin
1711
- File.write(ARGV[0], Dir.pwd) if ARGV[0] and ARGV[0].match(/\/tmp\/tmp/)
1690
+ File.write(ARGV[0], Dir.pwd) if ARGV[0] and ARGV[0].match(/\/tmp/)
1712
1691
  rescue
1713
1692
  end
1714
1693
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rtfm-filemanager
3
3
  version: !ruby/object:Gem::Version
4
- version: '3.5'
4
+ version: '3.8'
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-03 00:00:00.000000000 Z
11
+ date: 2023-05-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: curses
@@ -47,7 +47,9 @@ dependencies:
47
47
  description: 'A full featured terminal browser with syntax highlighted files, images
48
48
  shown in the terminal, videos thumbnailed, etc. You can bookmark and jump around
49
49
  easily, delete, rename, copy, symlink and move files. RTFM has a a wide range of
50
- other features. New in 3.5: Simplified install :-)'
50
+ other features. New in 3.8: Rewrite of core file listing engine for speedup. RTFM
51
+ now handles simpler LS_COLORS. You can now supply a path as argument at startup
52
+ to let RTFM start from that directory.'
51
53
  email: g@isene.com
52
54
  executables:
53
55
  - rtfm