Terminal control/Hiding the cursor
From Rosetta Code
Terminal control/Hiding the cursor
You are encouraged to solve this task according to the task description, using any language you may know.
You are encouraged to solve this task according to the task description, using any language you may know.
The task is to hide the cursor and show it again.
Contents |
[edit] AutoHotkey
Keep in mind that AHK is not built for the command line, so we must call the WinAPI directly.
DllCall("AllocConsole") ; Create a console if not launched from one
hConsole := DllCall("GetStdHandle", UInt, STDOUT := -11)
VarSetCapacity(cci, 8) ; CONSOLE_CURSOR_INFO structure
DllCall("GetConsoleCursorInfo", UPtr, hConsole, UPtr, &cci)
NumPut(0, cci, 4)
DllCall("SetConsoleCursorInfo", UPtr, hConsole, UPtr, &cci)
FileAppend, Cursor hidden for 3 seconds..., CONOUT$ ; Prints to stdout
Sleep 3000
NumPut(1, cci, 4)
DllCall("SetConsoleCursorInfo", UPtr, hConsole, UPtr, &cci)
FileAppend, `nCursor shown, CONOUT$
MsgBox
[edit] BASIC
'hide the cursor:
LOCATE , , 0
'wait for a keypress...
SLEEP
'show the cursor:
LOCATE , , 1
[edit] BBC BASIC
OFF : REM Hide the cursor (caret)
WAIT 400
ON : REM Show the cursor again
[edit] C
/*30th August,2012
Abhishek Ghosh
Please note that curs_set is terminal dependent.*/
#include<curses.h>
#include<stdio.h>
int
main ()
{
printf
("At the end of this line you will see the cursor, process will sleep for 5 seconds.");
napms (5000);
curs_set (0);
printf
("\nAt the end of this line you will NOT see the cursor, process will again sleep for 5 seconds.");
napms (5000);
printf ("\nGoodbye.");
return 0;
}
[edit] J
With the definitions of Terminal_control/Coloured_text#J
smoutput HIDECURSOR
usleep(4e6) NB. wait 4 seconds
smoutput SHOWCURSOR
[edit] Locomotive Basic
10 CURSOR 0: REM hide cursor
20 FOR l = 1 TO 2000: REM delay
30 NEXT l
40 CURSOR 1: REM show cursor
[edit] Mathematica
Run["tput civis"] (* Cursor hidden *)
Pause[2]
Run["tput cvvis"] (* Cursor Visible *)
[edit] Perl 6
run 'tput', 'civis';
sleep 5;
run 'tput', 'cvvis';
[edit] PicoLisp
(call "tput" "civis") # Invisible
(wait 1000)
(call "tput" "cvvis") # Visible
[edit] PureBasic
#cursorSize = 10 ;use a full sized cursor
If OpenConsole()
Print("Press any key to toggle cursor: ")
EnableGraphicalConsole(1)
height = #cursorSize
ConsoleCursor(height)
Repeat
If Inkey()
height ! #cursorSize
ConsoleCursor(height)
EndIf
ForEver
EndIf
[edit] Racket
#lang racket
(void (system "tput civis")) (sleep 2) (void (system "tput cvvis"))
[edit] Tcl
proc cursor {{state "normal"}} {
switch -- $state {
"normal" {set op "cnorm"}
"invisible" {set op "civis"}
"visible" {set op "cvvis"}
}
# Should be just: “exec tput $op” but it's not actually supported on my terminal...
exec sh -c "tput $op || true"
}
Demonstration code:
cursor normal
puts "normal cursor"
after 3000
cursor invisible
puts "invisible cursor"
after 3000
cursor visible
puts "very visible cursor"
after 3000
cursor normal
puts "back to normal"
after 1000
[edit] UNIX Shell
tput civis # Hide the cursor
sleep 5 # Sleep for 5 seconds
tput cnorm # Show the cursor
[edit] XPL0
include c:\cxpl\codes; \intrinsic 'code' declarations
proc ShowCur(On); \Turn flashing cursor on or off
int On; \true = cursor on; false = cursor off
int CpuReg;
[CpuReg:= GetReg; \access CPU registers
CpuReg(0):= $0100; \AX:= $0100
CpuReg(2):= if On then $0007 else $2000;
SoftInt($10); \Call BIOS interrupt $10
]; \ShowCur
[ShowCur(false); \turn off flashing cursor
if ChIn(1) then []; \wait for keystroke
ShowCur(true); \turn on flashing cursor
]