summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDominik MiedziƄski <dominik@mdzn.pl>2017-05-08 16:50:34 +0200
committerJoe Wilm <jwilm@users.noreply.github.com>2017-05-08 08:38:01 -0700
commit5c6b7dd244e309067141a206c2e2518580068d9e (patch)
tree5e9bf879ad3c8b5e7d994efcfa15b517b2ca52c1 /src
parent08447a220c1bcf9d2e071798da3e1edcde9366cf (diff)
Fix Device Status reports
Diffstat (limited to 'src')
-rw-r--r--src/ansi.rs4
-rw-r--r--src/term/mod.rs14
2 files changed, 14 insertions, 4 deletions
diff --git a/src/ansi.rs b/src/ansi.rs
index a3f5c2d2..a2adcf90 100644
--- a/src/ansi.rs
+++ b/src/ansi.rs
@@ -129,7 +129,7 @@ pub trait Handler {
fn identify_terminal<W: io::Write>(&mut self, &mut W) {}
// Report device status
- fn device_status<W: io::Write>(&mut self, &mut W) {}
+ fn device_status<W: io::Write>(&mut self, &mut W, usize) {}
/// Move cursor forward `cols`
fn move_forward(&mut self, Column) {}
@@ -874,7 +874,7 @@ impl<'a, H, W> vte::Perform for Performer<'a, H, W>
i += 1; // C-for expr
}
}
- 'n' => handler.device_status(writer),
+ 'n' => handler.device_status(writer, arg_or_default!(idx: 0, default: 0) as usize),
'r' => {
if private {
unhandled!();
diff --git a/src/term/mod.rs b/src/term/mod.rs
index e3510b11..0be0eb86 100644
--- a/src/term/mod.rs
+++ b/src/term/mod.rs
@@ -1240,8 +1240,18 @@ impl ansi::Handler for Term {
}
#[inline]
- fn device_status<W: io::Write>(&mut self, writer: &mut W) {
- let _ = writer.write_all(b"\x1b0n");
+ fn device_status<W: io::Write>(&mut self, writer: &mut W, arg: usize) {
+ trace!("device status: {}", arg);
+ match arg {
+ 5 => {
+ let _ = writer.write_all(b"\x1b[0n");
+ },
+ 6 => {
+ let pos = self.cursor.point;
+ let _ = write!(writer, "\x1b[{};{}R", pos.line + 1, pos.col + 1);
+ },
+ _ => debug!("unknown device status query: {}", arg),
+ };
}
#[inline]