lib/dmenu.rb in markw-dmenu-1.0.0 vs lib/dmenu.rb in markw-dmenu-1.1.0

- old
+ new

@@ -4,10 +4,11 @@ def initialize super force_encoding("utf-8") end end + module Dmenu require 'wcwidth' # Characters that, in the keyed fonts, are actually double width, # but not reported as such by wcwidth. This isn't an exhaustive list, # just characters I found by visually scanning some titles in my music @@ -35,19 +36,31 @@ base_font = font[0..(findex > 0 ? findex - 1 : -1)] repl_chars = $DBL_CHARS[base_font] res = "" lr_separation = 4 textwidth = 2 * width / font_width - lr_separation - expr = %r{[^#{repl_chars}]+} + if !repl_chars.nil? + expr = %r{[^#{repl_chars}]+} + end entries.collect! do |line| - line = line.each_char.reject{|char| char.ord < 32 or (char.ord >= 0x7f and char.ord < 0xa0)}.inject(:+) - l, r = line.split("|||") - loff = l.gsub(expr, "").length - roff = r.nil? ? 0 : r.gsub(expr, "").length - scrunched = scrunch(r, [textwidth - l.width - lr_separation, textwidth / 2].max) - s = r ? alignr(l, scrunched, textwidth - loff - roff) : l + transformed_line = line.each_char.reject{|char| char.ord < 32 or (char.ord >= 0x7f and char.ord < 0xa0)}.inject(:+) + s = if !transformed_line.nil? + l, r = transformed_line.split("|||") + loff = 0 + roff = 0 + if !repl_chars.nil? + loff = l.gsub(expr, "").length + roff = r.nil? ? 0 : r.gsub(expr, "").length + end + scrunched = scrunch(r, [textwidth - l.width - lr_separation, textwidth / 2].max) + r ? alignr(l, scrunched, textwidth - loff - roff) : l + else + $stderr.puts "Couldn't list #{line.inspect}" + nil + end s - end + end.reject! {|x| x.nil? or x.empty? or x.match(/\s+/) } + cmdline = "dmenu -f -p \"#{prompt}\" -nf \"#{fg_color}\" \ -nb \"#{bg_color}\" \ -sb \"#{sel_bg_color}\" \ -sf \"#{sel_fg_color}\" \ -i -l #{height} \