Class: JotaCurses

Inherits:
Object
  • Object
show all
Defined in:
lib/jota_curses.rb

Instance Method Summary collapse

Constructor Details

#initializeJotaCurses

Returns a new instance of JotaCurses.



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/jota_curses.rb', line 43

def initialize
  @data = nil

  @top_win_first = 0   # number of top clip in top window
  @bot_win_first = 0   # number of top line in bottom window

  @top_bar = nil
  @top_win = nil
  @mid_bar = nil
  @bot_win = nil
  @bot_bar = nil

  @mode = :normal
  @editor_running = false

        default_focus
end

Instance Method Details

#clip_arrayObject



83
84
85
# File 'lib/jota_curses.rb', line 83

def clip_array
  return @data
end

#create(filename) ⇒ Object



87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/jota_curses.rb', line 87

def create(filename)
  begin
    new_data = ClipArray.create(filename)
        rescue AppError, SystemCallError => msg
                error(msg)
                return
  end

  if @data then
    @data.close
  end
  @data = new_data
  @data.current_index = 0
  @top_win_first = 0
  draw_bars
end

#deleteObject



105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/jota_curses.rb', line 105

def delete
  return if not @data

  return if not really?("confirm_delete","Really delete?")

  if @data.pref["deletesave_enable"] and not @data.current.empty? then
    deletefile = expand_filename(@data.pref["deletesave_file"],
            @data.dirname, @data.filename)
    begin
      @data.append(deletefile)
    rescue SystemCallError => msg
      error(msg)
      return
    end
  end

  @data.delete
end

#finishObject



61
62
63
# File 'lib/jota_curses.rb', line 61

def finish
        Curses.close_screen
end

#get_bot_win_heightObject

Helper



167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
# File 'lib/jota_curses.rb', line 167

def get_bot_win_height
  rows = @lines - @top_win_height - 3

  # some error checking if the terminal window is made too small
  if rows < 3 then
    # first try to adjust the windows
    @top_win_height = @lines - 3 - 4
    if @top_win_height < 2 then
      # if it doesn't help, display an error
      @top_win_height = 2
      @top_bar.clear
      @top_bar.addstr("TOO SMALL")
      @top_bar.refresh

      @top_win.clear; @top_win.refresh
      @mid_bar.clear; @mid_bar.refresh
      @bot_win.clear; @bot_win.refresh
      @bot_bar.clear; @bot_bar.refresh
    end
    return 4
  else
    return rows
  end
end

#open(filename) ⇒ Object



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/jota_curses.rb', line 65

def open(filename)
  begin
    new_data = ClipArray.open(filename)
  rescue AppError, SystemCallError => msg
                finish
                puts msg
    return nil
  end

  if @data then
    @data.close
  end
  @data = new_data
  @data.current_index = 0
  @top_win_first = 0
  return @data
end

#runObject



124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# File 'lib/jota_curses.rb', line 124

def run
  Curses.init_screen
  Curses.cbreak
  Curses.noecho
  Curses.nonl

  set_terminal
  @top_win_height = @lines/2
  set_windows

  begin
    # set SIGgnal handler if terminal WINdow CHanged
    Signal.trap("SIGWINCH") do
      print_debug "terminal size changed"
      set_terminal
      # ruby 1.9 can't cope with curses initializing and closing in fast succession
      # and the "sleep" makes fast resizing smoother
      sleep 0.1
      if not @editor_running then
        set_windows
      end
    end
  rescue ArgumentError
    # for example with Windows
    print_verbose "Cannot set trap for 'SIGWINCH'"
  end

  draw_bars
  adjust_top_win_first
  adjust_bot_win_first
  loop do
    draw_top_window
    @bot_win_lines = draw_bottom_window
    handle_key
  end
end

#set_terminalObject



34
35
36
37
38
39
40
41
# File 'lib/jota_curses.rb', line 34

def set_terminal
  Curses.close_screen
  Curses.init_screen
  Curses.stdscr.refresh
  @columns = Curses.stdscr.maxx
  @lines = Curses.stdscr.maxy
  print_debug "setting terminal: lines=#{@lines}, columns=#{@columns}"
end