mdless 1.0.15 → 1.0.20
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 +8 -0
- data/lib/mdless/converter.rb +59 -23
- data/lib/mdless/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 388ed46c03bdf676e441d063ac9efd9e1491c87d40048dc5346014d9aa1cf7a5
|
4
|
+
data.tar.gz: 06c1958a97494c2b77b4f22c704c096ec06499e04ffb2fddae1c28c8311d3920
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eb1035bbd071a64f84386f4c3ce6ce9b17219ba9408c705a80abb931ffb9e4255e40275414f6b9a409d13aa071871c4f6b687ce1c7d56ba8e7a601fec9b92dd7
|
7
|
+
data.tar.gz: c343ec9cb5715d938736bc343858669175d1c3e1c4685534a83ec1c9fdad869d59cb45da0d2b81aba7980f0d18c39a20c0e69c89f44d31fc041d1e1b4246ecd7
|
data/README.md
CHANGED
@@ -27,6 +27,14 @@ I often use iTerm2 in visor mode, so `qlmanage -p` is annoying. I still wanted a
|
|
27
27
|
|
28
28
|
gem install mdless
|
29
29
|
|
30
|
+
### Dependencies
|
31
|
+
|
32
|
+
Some OSs are missing `tput`, which is necessary for mdless.
|
33
|
+
|
34
|
+
apt update
|
35
|
+
apt install ruby ncurses-utils
|
36
|
+
gem install mdless
|
37
|
+
|
30
38
|
## Usage
|
31
39
|
|
32
40
|
`mdless [options] path` or `cat [path] | mdless`
|
data/lib/mdless/converter.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'fileutils'
|
2
2
|
require 'yaml'
|
3
|
+
require 'fileutils'
|
3
4
|
|
4
5
|
module CLIMarkdown
|
5
6
|
class Converter
|
@@ -41,9 +42,9 @@ module CLIMarkdown
|
|
41
42
|
|
42
43
|
@options[:local_images] = false
|
43
44
|
@options[:remote_images] = false
|
44
|
-
opts.on('-i', '--images=TYPE', 'Include [local|remote (both)] images in output (requires
|
45
|
-
unless exec_available('imgcat')# && ENV['TERM_PROGRAM'] == 'iTerm.app'
|
46
|
-
@log.warn('images turned on but imgcat not found')
|
45
|
+
opts.on('-i', '--images=TYPE', 'Include [local|remote (both)] images in output (requires chafa or imgcat, default NONE). imgcat does not work with pagers, use with -P' ) do |type|
|
46
|
+
unless exec_available('imgcat') || exec_available('chafa')# && ENV['TERM_PROGRAM'] == 'iTerm.app'
|
47
|
+
@log.warn('images turned on but imgcat/chafa not found')
|
47
48
|
else
|
48
49
|
if type =~ /^(r|b|a)/i
|
49
50
|
@options[:local_images] = true
|
@@ -53,12 +54,12 @@ module CLIMarkdown
|
|
53
54
|
end
|
54
55
|
end
|
55
56
|
end
|
56
|
-
opts.on('-I', '--all-images', 'Include local and remote images in output (requires imgcat
|
57
|
-
|
58
|
-
@log.warn('images turned on but imgcat not found')
|
59
|
-
else
|
57
|
+
opts.on('-I', '--all-images', 'Include local and remote images in output (requires imgcat or chafa)' ) do
|
58
|
+
if exec_available('imgcat') || exec_available('chafa')# && ENV['TERM_PROGRAM'] == 'iTerm.app'
|
60
59
|
@options[:local_images] = true
|
61
60
|
@options[:remote_images] = true
|
61
|
+
else
|
62
|
+
@log.warn('images turned on but imgcat/chafa not found')
|
62
63
|
end
|
63
64
|
end
|
64
65
|
|
@@ -104,7 +105,12 @@ module CLIMarkdown
|
|
104
105
|
end
|
105
106
|
end
|
106
107
|
|
107
|
-
|
108
|
+
begin
|
109
|
+
optparse.parse!
|
110
|
+
rescue OptionParser::ParseError => pe
|
111
|
+
$stderr.puts "error: #{pe.message}"
|
112
|
+
exit 1
|
113
|
+
end
|
108
114
|
|
109
115
|
@theme = load_theme(@options[:theme])
|
110
116
|
@cols = @options[:width]
|
@@ -339,6 +345,8 @@ module CLIMarkdown
|
|
339
345
|
|
340
346
|
def clean_markers(input)
|
341
347
|
input.gsub!(/^(\e\[[\d;]+m)?[%~] ?/,'\1')
|
348
|
+
input.gsub!(/^(\e\[[\d;]+m)*>(\e\[[\d;]+m)?( +)/,' \3\1\2')
|
349
|
+
input.gsub!(/^(\e\[[\d;]+m)*>(\e\[[\d;]+m)?/,'\1\2')
|
342
350
|
input.gsub!(/(\e\[[\d;]+m)?@@@(\e\[[\d;]+m)?$/,'')
|
343
351
|
input
|
344
352
|
end
|
@@ -431,8 +439,8 @@ module CLIMarkdown
|
|
431
439
|
new_code_line = l.gsub(/\t/, ' ')
|
432
440
|
new_code_line.sub!(/^#{" "*first_indent}/,'')
|
433
441
|
[
|
434
|
-
color('code_block marker'),
|
435
442
|
"> ",
|
443
|
+
color('code_block marker'),
|
436
444
|
" "*first_indent,
|
437
445
|
"#{color('code_block bg')}#{l}"
|
438
446
|
].join
|
@@ -448,8 +456,8 @@ module CLIMarkdown
|
|
448
456
|
new_code_line.sub!(/^#{" "*first_indent}/,'')
|
449
457
|
new_code_line.gsub!(/ /, "#{color('code_block color')} ")
|
450
458
|
[
|
451
|
-
color('code_block marker'),
|
452
459
|
"> ",
|
460
|
+
color('code_block marker'),
|
453
461
|
" "*first_indent,
|
454
462
|
color('code_block color'),
|
455
463
|
new_code_line,
|
@@ -847,20 +855,41 @@ module CLIMarkdown
|
|
847
855
|
else
|
848
856
|
tail = match[4].nil? ? '' : " "+match[4].strip
|
849
857
|
result = nil
|
850
|
-
if exec_available('imgcat') && @options[:local_images]
|
858
|
+
if (exec_available('imgcat') || exec_available('chafa')) && @options[:local_images]
|
851
859
|
if match[3]
|
852
860
|
img_path = match[3]
|
853
861
|
if img_path =~ /^http/ && @options[:remote_images]
|
854
|
-
begin
|
855
|
-
res, s = Open3.capture2(%Q{curl -sS "#{img_path}" 2> /dev/null | imgcat})
|
856
862
|
|
857
|
-
|
858
|
-
|
859
|
-
|
860
|
-
|
863
|
+
if exec_available('chafa')
|
864
|
+
if File.directory?('.mdless_tmp')
|
865
|
+
FileUtils.rm_r '.mdless_tmp', force: true
|
866
|
+
end
|
867
|
+
Dir.mkdir('.mdless_tmp')
|
868
|
+
Dir.chdir('.mdless_tmp')
|
869
|
+
`curl -SsO #{img_path} 2> /dev/null`
|
870
|
+
tmp_img = File.basename(img_path)
|
871
|
+
img = `chafa "#{tmp_img}"`
|
872
|
+
pre = match[2].size > 0 ? " #{c(%i[d blue])}[#{match[2].strip}]\n" : ''
|
873
|
+
post = tail.size > 0 ? "\n #{c(%i[b blue])}-- #{tail} --" : ''
|
874
|
+
result = pre + img + post
|
875
|
+
Dir.chdir('..')
|
876
|
+
FileUtils.rm_r '.mdless_tmp', force: true
|
877
|
+
else
|
878
|
+
if exec_available('imgcat')
|
879
|
+
begin
|
880
|
+
res, s = Open3.capture2(%Q{curl -sS "#{img_path}" 2> /dev/null | imgcat})
|
881
|
+
|
882
|
+
if s.success?
|
883
|
+
pre = match[2].size > 0 ? " #{c(%i[d blue])}[#{match[2].strip}]\n" : ''
|
884
|
+
post = tail.size > 0 ? "\n #{c(%i[b blue])}-- #{tail} --" : ''
|
885
|
+
result = pre + res + post
|
886
|
+
end
|
887
|
+
rescue => e
|
888
|
+
@log.error(e)
|
889
|
+
end
|
890
|
+
else
|
891
|
+
@log.warn("No viewer for remote images")
|
861
892
|
end
|
862
|
-
rescue => e
|
863
|
-
@log.error(e)
|
864
893
|
end
|
865
894
|
else
|
866
895
|
if img_path =~ /^[~\/]/
|
@@ -872,7 +901,11 @@ module CLIMarkdown
|
|
872
901
|
if File.exists?(img_path)
|
873
902
|
pre = match[2].size > 0 ? " #{c(%i[d blue])}[#{match[2].strip}]\n" : ''
|
874
903
|
post = tail.size > 0 ? "\n #{c(%i[b blue])}-- #{tail} --" : ''
|
875
|
-
|
904
|
+
if exec_available('chafa')
|
905
|
+
img = %x{chafa "#{img_path}"}
|
906
|
+
elsif exec_available('imgcat')
|
907
|
+
img = %x{imgcat "#{img_path}"}
|
908
|
+
end
|
876
909
|
result = pre + img + post
|
877
910
|
end
|
878
911
|
end
|
@@ -963,16 +996,16 @@ module CLIMarkdown
|
|
963
996
|
|
964
997
|
out = cleanup_tables(out)
|
965
998
|
out = clean_markers(out)
|
966
|
-
out = out.gsub(/\n
|
999
|
+
out = out.gsub(/\n{2,}/m,"\n\n") + "#{xc}"
|
967
1000
|
|
968
1001
|
unless @options[:color]
|
969
1002
|
out.uncolor!
|
970
1003
|
end
|
971
1004
|
|
972
1005
|
if @options[:pager]
|
973
|
-
page(
|
1006
|
+
page(out)
|
974
1007
|
else
|
975
|
-
$stdout.puts (
|
1008
|
+
$stdout.puts (out)
|
976
1009
|
end
|
977
1010
|
end
|
978
1011
|
|
@@ -990,6 +1023,9 @@ module CLIMarkdown
|
|
990
1023
|
if f
|
991
1024
|
if f.strip =~ /[ |]/
|
992
1025
|
f
|
1026
|
+
elsif f == 'most'
|
1027
|
+
@log.warn('most not allowed as pager')
|
1028
|
+
false
|
993
1029
|
else
|
994
1030
|
system "which #{f}", :out => File::NULL, :err => File::NULL
|
995
1031
|
end
|
data/lib/mdless/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mdless
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.20
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brett Terpstra
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-03-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -103,7 +103,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
103
103
|
- !ruby/object:Gem::Version
|
104
104
|
version: '0'
|
105
105
|
requirements: []
|
106
|
-
rubygems_version: 3.
|
106
|
+
rubygems_version: 3.0.3
|
107
107
|
signing_key:
|
108
108
|
specification_version: 4
|
109
109
|
summary: A pager like less, but for Markdown files
|