Xavier Nayrac

Rubyiste accro au TDD, serial blogger, apprenti data scientist, heureux utilisateur de Vim, accordéoniste.
Si vous vous sentez particulièrement généreux, suivez moi sur Twitter.

Un éditeur pour le terminal - partie 9

| Comments

Niveau : intermédiaire

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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:

1
  noecho

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

1
  stdscr.keypad(true)

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

1
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:

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

Voilà.

À demain.

Articles connexes

Commentaires