Dans le programme d’aujourd’hui, on s’occupe de déplacer le curseur.

require 'curses'
include Curses

begin
  init_screen
  cbreak
  noecho
  stdscr.keypad(true)
  x = 0
  y = 0

  while (ch = getch) != KEY_F1
    case ch
    when KEY_LEFT then x -= 1
    when KEY_RIGHT then x += 1
    when KEY_UP then y -= 1
    when KEY_DOWN then y += 1
    end
    setpos(y, x)
    refresh
  end
ensure
  close_screen
end

Les détails:

Pour éviter que les caractères s’affiche sur le terminal:

  noecho

Pour rappel, le code suivant permet d’activer le pavé numérique, les flèches, etc.

  stdscr.keypad(true)

Positionner le curseur est aussi simple que ce qui suit. Comme toujours, attention, c’est y d’abord et x ensuite:

    setpos(y, x)

Par contre, si vous jouer un peu avec ce programme, on voit que les sauts de lignes ne sont pas gérer automatiquement (quand j’arrive à la fin de la ligne et que j’appuie sur flèche droite, on ne passe pas à la ligne suivante par exemple). Ce sera à nous de le gérer…

Si on veut utiliser HJKL (comme dans Vim) pour se déplacer, on peut remplacer le contenu du case par:

    when ?h then x -= 1
    when ?l then x += 1
    when ?k then y -= 1
    when ?j then y += 1

Voilà.

À demain.