# Single character input without pressing 'Enter'

**URL:** <https://www.ruby-forum.com/t/single-character-input-without-pressing-enter/69314>\
**Category:** Ruby\
**Created:** [September 20, 2006, 5:45am UTC](https://www.ruby-forum.com/t/single-character-input-without-pressing-enter/69314 "2006-09-20T05:45:45Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![unni.tallman](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/f04885/32.png) [@unni.tallman](https://www.ruby-forum.com/u/unni.tallman)\
**Post date:** [September 20, 2006, 5:45am UTC](https://www.ruby-forum.com/t/single-character-input-without-pressing-enter/69314/1 "2006-09-20T05:45:45Z")

</div>

how can i read input from stdin, char by char, i want to get the  
character as soon as it is entered, without having to press ‘Enter’  
after each character.

---

<div class="post-metadata">

**Author:** ![unni.tallman](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/f04885/32.png) [@unni.tallman](https://www.ruby-forum.com/u/unni.tallman)\
**Post date:** [September 20, 2006, 5:55am UTC](https://www.ruby-forum.com/t/single-character-input-without-pressing-enter/69314/2 "2006-09-20T05:55:46Z")

</div>

This is a simple way to achieve that. Maybe there are others

def read\_char  
system “stty raw -echo”  
STDIN.getc  
ensure  
system “stty -raw echo”  
end

good luck

---

<div class="post-metadata">

**Author:** ![unni.tallman](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/f04885/32.png) [@unni.tallman](https://www.ruby-forum.com/u/unni.tallman)\
**Post date:** [September 20, 2006, 6:33am UTC](https://www.ruby-forum.com/t/single-character-input-without-pressing-enter/69314/3 "2006-09-20T06:33:41Z")

</div>

Nguyen Huu Bach wrote:

> This is a simple way to achieve that. Maybe there are others
> 
> def read\_char

# Save previous state

old = `stty -g`

> system “stty raw -echo”  
> STDIN.getc  
> ensure  
> system “stty #{old}”  
> end
> 
> good luck

Might be better to use Termios or Curses, though.

---

<div class="post-metadata">

**Author:** ![unni.tallman](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/f04885/32.png) [@unni.tallman](https://www.ruby-forum.com/u/unni.tallman)\
**Post date:** [September 20, 2006, 2:56pm UTC](https://www.ruby-forum.com/t/single-character-input-without-pressing-enter/69314/4 "2006-09-20T14:56:42Z")

</div>

On Sep 19, 2006, at 11:33 PM, Eero S. wrote:

> > end
> > 
> > good luck
> 
> Might be better to use Termios or Curses, though.

Or use HighLine which handles all these details for you.

James Edward G. II
