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
         |