refactor: remove static mut usage

This commit is contained in:
Pig Fang 2023-08-08 14:38:19 +08:00
parent f274848dcb
commit 86cf815ac0
No known key found for this signature in database
GPG key ID: A8198F548DADA9E2

View file

@ -3,11 +3,12 @@ use std::{collections::BTreeMap, ffi::OsString, path::PathBuf};
use anyhow::Result;
use config::{keymap::{Control, KeymapLayer}, open::Opener};
use crossterm::event::KeyEvent;
use once_cell::sync::OnceCell;
use tokio::sync::{mpsc::UnboundedSender, oneshot};
use super::{files::{File, FilesOp}, input::InputOpt, manager::PreviewData, select::SelectOpt};
static mut TX: Option<UnboundedSender<Event>> = None;
static TX: OnceCell<UnboundedSender<Event>> = OnceCell::new();
pub enum Event {
Quit,
@ -39,19 +40,17 @@ pub enum Event {
impl Event {
#[inline]
pub fn init(tx: UnboundedSender<Event>) {
unsafe {
TX.replace(tx);
}
TX.set(tx).unwrap();
}
#[inline]
pub fn emit(self) {
let tx = unsafe { TX.as_ref().unwrap() };
let tx = TX.get().unwrap();
tx.send(self).ok();
}
pub async fn wait<T>(self, rx: oneshot::Receiver<T>) -> T {
let tx = unsafe { TX.as_ref().unwrap() };
let tx = TX.get().unwrap();
tx.send(self).ok();
rx.await.unwrap()
}