Comparison

prosodyctl @ 2786:534e171036ef

prosodyctl: Gracefully handle a missing stty command, and fall back to ANSI escape sequences
author Matthew Wild <mwild1@gmail.com>
date Sun, 03 Jan 2010 03:36:40 +0000
parent 2065:c384ae8ee17a
child 2798:2702ee68727d
comparison
equal deleted inserted replaced
2785:08e0659ba1f2 2786:534e171036ef
135 print(" "..desc); 135 print(" "..desc);
136 end 136 end
137 end 137 end
138 138
139 local function getchar(n) 139 local function getchar(n)
140 os.execute("stty raw -echo"); 140 local stty_ret = os.execute("stty raw -echo 2>/dev/null");
141 local ok, char = pcall(io.read, n or 1); 141 local ok, char;
142 os.execute("stty sane"); 142 if stty_ret == 0 then
143 ok, char = pcall(io.read, n or 1);
144 os.execute("stty sane");
145 else
146 ok, char = pcall(io.read, "*l");
147 if ok then
148 char = char:sub(1, n or 1);
149 end
150 end
143 if ok then 151 if ok then
144 return char; 152 return char;
145 end 153 end
146 end 154 end
147 155
148 local function getpass() 156 local function getpass()
149 os.execute("stty -echo"); 157 local stty_ret = os.execute("stty -echo 2>/dev/null");
158 if stty_ret ~= 0 then
159 io.write("\027[08m"); -- ANSI 'hidden' text attribute
160 end
150 local ok, pass = pcall(io.read, "*l"); 161 local ok, pass = pcall(io.read, "*l");
151 os.execute("stty sane"); 162 if stty_ret == 0 then
163 os.execute("stty sane");
164 else
165 io.write("\027[00m");
166 end
152 io.write("\n"); 167 io.write("\n");
153 if ok then 168 if ok then
154 return pass; 169 return pass;
155 end 170 end
156 end 171 end