Add links to documentation in tutorial

This commit is contained in:
Alexandre Bury 2016-08-15 17:36:04 -07:00
parent 635657e3d1
commit 8ed1ee6639

View File

@ -1,3 +1,5 @@
% Tutorial
# Starting with cursive: Basics # Starting with cursive: Basics
## Target goal ## Target goal
@ -23,6 +25,7 @@ fn main() {
``` ```
Run this application, and you should have something like that: Run this application, and you should have something like that:
<img src="../doc/tutorial_1.png" alt="Tutorial 1 goal" /> <img src="../doc/tutorial_1.png" alt="Tutorial 1 goal" />
Now that you have an idea of what we'll do, let's start from scratch. Now that you have an idea of what we'll do, let's start from scratch.
@ -60,7 +63,7 @@ This simple application is now ready to use cursive. So let's do just that!
## The Cursive root ## The Cursive root
The cursive library is configured through a main `Cursive` root. The cursive library is configured through a main [`Cursive`] root.
A typical cursive application will consist of three phases, A typical cursive application will consist of three phases,
all centered around this object: all centered around this object:
@ -90,21 +93,23 @@ It's rather easy to identify the two steps involved.
If you run this, you'll get an empty blue terminal, with no way of properly If you run this, you'll get an empty blue terminal, with no way of properly
leaving the application (you'll have to press <Ctrl-C> to kill it). leaving the application (you'll have to press <Ctrl-C> to kill it).
[`Cursive`]: http://gyscos.github.io/Cursive/cursive/struct.Cursive.html
## Interactivity ## Interactivity
Let's first add a way to stop the application. We want to quit when the user Let's first add a way to stop the application. We want to quit when the user
presses the letter `<q>`. presses the letter `<q>`.
Cursive sends an event for every user input ; most of these are just ignored Cursive sends an event for every user input ; most of these are just ignored
and have no effect. The `Cursive` root has a `add_global_callback` to call and have no effect. The `Cursive` root has a [`add_global_callback`] method to
a function anytime a certain event is fired. This method takes 2 arguments: call a function anytime a certain event is fired.
a trigger, and a callback. This method takes 2 arguments: a trigger, and a callback.
* The trigger needs to implement `Into<event::Event>`. In addition to * The trigger needs to implement `Into<event::Event>`. In addition to
`event::Event` itself, this includes `event::Key`, or simply `char`. These [`event::Event`] itself, this includes [`event::Key`], or simply `char`.
will trigger when the corresponding key (or letter) is pressed. These will trigger when the corresponding key (or letter) is pressed.
* The callback should be a function taking a `&mut Cursive` as argument. Here, * The callback should be a function taking a `&mut Cursive` as argument. Here,
we want to quit, so we'll use `Cursive::quit` in a closure: `|s| s.quit()`. we want to quit, so we'll use [`Cursive::quit`] in a closure: `|s| s.quit()`.
In the end, we have: In the end, we have:
@ -125,21 +130,26 @@ fn main() {
As expected, running it show no visible change, but hitting the `<q>` key at As expected, running it show no visible change, but hitting the `<q>` key at
least closes the application. least closes the application.
[`add_global_callback`]: http://gyscos.github.io/Cursive/cursive/struct.Cursive.html#method.add_global_callback
[`event::Event`]: http://gyscos.github.io/Cursive/cursive/event/enum.Event.html
[`event::Key`]: http://gyscos.github.io/Cursive/cursive/event/enum.Key.html
[`Cursive::quit`]: http://gyscos.github.io/Cursive/cursive/struct.Cursive.html#method.quit
## Views ## Views
`View`s are the main components of the user interface in a cursive application. [`View`s] are the main components of the user interface in a cursive
At their core, they define what to draw in a rectangle of the terminal. For application. At their core, they define what to draw in a rectangle of the
instance, a view can print a line of text, or a checkbox, etc. terminal. For instance, a view can print a line of text, or a checkbox, etc.
Here, we'll be using a `TextView` to show a short message. `TextView` itself Here, we'll be using a [`TextView`] to show a short message. `TextView` itself
can also deal with long text and do proper word-wrapping, but we won't need can also deal with long text and do proper word-wrapping, but we won't need
that today. that today.
The `TextView` constructor just takes the text to use: `TextView::new("...")`. The `TextView` constructor just takes the text to use: `TextView::new("...")`.
The `Cursive` root itself uses a `StackView` on the entire screen. This The `Cursive` root itself uses a [`StackView`] on the entire screen. This
`StackView` unsurprisingly stacks views in layers. It starts empty, so we'll `StackView` unsurprisingly stacks views in layers. It starts empty, so we'll
just need to add our `TextView` as a layer. The `Cursive::add_layer` does just need to add our `TextView` as a layer. The [`Cursive::add_layer`] does
exactly that. exactly that.
Once we've added this line, our first application is complete: Once we've added this line, our first application is complete:
@ -160,3 +170,8 @@ fn main() {
siv.run(); siv.run();
} }
``` ```
[`View`s]: http://gyscos.github.io/Cursive/cursive/view/trait.View.html
[`TextView`]: http://gyscos.github.io/Cursive/cursive/views/struct.TextView.html
[`StackView`]: http://gyscos.github.io/Cursive/cursive/views/struct.StackView.html
[`Cursive::add_layer`]: http://gyscos.github.io/Cursive/cursive/struct.Cursive.html#method.add_layer