From 3384eda8b73a1b8f78f2c7e2d23b76585dd4c34e Mon Sep 17 00:00:00 2001 From: alonginwind <100897495+alonginwind@users.noreply.github.com> Date: Sun, 28 Dec 2025 15:41:25 +0800 Subject: [PATCH] feat(terminal): add two-row floating keyboard buttons for common commands (mobile only) (#13876) * feat(terminal): add two-row floating keyboard buttons for common commands (mobile only) * Fix missing newline at end of pl.rs Add missing newline at the end of the file. --- flutter/lib/consts.dart | 1 + flutter/lib/mobile/pages/settings_page.dart | 20 ++ flutter/lib/mobile/pages/terminal_page.dart | 205 +++++++++++++++++--- flutter/lib/models/terminal_model.dart | 4 + src/lang/ar.rs | 1 + src/lang/be.rs | 1 + src/lang/bg.rs | 1 + src/lang/ca.rs | 1 + src/lang/cn.rs | 1 + src/lang/cs.rs | 1 + src/lang/da.rs | 1 + src/lang/de.rs | 1 + src/lang/el.rs | 1 + src/lang/eo.rs | 1 + src/lang/es.rs | 1 + src/lang/et.rs | 1 + src/lang/eu.rs | 1 + src/lang/fa.rs | 1 + src/lang/fi.rs | 1 + src/lang/fr.rs | 1 + src/lang/ge.rs | 1 + src/lang/he.rs | 1 + src/lang/hr.rs | 1 + src/lang/hu.rs | 1 + src/lang/id.rs | 1 + src/lang/it.rs | 1 + src/lang/ja.rs | 1 + src/lang/ko.rs | 1 + src/lang/kz.rs | 1 + src/lang/lt.rs | 1 + src/lang/lv.rs | 1 + src/lang/nb.rs | 1 + src/lang/nl.rs | 1 + src/lang/pl.rs | 1 + src/lang/pt_PT.rs | 1 + src/lang/ptbr.rs | 1 + src/lang/ro.rs | 1 + src/lang/ru.rs | 1 + src/lang/sc.rs | 1 + src/lang/sk.rs | 1 + src/lang/sl.rs | 1 + src/lang/sq.rs | 1 + src/lang/sr.rs | 1 + src/lang/sv.rs | 1 + src/lang/ta.rs | 1 + src/lang/template.rs | 1 + src/lang/th.rs | 1 + src/lang/tr.rs | 1 + src/lang/tw.rs | 1 + src/lang/uk.rs | 1 + src/lang/vi.rs | 1 + 51 files changed, 247 insertions(+), 30 deletions(-) diff --git a/flutter/lib/consts.dart b/flutter/lib/consts.dart index 94a0aaac5..7bcadd658 100644 --- a/flutter/lib/consts.dart +++ b/flutter/lib/consts.dart @@ -163,6 +163,7 @@ const String kOptionShowVirtualMouse = "show-virtual-mouse"; const String kOptionVirtualMouseScale = "virtual-mouse-scale"; const String kOptionShowVirtualJoystick = "show-virtual-joystick"; const String kOptionAllowAskForNoteAtEndOfConnection = "allow-ask-for-note"; +const String kOptionEnableShowTerminalExtraKeys = "enable-show-terminal-extra-keys"; // network options const String kOptionAllowWebSocket = "allow-websocket"; diff --git a/flutter/lib/mobile/pages/settings_page.dart b/flutter/lib/mobile/pages/settings_page.dart index 69a9d6a44..afe8ae446 100644 --- a/flutter/lib/mobile/pages/settings_page.dart +++ b/flutter/lib/mobile/pages/settings_page.dart @@ -71,6 +71,7 @@ class _SettingsState extends State with WidgetsBindingObserver { var _ignoreBatteryOpt = false; var _enableStartOnBoot = false; var _checkUpdateOnStartup = false; + var _showTerminalExtraKeys = false; var _floatingWindowDisabled = false; var _keepScreenOn = KeepScreenOn.duringControlled; // relay on floating window var _enableAbr = false; @@ -139,6 +140,8 @@ class _SettingsState extends State with WidgetsBindingObserver { _enableIpv6Punch = mainGetLocalBoolOptionSync(kOptionEnableIpv6Punch); _allowAskForNoteAtEndOfConnection = mainGetLocalBoolOptionSync(kOptionAllowAskForNoteAtEndOfConnection); + _showTerminalExtraKeys = + mainGetLocalBoolOptionSync(kOptionEnableShowTerminalExtraKeys); } @override @@ -602,6 +605,23 @@ class _SettingsState extends State with WidgetsBindingObserver { ); } + enhancementsTiles.add( + SettingsTile.switchTile( + initialValue: _showTerminalExtraKeys, + title: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ + Text(translate('Show terminal extra keys')), + ]), + onToggle: (bool v) async { + await mainSetLocalBoolOption(kOptionEnableShowTerminalExtraKeys, v); + final newValue = + mainGetLocalBoolOptionSync(kOptionEnableShowTerminalExtraKeys); + setState(() { + _showTerminalExtraKeys = newValue; + }); + }, + ), + ); + onFloatingWindowChanged(bool toValue) async { if (toValue) { if (!await AndroidPermissionManager.check(kSystemAlertWindow)) { diff --git a/flutter/lib/mobile/pages/terminal_page.dart b/flutter/lib/mobile/pages/terminal_page.dart index 35dcb04bd..a0064f068 100644 --- a/flutter/lib/mobile/pages/terminal_page.dart +++ b/flutter/lib/mobile/pages/terminal_page.dart @@ -9,6 +9,7 @@ import 'package:flutter_hbb/models/terminal_model.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:xterm/xterm.dart'; import '../../desktop/pages/terminal_connection_manager.dart'; +import '../../consts.dart'; class TerminalPage extends StatefulWidget { const TerminalPage({ @@ -37,6 +38,9 @@ class _TerminalPageState extends State double? _cellHeight; double _sysKeyboardHeight = 0; Timer? _keyboardDebounce; + final GlobalKey _keyboardKey = GlobalKey(); + double _keyboardHeight = 0; + late bool _showTerminalExtraKeys; // For web only. // 'monospace' does not work on web, use Google Fonts, `??` is only for null safety. @@ -75,10 +79,15 @@ class _TerminalPageState extends State // Register this terminal model with FFI for event routing _ffi.registerTerminalModel(widget.terminalId, _terminalModel); + _showTerminalExtraKeys = mainGetLocalBoolOptionSync(kOptionEnableShowTerminalExtraKeys); // Initialize terminal connection WidgetsBinding.instance.addPostFrameCallback((_) { _ffi.dialogManager .showLoading(translate('Connecting...'), onCancel: closeConnection); + + if (_showTerminalExtraKeys) { + _updateKeyboardHeight(); + } }); _ffi.ffiModel.updateEventListener(_ffi.sessionId, widget.id); } @@ -107,15 +116,22 @@ class _TerminalPageState extends State }); } + void _updateKeyboardHeight() { + if (_keyboardKey.currentContext != null) { + final renderBox = _keyboardKey.currentContext!.findRenderObject() as RenderBox; + _keyboardHeight = renderBox.size.height; + } + } + EdgeInsets _calculatePadding(double heightPx) { if (_cellHeight == null) { return const EdgeInsets.symmetric(horizontal: 5.0, vertical: 2.0); } - final realHeight = heightPx - _sysKeyboardHeight; + final realHeight = heightPx - _sysKeyboardHeight - _keyboardHeight; final rows = (realHeight / _cellHeight!).floor(); final extraSpace = realHeight - rows * _cellHeight!; final topBottom = max(0.0, extraSpace / 2.0); - return EdgeInsets.only(left: 5.0, right: 5.0, top: topBottom, bottom: topBottom + _sysKeyboardHeight); + return EdgeInsets.only(left: 5.0, right: 5.0, top: topBottom, bottom: topBottom + _sysKeyboardHeight + _keyboardHeight); } @override @@ -134,39 +150,168 @@ class _TerminalPageState extends State return Scaffold( resizeToAvoidBottomInset: false, // Disable automatic layout adjustment; manually control UI updates to prevent flickering when the keyboard shows/hides backgroundColor: Theme.of(context).scaffoldBackgroundColor, - body: SafeArea( - top: true, - child: LayoutBuilder( - builder: (context, constraints) { - final heightPx = constraints.maxHeight; - return TerminalView( - _terminalModel.terminal, - controller: _terminalModel.terminalController, - autofocus: true, - textStyle: _getTerminalStyle(), - backgroundOpacity: 0.7, - padding: _calculatePadding(heightPx), - onSecondaryTapDown: (details, offset) async { - final selection = _terminalModel.terminalController.selection; - if (selection != null) { - final text = _terminalModel.terminal.buffer.getText(selection); - _terminalModel.terminalController.clearSelection(); - await Clipboard.setData(ClipboardData(text: text)); - } else { - final data = await Clipboard.getData('text/plain'); - final text = data?.text; - if (text != null) { - _terminalModel.terminal.paste(text); - } - } - }, - ); - }, + body: Stack( + children: [ + Positioned.fill( + child: SafeArea( + top: true, + child: LayoutBuilder( + builder: (context, constraints) { + final heightPx = constraints.maxHeight; + return TerminalView( + _terminalModel.terminal, + controller: _terminalModel.terminalController, + autofocus: true, + textStyle: _getTerminalStyle(), + backgroundOpacity: 0.7, + padding: _calculatePadding(heightPx), + onSecondaryTapDown: (details, offset) async { + final selection = _terminalModel.terminalController.selection; + if (selection != null) { + final text = _terminalModel.terminal.buffer.getText(selection); + _terminalModel.terminalController.clearSelection(); + await Clipboard.setData(ClipboardData(text: text)); + } else { + final data = await Clipboard.getData('text/plain'); + final text = data?.text; + if (text != null) { + _terminalModel.terminal.paste(text); + } + } + }, + ); + }, + ), + ), + ), + if (_showTerminalExtraKeys) _buildFloatingKeyboard(), + ], + ), + ); + } + + Widget _buildFloatingKeyboard() { + return AnimatedPositioned( + duration: const Duration(milliseconds: 200), + left: 0, + right: 0, + bottom: _sysKeyboardHeight, + child: Container( + key: _keyboardKey, + color: Theme.of(context).scaffoldBackgroundColor, + padding: EdgeInsets.zero, + child: Column( + mainAxisSize: MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + _buildKeyButton('Esc'), + const SizedBox(width: 2), + _buildKeyButton('/'), + const SizedBox(width: 2), + _buildKeyButton('|'), + const SizedBox(width: 2), + _buildKeyButton('Home'), + const SizedBox(width: 2), + _buildKeyButton('↑'), + const SizedBox(width: 2), + _buildKeyButton('End'), + const SizedBox(width: 2), + _buildKeyButton('PgUp'), + ], + ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + _buildKeyButton('Tab'), + const SizedBox(width: 2), + _buildKeyButton('Ctrl+C'), + const SizedBox(width: 2), + _buildKeyButton('~'), + const SizedBox(width: 2), + _buildKeyButton('←'), + const SizedBox(width: 2), + _buildKeyButton('↓'), + const SizedBox(width: 2), + _buildKeyButton('→'), + const SizedBox(width: 2), + _buildKeyButton('PgDn'), + ], + ), + ], ), ), ); } + Widget _buildKeyButton(String label) { + return ElevatedButton( + onPressed: () { + _sendKeyToTerminal(label); + }, + child: Text(label), + style: ElevatedButton.styleFrom( + minimumSize: const Size(48, 32), + padding: EdgeInsets.zero, + textStyle: const TextStyle(fontSize: 12), + backgroundColor: Theme.of(context).colorScheme.surfaceVariant, + foregroundColor: Theme.of(context).colorScheme.onSurfaceVariant, + ), + ); + } + + void _sendKeyToTerminal(String key) { + String? send; + + switch (key) { + case 'Esc': + send = '\x1B'; + break; + case 'Tab': + send = '\t'; + break; + case 'Ctrl+C': + send = '\x03'; + break; + + case '↑': + send = '\x1B[A'; + break; + case '↓': + send = '\x1B[B'; + break; + case '→': + send = '\x1B[C'; + break; + case '←': + send = '\x1B[D'; + break; + + case 'Home': + send = '\x1B[H'; + break; + case 'End': + send = '\x1B[F'; + break; + case 'PgUp': + send = '\x1B[5~'; + break; + case 'PgDn': + send = '\x1B[6~'; + break; + + default: + send = key; + break; + } + + if (send != null) { + _terminalModel.sendVirtualKey(send); + } + } + // https://github.com/TerminalStudio/xterm.dart/issues/42#issuecomment-877495472 // https://github.com/TerminalStudio/xterm.dart/issues/198#issuecomment-2526548458 TerminalStyle _getTerminalStyle() { diff --git a/flutter/lib/models/terminal_model.dart b/flutter/lib/models/terminal_model.dart index b32be65f1..ca4f2c11d 100644 --- a/flutter/lib/models/terminal_model.dart +++ b/flutter/lib/models/terminal_model.dart @@ -146,6 +146,10 @@ class TerminalModel with ChangeNotifier { } } + Future sendVirtualKey(String data) async { + return _handleInput(data); + } + Future closeTerminal() async { if (_terminalOpened) { try { diff --git a/src/lang/ar.rs b/src/lang/ar.rs index 3e5b9ce2d..93ba2987e 100644 --- a/src/lang/ar.rs +++ b/src/lang/ar.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", "هذه الميزة غير مدعومة من قبل خادمك"), ("input note here", "أدخل الملاحظة هنا"), ("note-at-conn-end-tip", "سيتم عرض هذه الملاحظة عند نهاية الاتصال"), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/be.rs b/src/lang/be.rs index b7d9bb070..03e833701 100644 --- a/src/lang/be.rs +++ b/src/lang/be.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", ""), ("input note here", ""), ("note-at-conn-end-tip", ""), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/bg.rs b/src/lang/bg.rs index 714a3e0e3..d88f3745f 100644 --- a/src/lang/bg.rs +++ b/src/lang/bg.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", ""), ("input note here", ""), ("note-at-conn-end-tip", ""), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ca.rs b/src/lang/ca.rs index 794bd5908..60ccbcbd8 100644 --- a/src/lang/ca.rs +++ b/src/lang/ca.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", ""), ("input note here", ""), ("note-at-conn-end-tip", ""), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/cn.rs b/src/lang/cn.rs index db03e2fbc..a125a9f41 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", "注意:RustDesk 开源服务器 (OSS server) 不包含此功能。"), ("input note here", "输入备注"), ("note-at-conn-end-tip", "在连接结束时请求备注"), + ("Show terminal extra keys", "显示终端扩展键"), ].iter().cloned().collect(); } diff --git a/src/lang/cs.rs b/src/lang/cs.rs index ae5b4ef4b..7600f5f54 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", ""), ("input note here", ""), ("note-at-conn-end-tip", ""), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/da.rs b/src/lang/da.rs index a812698eb..2898629fe 100644 --- a/src/lang/da.rs +++ b/src/lang/da.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", ""), ("input note here", ""), ("note-at-conn-end-tip", ""), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/de.rs b/src/lang/de.rs index caa4c5245..f734d49b9 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", "HINWEIS: RustDesk Server OSS enthält diese Funktion nicht."), ("input note here", "Hier eine Notiz eingeben"), ("note-at-conn-end-tip", "Am Ende der Verbindung um eine Notiz bitten."), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/el.rs b/src/lang/el.rs index 0d74e0b45..fb51a8001 100644 --- a/src/lang/el.rs +++ b/src/lang/el.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", ""), ("input note here", ""), ("note-at-conn-end-tip", ""), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/eo.rs b/src/lang/eo.rs index d817e67f5..bc9fedfb9 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", ""), ("input note here", ""), ("note-at-conn-end-tip", ""), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/es.rs b/src/lang/es.rs index b8099e1a1..7a402cd9a 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", ""), ("input note here", ""), ("note-at-conn-end-tip", ""), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/et.rs b/src/lang/et.rs index 29b1a1a3a..0dbfde469 100644 --- a/src/lang/et.rs +++ b/src/lang/et.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", ""), ("input note here", ""), ("note-at-conn-end-tip", ""), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/eu.rs b/src/lang/eu.rs index 860faf43c..f7f7b02ca 100644 --- a/src/lang/eu.rs +++ b/src/lang/eu.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", ""), ("input note here", ""), ("note-at-conn-end-tip", ""), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fa.rs b/src/lang/fa.rs index 0b5a3eafa..1bca741d7 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", "توجه: سرور RustDesk OSS این ویژگی را ندارد."), ("input note here", "یادداشت را اینجا وارد کنید"), ("note-at-conn-end-tip", "در پایان اتصال، یادداشت بخواهید"), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fi.rs b/src/lang/fi.rs index f76bed62c..e97263258 100644 --- a/src/lang/fi.rs +++ b/src/lang/fi.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", ""), ("input note here", ""), ("note-at-conn-end-tip", ""), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fr.rs b/src/lang/fr.rs index 5b762df38..999288bc8 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", "Note : Cette fonctionnalité n’est pas disponible sous la version open-source du serveur RustDesk."), ("input note here", "saisir la note ici"), ("note-at-conn-end-tip", "Proposer d’écrire une note une fois la connexion terminée"), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ge.rs b/src/lang/ge.rs index 957cfa5a8..c104a3a34 100644 --- a/src/lang/ge.rs +++ b/src/lang/ge.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", ""), ("input note here", ""), ("note-at-conn-end-tip", ""), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/he.rs b/src/lang/he.rs index 05732c30f..39a3742c2 100644 --- a/src/lang/he.rs +++ b/src/lang/he.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", ""), ("input note here", ""), ("note-at-conn-end-tip", ""), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/hr.rs b/src/lang/hr.rs index 3487a1fc5..d030f482d 100644 --- a/src/lang/hr.rs +++ b/src/lang/hr.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", ""), ("input note here", ""), ("note-at-conn-end-tip", ""), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/hu.rs b/src/lang/hu.rs index 8ee281470..be1a5ee14 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", "MEGJEGYZÉS: Az OSS RustDesk kiszolgáló nem támogatja ezt a funkciót."), ("input note here", "Megjegyzés bevitele"), ("note-at-conn-end-tip", "Megjegyzés a kapcsolat végén"), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/id.rs b/src/lang/id.rs index b2ebe48be..ce2b34a6e 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", ""), ("input note here", ""), ("note-at-conn-end-tip", ""), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/it.rs b/src/lang/it.rs index e4867016c..aad7e009b 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", "NOTA: il sistema operativo del server RustDesk non include questa funzionalità."), ("input note here", "Inserisci nota qui"), ("note-at-conn-end-tip", "Visualizza nota alla fine della connessione"), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ja.rs b/src/lang/ja.rs index 97933fc15..ea6ce5a1f 100644 --- a/src/lang/ja.rs +++ b/src/lang/ja.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", ""), ("input note here", ""), ("note-at-conn-end-tip", ""), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ko.rs b/src/lang/ko.rs index 90b51b7af..f8f7b2707 100644 --- a/src/lang/ko.rs +++ b/src/lang/ko.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", "참고: RustDesk 서버 OSS에는 이 기능이 포함되어 있지 않습니다."), ("input note here", "여기에 노트 입력"), ("note-at-conn-end-tip", "연결이 끝날 때 메모 요청"), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/kz.rs b/src/lang/kz.rs index 62d7345b3..e3eb5b44b 100644 --- a/src/lang/kz.rs +++ b/src/lang/kz.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", ""), ("input note here", ""), ("note-at-conn-end-tip", ""), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/lt.rs b/src/lang/lt.rs index d9dac635b..a821391cf 100644 --- a/src/lang/lt.rs +++ b/src/lang/lt.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", ""), ("input note here", ""), ("note-at-conn-end-tip", ""), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/lv.rs b/src/lang/lv.rs index 406d5b3b9..79b26c243 100644 --- a/src/lang/lv.rs +++ b/src/lang/lv.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", ""), ("input note here", ""), ("note-at-conn-end-tip", ""), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/nb.rs b/src/lang/nb.rs index a97ae4ee5..7c06d7699 100644 --- a/src/lang/nb.rs +++ b/src/lang/nb.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", ""), ("input note here", ""), ("note-at-conn-end-tip", ""), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/nl.rs b/src/lang/nl.rs index 50227384e..7f641bde1 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", "Opmerking: Deze functie is niet beschikbaar in de open-sourceversie van de RustDesk-server."), ("input note here", "voeg hier een opmerking toe"), ("note-at-conn-end-tip", "Vraag om een opmerking aan het einde van de verbinding"), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pl.rs b/src/lang/pl.rs index b209dc7d6..1e4af5aa9 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", "UWAGA: Serwer OSS RustDesk nie obsługuje tej funkcji."), ("input note here", "Wstaw tutaj notatkę"), ("note-at-conn-end-tip", "Poproś o notatkę po zakończeniu połączenia."), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pt_PT.rs b/src/lang/pt_PT.rs index da5595c05..29ff24b89 100644 --- a/src/lang/pt_PT.rs +++ b/src/lang/pt_PT.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", ""), ("input note here", ""), ("note-at-conn-end-tip", ""), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs index e9fb9e4ae..a4715b47f 100644 --- a/src/lang/ptbr.rs +++ b/src/lang/ptbr.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", ""), ("input note here", ""), ("note-at-conn-end-tip", ""), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ro.rs b/src/lang/ro.rs index 3dae7ebf6..efbe758ef 100644 --- a/src/lang/ro.rs +++ b/src/lang/ro.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", ""), ("input note here", ""), ("note-at-conn-end-tip", ""), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ru.rs b/src/lang/ru.rs index 70cf140c6..f8a5fd7c3 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", "ПРИМЕЧАНИЕ: в OSS-сервере RustDesk эта функция отсутствует."), ("input note here", "введите заметку"), ("note-at-conn-end-tip", "Запрашивать заметку в конце соединения"), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sc.rs b/src/lang/sc.rs index a456fa63f..19b599d5e 100644 --- a/src/lang/sc.rs +++ b/src/lang/sc.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", ""), ("input note here", ""), ("note-at-conn-end-tip", ""), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sk.rs b/src/lang/sk.rs index d047dd35c..eafe3f244 100644 --- a/src/lang/sk.rs +++ b/src/lang/sk.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", ""), ("input note here", ""), ("note-at-conn-end-tip", ""), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sl.rs b/src/lang/sl.rs index 93a9565a8..eb9102ac7 100755 --- a/src/lang/sl.rs +++ b/src/lang/sl.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", ""), ("input note here", ""), ("note-at-conn-end-tip", ""), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sq.rs b/src/lang/sq.rs index 6aa203442..734bca256 100644 --- a/src/lang/sq.rs +++ b/src/lang/sq.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", ""), ("input note here", ""), ("note-at-conn-end-tip", ""), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sr.rs b/src/lang/sr.rs index 8c7badab1..fb91966ec 100644 --- a/src/lang/sr.rs +++ b/src/lang/sr.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", ""), ("input note here", ""), ("note-at-conn-end-tip", ""), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sv.rs b/src/lang/sv.rs index 7219d35ee..773f74e62 100644 --- a/src/lang/sv.rs +++ b/src/lang/sv.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", ""), ("input note here", ""), ("note-at-conn-end-tip", ""), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ta.rs b/src/lang/ta.rs index 726135a94..bb6ef6f35 100644 --- a/src/lang/ta.rs +++ b/src/lang/ta.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", ""), ("input note here", ""), ("note-at-conn-end-tip", ""), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/template.rs b/src/lang/template.rs index 94b5386a3..3eda9e83e 100644 --- a/src/lang/template.rs +++ b/src/lang/template.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", ""), ("input note here", ""), ("note-at-conn-end-tip", ""), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/th.rs b/src/lang/th.rs index 981df49a6..932970d3f 100644 --- a/src/lang/th.rs +++ b/src/lang/th.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", ""), ("input note here", ""), ("note-at-conn-end-tip", ""), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tr.rs b/src/lang/tr.rs index 74cf5767c..5db6e390d 100644 --- a/src/lang/tr.rs +++ b/src/lang/tr.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", "NOT: RustDesk sunucu OSS'si bu özelliği içermemektedir."), ("input note here", "Notu buraya girin"), ("note-at-conn-end-tip", "Bağlantı bittiğinde not sorulsun"), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tw.rs b/src/lang/tw.rs index 7a8f0ec06..55b7c89b3 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", "注意:RustDesk 開源伺服器 (OSS server) 不包含此功能。"), ("input note here", "輸入備註"), ("note-at-conn-end-tip", "在連接結束時請求備註"), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/uk.rs b/src/lang/uk.rs index 8daf4d271..70108e8b6 100644 --- a/src/lang/uk.rs +++ b/src/lang/uk.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", ""), ("input note here", ""), ("note-at-conn-end-tip", ""), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); } diff --git a/src/lang/vi.rs b/src/lang/vi.rs index 58fb13656..090501015 100644 --- a/src/lang/vi.rs +++ b/src/lang/vi.rs @@ -729,5 +729,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("server-oss-not-support-tip", ""), ("input note here", ""), ("note-at-conn-end-tip", ""), + ("Show terminal extra keys", ""), ].iter().cloned().collect(); }