[Okta Webinar] Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 8910
  • Last Modified:

How to hide cursor in a Linux/Unix console?

Hi,

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.
0
Aidman
Asked:
Aidman
  • 2
  • 2
  • 2
  • +1
2 Solutions
 
jkrCommented:
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")
0
 
MysidiaCommented:
The shell command would be
 setterm -cursor off

now on a linux terminal... In C  (brute force method)
  printf("\e[?25l");
  fflush(stdout);

  printf("\e[?25h");
  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.
0
 
MysidiaCommented:
Err, oops
        printf("\e[?25l");        is cursor off

        printf("\e[?25h");       is cursor on
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
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.
0
 
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?
0
 
Sjef BosmanGroupware ConsultantCommented:
Instead of \e, try \033
0
 
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!
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

  • 2
  • 2
  • 2
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now