Écrire un éditeur pour le terminal - partie 7
Notre futur éditeur aura un certain nombre de fenêtre (au sens de curses) et pour les gérer, on sera bien inspiré d’utiliser un peu de POO. Voici donc une réécriture du programme vu ici.
#!/usr/bin/env ruby
require 'curses'
include Curses
class StatusWindow
def initialize(filename)
@filename = filename
@win = Window.new(1, cols, 0, 0)
end
def display
@win.setpos(0, (@win.maxx - @filename.size) / 2)
@win.addstr(@filename)
@win.refresh
end
def close
@win.close
end
end
class FileWindow
def initialize(filename)
@filename = filename
@win = Window.new(lines - 2, cols, 2, 0)
end
def display
@win.setpos(0, 0)
File.open(@filename).each {|line| @win.addstr(line) }
@win.refresh
end
def close
@win.close
end
end
begin
init_screen
refresh
status_window = StatusWindow.new(ARGV[0])
file_window = FileWindow.new(ARGV[0])
status_window.display
file_window.display
getch
status_window.close
file_window.close
ensure
close_screen
end
Le code est plus conséquent, c’est vrai, mais la structure sera plus claire, surtout quand on coupera le code en plusieurs fichiers, et qu’on utilisera un peu, ou plutôt beaucoup, d’héritage.
Le détail à retenir, curieusement, est celui-ci:
begin
init_screen
refresh
Il faut rafraichir l’écran juste après l’initialisation de curses, sinon aucune fenêtre ne s’affichera…
À demain.
/ / / / / / / / / /