• C

How to hide cursor in a Linux/Unix console?


I am looking for a way to hide the cursor in a Linux/Unix console, or at least move the cursor to a desirable position. I don’t wish to permanently alter the cursor, just while my program runs in the terminal. I assume it’s not as easy as in the windows dos prompt but hopefully it won’t include package instalment. Thanks in advance.
Who is Participating?

Improve company productivity with a Business Account.Sign Up

MysidiaConnect With a Mentor Commented:
Err, oops
        printf("\e[?25l");        is cursor off

        printf("\e[?25h");       is cursor on
It is not really easy, but can be done using 'ncurses'. Check out http://web.cs.mun.ca/~rod/ncurses/ncurses.html ("Writing Programs with NCURSES by Eric S. Raymond and Zeyd M. Ben-Halim") and http://en.tldp.org/HOWTO/NCURSES-Programming-HOWTO/ ("NCURSES Programming HOWTO")
The shell command would be
 setterm -cursor off

now on a linux terminal... In C  (brute force method)

  fflush(stdout) ;

Those are terminal codes.
To move the cursor around, you can try other codes, i.e.
   printf("\e[5H");  change position row 5
   printf("\e[5;3H");  change position to row 5 column 3

To do this in a clean manner that will work with terminals other than the local Linux console,
using curses/ncurses is the best choice I think; however.
The Firewall Audit Checklist

Preparing for a firewall audit today is almost impossible.
AlgoSec, together with some of the largest global organizations and auditors, has created a checklist to follow when preparing for your firewall audit. Simplify risk mitigation while staying compliant all of the time!

Sjef BosmanGroupware ConsultantCommented:
Curses is meant for all types of old-fashioned terminals (VT100 etc., BeeHive, VT36). Not all of them used to implement a cursor-off/on. The escape sequences above assume a VT100 or comparable terminal. It is therefore important that you have set your Linux console to simulate a VT100.
AidmanAuthor Commented:
Mysidia, I tested your solution in the terminal by writing: echo "\e[?25l"
and it worked perfectly, however strangly it didn't work when writting it in code.

The gcc compiler returned "warning: dubious escape: \e" when I used printf("\e[?25l")
and when executed it just printed "e[?25l". Then I wrote printf("\\e[?25l")
and it compiled fine but still didn't affect the cursor just printed "\e[?25l".
I even tested calling system("echo \"\\e[?25l\"") and system("echo \"\e[?25l\"")
but that also only printed string.

Any ideas?
Sjef BosmanConnect With a Mentor Groupware ConsultantCommented:
Instead of \e, try \033
AidmanAuthor Commented:
Sorry for the delay, haven’t had good opportunities to test the solution, until now that is...
Anyways many thanks for the excellent solution!
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.