# 1. opensource technology decision
日期: 2021-11-18
## 状态
2021-11-18 提议
## 背景
Low level window Handle:
- [https://github.com/rust-windowing/winit](https://github.com/rust-windowing/winit) is a window creation and management library. It can create windows and lets you handle events (for example: the window being resized, a key being pressed, a mouse movement, etc.) produced by window.
Gui Frameworks:
- [https://github.com/emilk/egui](https://github.com/emilk/egui) is a simple, fast, and highly portable immediate mode GUI library for Rust. egui runs on the web, natively, and in your favorite game engine (or will soon).
- [https://github.com/linebender/druid](https://github.com/linebender/druid) is a data-first Rust-native UI design toolkit.
- [https://github.com/hecrj/iced](https://github.com/hecrj/iced) is a cross-platform GUI library for Rust, inspired by Elm
Mac App Framework:
- [https://github.com/mrmekon/fruitbasket](https://github.com/mrmekon/fruitbasket) fruitbasket provides two different (but related) services for helping you run your Rust binaries as native AppKit/Cocoa applications on Mac OS X.
Tray:
- ~~[Trayicon](https://github.com/ciantic/trayicon-rs/)~~ not support macOS.
- [tray-item-rs](https://github.com/olback/tray-item-rs) is a Multi-platform Tray Indicator.
- [ksni](https://github.com/iovxw/ksni) is A Rust implementation of the KDE/freedesktop StatusNotifierItem specification.
Tray Samples:
- [https://github.com/mrmekon/connectr](https://github.com/mrmekon/connectr) is a super lightweight Spotify controller
# Spike
- [ ] hotkey binding
- GUI based Shortcuts
- [ ] [livesplit-hotkey](https://github.com/LiveSplit/livesplit-core/tree/master/crates/livesplit-hotkey)
- [ ] libinput binding [input.rs](https://github.com/Smithay/input.rs)
- Terminal based Shortcuts
- [ ] [Cursive](https://github.com/gyscos/Cursive) is a A Text User Interface library for the Rust programming language.
- [ ] [tui-rs](https://github.com/fdehau/tui-rs) is a Build terminal user interfaces and dashboards using Rust.
- [ ] [termion](https://crates.io/crates/termion) is a bindless library for manipulating terminals.
- [ ] [Crossterm](https://github.com/crossterm-rs/crossterm) is a pure-rust, terminal manipulation library that makes it possible to write cross-platform text-based interfaces (see features).
- [ ] Demo: [verco](https://github.com/vamolessa/verco) is a simple Git/Mercurial/PlasticSCM tui client based on keyboard shortcuts.
- [ ] input simulation
- [ ] [Enigo](https://github.com/Enigo-rs/Enigo) is a Cross platform input simulation in Rust
- [ ] [rdev](https://github.com/Narsil/rdev) is a Simple library to listen and send events globally to keyboard and mouse on MacOS, Windows and Linux (x11).
- [ ] Gui
- [ ] gui framework
- [ ] webview render
- [ ] Daemon?
- [ ] try `.plist`?
- [ ] libs: [daemonize](https://github.com/knsd/daemonize)
- [ ] sample: [https://github.com/Spotifyd/spotifyd](https://github.com/Spotifyd/spotifyd)
- [ ] Webview?
- [ ] [https://github.com/Boscop/web-view](https://github.com/Boscop/web-view)
- [ ] Global auto fill
- [ ] [espanso](https://github.com/federico-terzi/espanso) is a Cross-platform Text Expander written in Rust.
- [ ] Script Languages. [https://github.com/alilleybrinker/langs-in-rust](https://github.com/alilleybrinker/langs-in-rust)
- [ ] [rhai](https://github.com/rhaiscript/rhai) an embedded scripting language for Rust.
- [ ] [Boa](https://github.com/boa-dev/boa) an experimental Javascript lexer, parser and interpreter written in Rust. Currently, it has support for some of the language.
- [ ] [gluon](https://github.com/gluon-lang/gluon) is a small, statically-typed, functional programming language designed for application embedding.
- [ ] [rune](https://github.com/rune-rs/rune)
- [ ] [Goscript](https://github.com/oxfeeefeee/goscript)
- [ ] Code Highlight
- [ ] [syntect](https://github.com/trishume/syntect) is a Rust library for syntax highlighting using Sublime Text syntax definitions.
- [ ] Markdown
- [ ] [pulldown-cmark](https://github.com/raphlinus/pulldown-cmark) is a pull parser for CommonMark, written in Rust.
## 决策
在这里补充上决策信息...
## 后果
在这里记录结果...