class Textbringer::PresentationMode
Constants
- PRESENTATION_MODE_MAP
Public Class Methods
new(buffer)
click to toggle source
Calls superclass method
# File lib/textbringer/modes/presentation_mode.rb, line 33 def initialize(buffer) super(buffer) buffer.keymap = PRESENTATION_MODE_MAP show_current_slide end
Public Instance Methods
backward_slide()
click to toggle source
# File lib/textbringer/modes/presentation_mode.rb, line 79 def backward_slide @buffer[:slide_list].backward_slide show_current_slide end
forward_slide()
click to toggle source
# File lib/textbringer/modes/presentation_mode.rb, line 74 def forward_slide @buffer[:slide_list].forward_slide show_current_slide end
quit_presentation()
click to toggle source
# File lib/textbringer/modes/presentation_mode.rb, line 84 def quit_presentation Window.delete_other_windows buffer = Buffer["*Code*"] if buffer buffer.kill end src_buffer = @buffer[:source_buffer] pos = @buffer[:slide_list].current.start_pos kill_buffer(@buffer) switch_to_buffer(src_buffer) src_buffer.goto_char(pos) Window.current.recenter Window.redraw end
show_current_slide()
click to toggle source
# File lib/textbringer/modes/presentation_mode.rb, line 39 def show_current_slide Window.delete_other_windows Window.redraw @buffer.read_only = false begin @buffer.clear slide_list = buffer[:slide_list] slide = slide_list.current if slide @buffer.insert("\n" * @buffer[:presentation_top_margin]) left_margin = " " * @buffer[:presentation_left_margin] @buffer.insert("#{left_margin}#{slide.title}\n\n") body = slide.body img_re = /!\[.*?\]\((.*\.(?:jpg|png))\)/ img = body.slice(img_re, 1) code_re = /^```([a-z]+)?\n(.*?)^```$/m lang, code = body.scan(code_re)[0] s = body.sub(img_re, "").sub(code_re, ""). gsub(/\[(.*?)\]\(https?:.*?\)/, '\1'). strip.gsub(/^/, left_margin) @buffer.insert(s) beginning_of_buffer if img show_image(img, s) end if code show_code(code, lang) end show_slide_number(slide_list) end ensure @buffer.read_only = true end end
Private Instance Methods
show_code(code, lang)
click to toggle source
# File lib/textbringer/modes/presentation_mode.rb, line 125 def show_code(code, lang) Window.current.split Window.current.shrink_if_larger_than_buffer Window.other_window buffer = Buffer.find_or_new("*Code*") buffer.clear switch_to_buffer(buffer) if lang send(lang.downcase + "_mode") else fundamental_mode end insert("\n" * @buffer[:presentation_code_top_margin]) left_margin = " " * @buffer[:presentation_code_left_margin] insert(code.gsub(/^/, left_margin)) beginning_of_buffer Window.other_window end
show_image(img, body)
click to toggle source
# File lib/textbringer/modes/presentation_mode.rb, line 101 def show_image(img, body) Window.redisplay width = CONFIG[:presentation_window_width] height = CONFIG[:presentation_window_height] if width.nil? || height.nil? wininfo = `xwininfo -id $WINDOWID` width = wininfo.slice(/Width: (\d+)/, 1).to_i height = wininfo.slice(/Height: (\d+)/, 1).to_i end lines = Window.lines columns = Window.columns y = @buffer[:presentation_top_margin] + (/\A\s*\z/.match(body) ? 3 : body.count("\n") + 5) left_margin = @buffer[:presentation_image_left_margin] img_width = width * (columns - left_margin * 2) / columns img_height = height * (lines - y - 2) / lines STDOUT.printf("\e[%d;%dH", y, left_margin + 1) img_size = "#{img_width}x#{img_height}" img_bg = @buffer[:presentation_image_background] options = CONFIG.fetch(:presentation_img2sixel_options, "") STDOUT.print(`convert -resize #{img_size} -gravity center -background '#{img_bg}' -extent #{img_size} '#{img}' - | img2sixel #{options} 2> /dev/null`) STDOUT.flush end
show_slide_number(slide_list)
click to toggle source
# File lib/textbringer/modes/presentation_mode.rb, line 144 def show_slide_number(slide_list) slide = slide_list.current msg = "#{slide.number}/#{slide_list.size}" message(msg, log: false) end