Skip to content

Instantly share code, notes, and snippets.

@lancejpollard
Created September 22, 2012 07:24
Show Gist options
  • Star 14 You must be signed in to star a gist
  • Fork 5 You must be signed in to fork a gist
  • Save lancejpollard/3765464 to your computer and use it in GitHub Desktop.
Save lancejpollard/3765464 to your computer and use it in GitHub Desktop.
Get Cursor Position in Terminal with Node.js
module.exports = function(callback) {
require('child_process').exec('./cursor-position.sh', function(error, stdout, stderr) {
callback(error, JSON.parse(stdout));
});
}
#!/bin/bash
# based on a script from http://invisible-island.net/xterm/xterm.faq.html
# http://stackoverflow.com/questions/2575037/how-to-get-the-cursor-position-in-bash
exec < /dev/tty
oldstty=$(stty -g)
stty raw -echo min 0
# on my system, the following line can be replaced by the line below it
echo -en "\033[6n" > /dev/tty
# tput u7 > /dev/tty # when TERM=xterm (and relatives)
IFS=';' read -r -d R -a pos
stty $oldstty
# change from one-based to zero based so they work with: tput cup $row $col
row=$((${pos[0]:2} - 1)) # strip off the esc-[
col=$((${pos[1]} - 1))
echo \{\"row\":$row,\"column\":$col\}
var getCursorPosition = require('./cursor-position');
getCursorPosition(function(error, position) {
console.log('row:', position.row, 'column:', position.column)
});
@lancejpollard
Copy link
Author

You can also possibly calculate the cursor position by:

  • reading each line in the terminal window
  • adding a new line
  • re-reading each line and comparing

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment