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