mirror of
https://github.com/veeso/termscp.git
synced 2026-09-29 15:31:18 -07:00
feat: ALT+A to deselect all files (#263)
This commit is contained in:
@@ -41,6 +41,7 @@
|
|||||||
Released on ??
|
Released on ??
|
||||||
|
|
||||||
- [Issue 241](https://github.com/veeso/termscp/issues/241): Jump to next entry after select
|
- [Issue 241](https://github.com/veeso/termscp/issues/241): Jump to next entry after select
|
||||||
|
- [Issue 255](https://github.com/veeso/termscp/issues/255): New keybindings `Ctrl + Shift + A` to deselect all files
|
||||||
- [Issue 257](https://github.com/veeso/termscp/issues/257): CLI remote args cannot handle '@' in the username
|
- [Issue 257](https://github.com/veeso/termscp/issues/257): CLI remote args cannot handle '@' in the username
|
||||||
|
|
||||||
## 0.13.0
|
## 0.13.0
|
||||||
|
|||||||
@@ -244,6 +244,7 @@ In order to change panel you need to type `<LEFT>` to move the remote explorer p
|
|||||||
| `<Y>` | Toggle synchronized browsing | sYnc |
|
| `<Y>` | Toggle synchronized browsing | sYnc |
|
||||||
| `<Z>` | Change file mode | |
|
| `<Z>` | Change file mode | |
|
||||||
| `<CTRL+A>` | Select all files | |
|
| `<CTRL+A>` | Select all files | |
|
||||||
|
| `<ALT+A>` | Deselect all files | |
|
||||||
| `<CTRL+C>` | Abort file transfer process | |
|
| `<CTRL+C>` | Abort file transfer process | |
|
||||||
| `<CTRL+T>` | Show all synchronized paths | Track |
|
| `<CTRL+T>` | Show all synchronized paths | Track |
|
||||||
|
|
||||||
|
|||||||
@@ -245,6 +245,7 @@ Para cambiar de panel, debe escribir `<LEFT>` para mover el panel del explorador
|
|||||||
| `<Y>` | Alternar navegación sincronizada | sYnc |
|
| `<Y>` | Alternar navegación sincronizada | sYnc |
|
||||||
| `<Z>` | Cambiar ppermisos de archivo | |
|
| `<Z>` | Cambiar ppermisos de archivo | |
|
||||||
| `<CTRL+A>` | Seleccionar todos los archivos | |
|
| `<CTRL+A>` | Seleccionar todos los archivos | |
|
||||||
|
| `<ALT+A>` | Deseleccionar todos los archivos | |
|
||||||
| `<CTRL+C>` | Abortar el proceso de transferencia de archivos | |
|
| `<CTRL+C>` | Abortar el proceso de transferencia de archivos | |
|
||||||
| `<CTRL+T>` | Mostrar todas las rutas sincronizadas | Track |
|
| `<CTRL+T>` | Mostrar todas las rutas sincronizadas | Track |
|
||||||
|
|
||||||
|
|||||||
@@ -244,6 +244,7 @@ Pour changer de panneau, vous devez taper `<LEFT>` pour déplacer le panneau de
|
|||||||
| `<Y>` | Basculer la navigation synchronisée | sYnc |
|
| `<Y>` | Basculer la navigation synchronisée | sYnc |
|
||||||
| `<Z>` | Changer permissions de fichier | |
|
| `<Z>` | Changer permissions de fichier | |
|
||||||
| `<CTRL+A>` | Sélectionner tous les fichiers | |
|
| `<CTRL+A>` | Sélectionner tous les fichiers | |
|
||||||
|
| `<ALT+A>` | Desélectionner tous les fichiers | |
|
||||||
| `<CTRL+C>` | Abandonner le processus de transfert de fichiers | |
|
| `<CTRL+C>` | Abandonner le processus de transfert de fichiers | |
|
||||||
| `<CTRL+T>` | Afficher tous les chemins synchronisés | Track |
|
| `<CTRL+T>` | Afficher tous les chemins synchronisés | Track |
|
||||||
|
|
||||||
|
|||||||
@@ -240,6 +240,7 @@ Per cambiare pannello ti puoi muovere con le frecce, `<LEFT>` per andare sul pan
|
|||||||
| `<Y>` | Abilita/disabilita Sync-Browsing | sYnc |
|
| `<Y>` | Abilita/disabilita Sync-Browsing | sYnc |
|
||||||
| `<Z>` | Modifica permessi file | |
|
| `<Z>` | Modifica permessi file | |
|
||||||
| `<CTRL+A>` | Seleziona tutti i file | |
|
| `<CTRL+A>` | Seleziona tutti i file | |
|
||||||
|
| `<ALT+A>` | Deseleziona tutti i file | |
|
||||||
| `<CTRL+C>` | Annulla trasferimento file | |
|
| `<CTRL+C>` | Annulla trasferimento file | |
|
||||||
| `<CTRL+T>` | Visualizza tutti i percorsi sincronizzati | Track |
|
| `<CTRL+T>` | Visualizza tutti i percorsi sincronizzati | Track |
|
||||||
|
|
||||||
|
|||||||
@@ -256,6 +256,7 @@ In order to change panel you need to type `<LEFT>` to move the remote explorer p
|
|||||||
| `<Y>` | Toggle synchronized browsing | sYnc |
|
| `<Y>` | Toggle synchronized browsing | sYnc |
|
||||||
| `<Z>` | Change file mode | |
|
| `<Z>` | Change file mode | |
|
||||||
| `<CTRL+A>` | Select all files | |
|
| `<CTRL+A>` | Select all files | |
|
||||||
|
| `<ALT+A>` | Deselect all files | |
|
||||||
| `<CTRL+C>` | Abort file transfer process | |
|
| `<CTRL+C>` | Abort file transfer process | |
|
||||||
| `<CTRL+T>` | Show all synchronized paths | Track |
|
| `<CTRL+T>` | Show all synchronized paths | Track |
|
||||||
|
|
||||||
|
|||||||
+3
-2
@@ -15,13 +15,13 @@
|
|||||||
- [Explorador de Arquivos 📂](#explorador-de-arquivos-)
|
- [Explorador de Arquivos 📂](#explorador-de-arquivos-)
|
||||||
- [Atalhos de Teclado ⌨](#atalhos-de-teclado-)
|
- [Atalhos de Teclado ⌨](#atalhos-de-teclado-)
|
||||||
- [Trabalhar com Vários Arquivos 🥷](#trabalhar-com-vários-arquivos-)
|
- [Trabalhar com Vários Arquivos 🥷](#trabalhar-com-vários-arquivos-)
|
||||||
- [Navegação Sincronizada ⏲️](#navegação-sincronizada-)
|
- [Navegação Sincronizada ⏲️](#navegação-sincronizada-️)
|
||||||
- [Abrir e Abrir Com 🚪](#abrir-e-abrir-com-)
|
- [Abrir e Abrir Com 🚪](#abrir-e-abrir-com-)
|
||||||
- [Favoritos ⭐](#favoritos-)
|
- [Favoritos ⭐](#favoritos-)
|
||||||
- [Minhas Senhas São Seguras? 😈](#minhas-senhas-são-seguras-)
|
- [Minhas Senhas São Seguras? 😈](#minhas-senhas-são-seguras-)
|
||||||
- [Keyring do Linux](#keyring-do-linux)
|
- [Keyring do Linux](#keyring-do-linux)
|
||||||
- [Configuração do KeepassXC para o termscp](#configuração-do-keepassxc-para-o-termscp)
|
- [Configuração do KeepassXC para o termscp](#configuração-do-keepassxc-para-o-termscp)
|
||||||
- [Configuração ⚙️](#configuração-)
|
- [Configuração ⚙️](#configuração-️)
|
||||||
- [Armazenamento de Chave SSH 🔐](#armazenamento-de-chave-ssh-)
|
- [Armazenamento de Chave SSH 🔐](#armazenamento-de-chave-ssh-)
|
||||||
- [Formato do Explorador de Arquivos](#formato-do-explorador-de-arquivos)
|
- [Formato do Explorador de Arquivos](#formato-do-explorador-de-arquivos)
|
||||||
- [Temas 🎨](#temas-)
|
- [Temas 🎨](#temas-)
|
||||||
@@ -258,6 +258,7 @@ Para trocar de painel, você precisa pressionar `<LEFT>` para mover para o paine
|
|||||||
| `<Y>` | Alternar navegação sincronizada | Sincronizar |
|
| `<Y>` | Alternar navegação sincronizada | Sincronizar |
|
||||||
| `<Z>` | Alterar modo de arquivo | |
|
| `<Z>` | Alterar modo de arquivo | |
|
||||||
| `<CTRL+A>` | Selecionar todos os arquivos | |
|
| `<CTRL+A>` | Selecionar todos os arquivos | |
|
||||||
|
| `<ALT+A>` | Deselecionar todos os arquivos | |
|
||||||
| `<CTRL+C>` | Abortir processo de transferência de arquivo | |
|
| `<CTRL+C>` | Abortir processo de transferência de arquivo | |
|
||||||
| `<CTRL+T>` | Mostrar todos os caminhos sincronizados | Track |
|
| `<CTRL+T>` | Mostrar todos os caminhos sincronizados | Track |
|
||||||
|
|
||||||
|
|||||||
@@ -240,6 +240,7 @@ termscp中的文件资源管理器是指你与远程建立连接后可以看到
|
|||||||
| `<Y>` | 是否开启同步浏览 | sYnc |
|
| `<Y>` | 是否开启同步浏览 | sYnc |
|
||||||
| `<Z>` | 更改文件权限 | |
|
| `<Z>` | 更改文件权限 | |
|
||||||
| `<CTRL+A>` | 选中所有文件 | |
|
| `<CTRL+A>` | 选中所有文件 | |
|
||||||
|
| `<ALT+A>` | 取消选择所有文件 | |
|
||||||
| `<CTRL+C>` | 终止文件传输 | |
|
| `<CTRL+C>` | 终止文件传输 | |
|
||||||
| `<CTRL+T>` | 显示所有同步路径 | Track |
|
| `<CTRL+T>` | 显示所有同步路径 | Track |
|
||||||
|
|
||||||
|
|||||||
@@ -796,6 +796,9 @@ impl KeybindingsPopup {
|
|||||||
.add_col(TextSpan::new("<CTRL+A>").bold().fg(key_color))
|
.add_col(TextSpan::new("<CTRL+A>").bold().fg(key_color))
|
||||||
.add_col(TextSpan::from(" Select all files"))
|
.add_col(TextSpan::from(" Select all files"))
|
||||||
.add_row()
|
.add_row()
|
||||||
|
.add_col(TextSpan::new("<ALT+A>").bold().fg(key_color))
|
||||||
|
.add_col(TextSpan::from(" Deselect all files"))
|
||||||
|
.add_row()
|
||||||
.add_col(TextSpan::new("<CTRL+C>").bold().fg(key_color))
|
.add_col(TextSpan::new("<CTRL+C>").bold().fg(key_color))
|
||||||
.add_col(TextSpan::from(" Interrupt file transfer"))
|
.add_col(TextSpan::from(" Interrupt file transfer"))
|
||||||
.add_row()
|
.add_row()
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ use tuirealm::tui::widgets::{List as TuiList, ListItem, ListState};
|
|||||||
use tuirealm::{MockComponent, Props, State, StateValue};
|
use tuirealm::{MockComponent, Props, State, StateValue};
|
||||||
|
|
||||||
pub const FILE_LIST_CMD_SELECT_ALL: &str = "A";
|
pub const FILE_LIST_CMD_SELECT_ALL: &str = "A";
|
||||||
|
pub const FILE_LIST_CMD_DESELECT_ALL: &str = "D";
|
||||||
|
|
||||||
/// OwnStates contains states for this component
|
/// OwnStates contains states for this component
|
||||||
#[derive(Clone, Default)]
|
#[derive(Clone, Default)]
|
||||||
@@ -113,6 +114,11 @@ impl OwnStates {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Select all files
|
||||||
|
pub fn deselect_all(&mut self) {
|
||||||
|
self.selected.clear();
|
||||||
|
}
|
||||||
|
|
||||||
/// Select provided index if not selected yet
|
/// Select provided index if not selected yet
|
||||||
fn select(&mut self, entry: usize) {
|
fn select(&mut self, entry: usize) {
|
||||||
if !self.is_selected(entry) {
|
if !self.is_selected(entry) {
|
||||||
@@ -332,6 +338,10 @@ impl MockComponent for FileList {
|
|||||||
self.states.select_all();
|
self.states.select_all();
|
||||||
CmdResult::None
|
CmdResult::None
|
||||||
}
|
}
|
||||||
|
Cmd::Custom(FILE_LIST_CMD_DESELECT_ALL) => {
|
||||||
|
self.states.deselect_all();
|
||||||
|
CmdResult::None
|
||||||
|
}
|
||||||
Cmd::Toggle => {
|
Cmd::Toggle => {
|
||||||
self.states.toggle_file(self.states.list_index());
|
self.states.toggle_file(self.states.list_index());
|
||||||
CmdResult::None
|
CmdResult::None
|
||||||
|
|||||||
@@ -73,6 +73,13 @@ impl Component<Msg, NoUserEvent> for ExplorerFind {
|
|||||||
let _ = self.perform(Cmd::Custom(file_list::FILE_LIST_CMD_SELECT_ALL));
|
let _ = self.perform(Cmd::Custom(file_list::FILE_LIST_CMD_SELECT_ALL));
|
||||||
Some(Msg::None)
|
Some(Msg::None)
|
||||||
}
|
}
|
||||||
|
Event::Keyboard(KeyEvent {
|
||||||
|
code: Key::Char('a'),
|
||||||
|
modifiers: KeyModifiers::ALT,
|
||||||
|
}) => {
|
||||||
|
let _ = self.perform(Cmd::Custom(file_list::FILE_LIST_CMD_DESELECT_ALL));
|
||||||
|
Some(Msg::None)
|
||||||
|
}
|
||||||
Event::Keyboard(KeyEvent {
|
Event::Keyboard(KeyEvent {
|
||||||
code: Key::Char('m'),
|
code: Key::Char('m'),
|
||||||
modifiers: KeyModifiers::NONE,
|
modifiers: KeyModifiers::NONE,
|
||||||
@@ -198,6 +205,13 @@ impl Component<Msg, NoUserEvent> for ExplorerLocal {
|
|||||||
let _ = self.perform(Cmd::Custom(file_list::FILE_LIST_CMD_SELECT_ALL));
|
let _ = self.perform(Cmd::Custom(file_list::FILE_LIST_CMD_SELECT_ALL));
|
||||||
Some(Msg::None)
|
Some(Msg::None)
|
||||||
}
|
}
|
||||||
|
Event::Keyboard(KeyEvent {
|
||||||
|
code: Key::Char('a'),
|
||||||
|
modifiers: KeyModifiers::ALT,
|
||||||
|
}) => {
|
||||||
|
let _ = self.perform(Cmd::Custom(file_list::FILE_LIST_CMD_DESELECT_ALL));
|
||||||
|
Some(Msg::None)
|
||||||
|
}
|
||||||
Event::Keyboard(KeyEvent {
|
Event::Keyboard(KeyEvent {
|
||||||
code: Key::Char('m'),
|
code: Key::Char('m'),
|
||||||
modifiers: KeyModifiers::NONE,
|
modifiers: KeyModifiers::NONE,
|
||||||
@@ -383,6 +397,13 @@ impl Component<Msg, NoUserEvent> for ExplorerRemote {
|
|||||||
let _ = self.perform(Cmd::Custom(file_list::FILE_LIST_CMD_SELECT_ALL));
|
let _ = self.perform(Cmd::Custom(file_list::FILE_LIST_CMD_SELECT_ALL));
|
||||||
Some(Msg::None)
|
Some(Msg::None)
|
||||||
}
|
}
|
||||||
|
Event::Keyboard(KeyEvent {
|
||||||
|
code: Key::Char('a'),
|
||||||
|
modifiers: KeyModifiers::ALT,
|
||||||
|
}) => {
|
||||||
|
let _ = self.perform(Cmd::Custom(file_list::FILE_LIST_CMD_DESELECT_ALL));
|
||||||
|
Some(Msg::None)
|
||||||
|
}
|
||||||
Event::Keyboard(KeyEvent {
|
Event::Keyboard(KeyEvent {
|
||||||
code: Key::Char('m'),
|
code: Key::Char('m'),
|
||||||
modifiers: KeyModifiers::NONE,
|
modifiers: KeyModifiers::NONE,
|
||||||
|
|||||||
Reference in New Issue
Block a user