Skip to content

Commit

Permalink
feature #15270 [Console] Document console cursor (noniagriconomie)
Browse files Browse the repository at this point in the history
This PR was submitted for the 5.4 branch but it was squashed and merged into the 5.2 branch instead.

Discussion
----------

[Console] Document console cursor

fixes #13529
feature symfony/symfony#27444

ping `@wouterj` I've seen your slack recently and wanted to give it a try as I will use the feature very soon :)
feel free to comment, specialy if I need to document all the cursor features or not

text and image taken from the feature PR description
inspired by https://symfony.com/doc/current/components/console/helpers/progressbar.html

Commits
-------

232c519 [Console] Document console cursor
  • Loading branch information
wouterj committed Jun 17, 2021
2 parents 7cc8d2a + 232c519 commit fb749b5
Show file tree
Hide file tree
Showing 6 changed files with 105 additions and 1 deletion.
Binary file added _images/components/console/cursor.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
101 changes: 101 additions & 0 deletions components/console/helpers/cursor.rst
@@ -0,0 +1,101 @@
.. index::
single: Console Helpers; Cursor Helper

Cursor Helper
=============

.. versionadded:: 5.1

The :class:`Symfony\\Component\\Console\\Cursor`
class was introduced in Symfony 5.1.

The :class:`Symfony\\Component\\Console\\Cursor` allows you to change the
cursor position in a console command. This allows you to write on any position
of the output:

.. image:: /_images/components/console/cursor.gif
:align: center


.. code-block:: php
// src/Commande/MyCommand.php
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Cursor;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class MyCommand extends Command
{
// ...
public function execute(InputInterface $input, OutputInterface $output)
{
// ...
$cursor = new Cursor($output);
// moves the cursor to a specific column and row position
$cursor->moveToPosition(7, 11);
// and write text on this position using the output
$output->write('My text');
// ...
}
}
Using the cursor
----------------

Moving the cursor
.................

There are fews methods to control moving the command cursor::

// moves the cursor 1 line up from its current position
$cursor->moveUp();

// moves the cursor 3 lines up from its current position
$cursor->moveUp(3);

// same for down
$cursor->moveDown();

// moves the cursor 1 column right from its current position
$cursor->moveRight();

// moves the cursor 3 columns right from its current position
$cursor->moveRight(3);

// same for left
$cursor->moveLeft();

// move the cursor to a specific position from its current position
$cursor->moveToPosition(7, 11);

You can get the current command's cursor position by using::

$position = $cursor->getCurrentPosition();
// $position[0] // columns (aka x coordinate)
// $position[1] // rows (aka y coordinate)

Clearing output
...............

The cursor can also clear some output on the screen::

// clears all the output from the current line
$cursor->clearLine();

// clears all the output from the current line after the current position
$cursor->clearLineAfter();

// clears all the output from the cursors' current position to the end of the screen
$cursor->clearOutput();

// clears the entire screen
$cursor->clearScreen();

You also can leverage the :method:`Symfony\\Component\\Console\\Cursor::show`
and :method:`Symfony\\Component\\Console\\Cursor::hide` methods on the cursor.
1 change: 1 addition & 0 deletions components/console/helpers/index.rst
Expand Up @@ -13,6 +13,7 @@ The Console Helpers
questionhelper
table
debug_formatter
cursor

The Console component comes with some useful helpers. These helpers contain
functions to ease some common tasks.
Expand Down
1 change: 1 addition & 0 deletions components/console/helpers/map.rst.inc
Expand Up @@ -4,3 +4,4 @@
* :doc:`/components/console/helpers/questionhelper`
* :doc:`/components/console/helpers/table`
* :doc:`/components/console/helpers/debug_formatter`
* :doc:`/components/console/helpers/cursor`
2 changes: 1 addition & 1 deletion components/console/helpers/progressbar.rst
Expand Up @@ -349,7 +349,7 @@ placeholder before displaying the progress bar::
// 0/100 -- Start

$progressBar->setMessage('Task is in progress...');
$progressBar->advance();
$progressBar->advance();
// 1/100 -- Task is in progress...

Messages can be combined with custom placeholders too. In this example, the
Expand Down
1 change: 1 addition & 0 deletions console.rst
Expand Up @@ -446,5 +446,6 @@ tools capable of helping you with different tasks:
* :doc:`/components/console/helpers/table`: displays tabular data as a table
* :doc:`/components/console/helpers/debug_formatter`: provides functions to
output debug information when running an external program
* :doc:`/components/console/helpers/cursor`: allows to manipulate the cursor in the terminal

.. _`exit status`: https://en.wikipedia.org/wiki/Exit_status

0 comments on commit fb749b5

Please sign in to comment.