|
2 | 2 | use std::os::unix::ffi::{OsStrExt, OsStringExt}; |
3 | 3 | #[cfg(windows)] |
4 | 4 | use std::os::windows::ffi::{OsStrExt, OsStringExt}; |
5 | | -use std::{cell::Cell, ffi::{OsStr, OsString}, iter::{self, Peekable}, mem}; |
| 5 | +use std::{cell::Cell, ffi::{OsStr, OsString}, fs::OpenOptions, io::Write, iter::{self, Peekable}, mem}; |
6 | 6 |
|
7 | 7 | use yazi_shared::url::{AsUrl, Url, UrlCow}; |
8 | 8 |
|
|
81 | 81 | Some('d') | Some('D') => self.visit_dirname(it, buf), |
82 | 82 | Some('t') | Some('T') => self.visit_tab(it, buf), |
83 | 83 | Some('y') | Some('Y') => self.visit_yanked(it, buf), |
| 84 | + Some('l') | Some('L') => self.visit_line_number(it, buf), |
| 85 | + Some('c') | Some('C') => self.visit_column_number(it, buf), |
84 | 86 | Some('%') => self.visit_escape(it, buf), |
85 | 87 | Some('*') => self.visit_selected(it, buf), // TODO: remove this |
86 | 88 | Some(c) if c.is_ascii_digit() => self.visit_digit(it, buf), |
@@ -192,6 +194,36 @@ where |
192 | 194 | } |
193 | 195 | } |
194 | 196 |
|
| 197 | + fn visit_line_number(&mut self, it: &mut Iter, buf: &mut Buf) { |
| 198 | + it.next(); |
| 199 | + let idx = self.consume_digit(it); |
| 200 | + |
| 201 | + let line_str = self |
| 202 | + .src |
| 203 | + .selected(self.tab, idx) |
| 204 | + .next() |
| 205 | + .and_then(|url| url.line()) |
| 206 | + .map(|line| line.to_string()) |
| 207 | + .unwrap_or_else(|| "".to_string()); |
| 208 | + |
| 209 | + cue(buf, OsStr::new(&line_str)); |
| 210 | + } |
| 211 | + |
| 212 | + fn visit_column_number(&mut self, it: &mut Iter, buf: &mut Buf) { |
| 213 | + it.next(); |
| 214 | + let idx = self.consume_digit(it); |
| 215 | + |
| 216 | + let col_str = self |
| 217 | + .src |
| 218 | + .selected(self.tab, idx) |
| 219 | + .next() |
| 220 | + .and_then(|url| url.column()) |
| 221 | + .map(|col| col.to_string()) |
| 222 | + .unwrap_or_else(|| "".to_string()); |
| 223 | + |
| 224 | + cue(buf, OsStr::new(&col_str)); |
| 225 | + } |
| 226 | + |
195 | 227 | fn visit_escape(&mut self, it: &mut Iter, buf: &mut Buf) { buf.push(it.next().unwrap()); } |
196 | 228 |
|
197 | 229 | fn visit_unknown(&mut self, it: &mut Iter, buf: &mut Buf) { |
|
0 commit comments