Files
meatshell/src/main.rs
Hsdi 0f07dd9f5b
Some checks failed
Release / windows-x86_64-gnu (push) Failing after 3m53s
V1
2026-06-19 04:00:36 +08:00

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(())
}