48 lines
1.8 KiB
Rust
48 lines
1.8 KiB
Rust
// Entry point. Wires the Slint UI to the config store, system sampler and
|
|
// SSH session manager.
|
|
|
|
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
|
|
|
|
mod app;
|
|
mod config;
|
|
mod debug_log;
|
|
mod i18n;
|
|
mod keychain;
|
|
mod known_hosts;
|
|
mod proxy;
|
|
mod serial;
|
|
mod sftp;
|
|
mod ssh;
|
|
mod ssh_config;
|
|
mod system;
|
|
mod telnet;
|
|
mod webdav;
|
|
|
|
fn main() -> anyhow::Result<()> {
|
|
let log_path = debug_log::init();
|
|
|
|
// ── IME policy ───────────────────────────────────────────────────────────
|
|
// NOTE: We deliberately DO **NOT** call `ImmDisableIME` here.
|
|
//
|
|
// An earlier version disabled the IME for the whole Slint event-loop thread
|
|
// to work around a vim `:q!` glitch (Chinese IMEs intercept letter keys and,
|
|
// on a Shift press, discard the in-flight pinyin). But disabling the IME
|
|
// also makes 中文输入 completely impossible — there is no composition window
|
|
// at all, which is exactly the "无法输入任何中文" bug.
|
|
//
|
|
// Chinese input now flows through the hidden `ime-input` TextInput in
|
|
// terminal_view.slint: composition happens there, and committed text is
|
|
// forwarded to the PTY via the `edited` callback. The vim/Shift side-effects
|
|
// are handled instead by the C0-marker + 3-layer Backspace filters in
|
|
// `app::on_send_key`, so we no longer need (and must not use) ImmDisableIME.
|
|
|
|
if let Err(err) = app::run() {
|
|
tracing::error!(error = %format!("{err:#}"), "application exited with error");
|
|
return Err(err);
|
|
}
|
|
if let Some(path) = log_path.filter(|_| debug_log::log_paths_enabled()) {
|
|
tracing::debug!(log = %path.display(), "application exited normally");
|
|
}
|
|
Ok(())
|
|
}
|