- linux: Changed order of the protocols to from libei > wayland > x11 to now wayland > x11 > libei
- linux: Split the features
libei_smol,libei_tokiointo the featurelibeito enable the libei protocol and the mutually exclusive featuressmolandtokioto select the async runtime - all: MSRV is 1.87
- linux: libei/xdg_desktop: support passing a
restore_tokenviaSettingswhen establishing a connection, avoiding repeated user prompts for input simulation - linux: libei/xdg_desktop: expose a
restore_token()getter so callers can retrieve and reuse the token - linux: added new protocol to simulate input. It uses the xdg_desktop portal and should work in flatpaks. Try it out with the
xdg_desktopfeature
- win:
EXTconstant was removed, because it was incorrect and obsolete - all: Removed the function
delayandset_delayas they no longer serve a purpose - all: Removed the field
linux_delayfromSettingsstruct as it no longer serves a purpose
- linux: Added
NumpadEnterkey - win: Added
NumpadEnterkey - win: Extended keys can now be correctly simulated with the raw() function.
- macos:
move_mouseno longer needs a sleep. - macos: always get the current main display and not the main display when the
enigostruct was created - macos: allow dragging all mouse buttons
- macos: fix crash by executing TIS keyboard layout retrieval on the main thread
- linux: retry with a different protocol when encountering an error
- docs.rs: Fixed build by only activating the
libei_smolfeature and notlibei_tokio
- linux: libei: Replaced
libeifeature withlibei_tokioandlibei_smol
- all: So far only functions that were possible on all platforms were implemented in order to keep every thing cross-platform. The new feature
platform_specificallows you to opt-in to functionality that is only available on one or more platforms. At the beginning the only new platform specific function is smooth scrolling on macOS. - macos: added smooth scrolling (only available on macos and hidden behind the
platform_specificfeature) - linux: libei: Chose which async runtime you want to use
- linux: libei: The library can now be used inside a Tokio runtime. Previously that was not possible, because it would attempt to start a runtime from within another runtime.
- linux: x11: Use
x11rbby default to simulate input as it is more reliable, makes it possible to enter raw keycodes, does not needxdotoolsas a runtime dependency and uses native Rust. If you experience issue with the new default, please open an issue. You can disable default features and use the featurexdoto use the old method.
-linux: xdo: Enable entering all unicode characters with the key function
-linux: wayland: Enable entering all unicode characters with the key function
- macOS: The
Enigostruct implementsSync/Send
- linux: wayland: Fix releasing raw keys
- linux: wayland: Don't try to use the input_method protocol if it is unavailable
- linux: wayland: The
Enigostruct implementsSync/Sendagain
- Rust: MSRV is 1.85
- Rust: Use edition 2024
- linux: wayland: Use the keymap the compositor sends instead of a hardcoded one
- macOS: Add to support Mouse special key(Back, Forward)
- win: Helper function to tell Windows to respect the users scaling settings
set_dpi_awareness. Read the docs before using it - linux: Add support for numpad keys (e.g.
Key::Numpad2) - macOS: Add support for numpad keys (e.g.
Key::Numpad2) - linux: wayland: Implement
main_display(). It only works reliably if only one screen is connected
- linux: wayland: Fix the serial number of input_method events
- linux: wayland: Correct whitespace and nullbyte at the end of the keymap
- linux: wayland: Send messages in the correct order and make sure Wayland objects are created before they are used
- linux: wayland: Fix moving the mouse to an absolute coordinate
- linux: wayland: Don't hang when using Sway
- linux: wayland: Fix simulating modifiers
- linux: x11rb: Fix not being able to enter right modifier keys #391
- linux: x11rb: Don't assume a modifier mapping and get the modifier mapping dynamically instead #410
- linux: x11rb: Successfully enter the first simulated character as well
- all: The keys
PrintandSnapshotwere deprecated becausePrinthad the wrong virtual key associated with it on Windows. UseKey::PrintScrinstead - macOS: The simulated input is no longer effected by the state of the physical keyboard. This default behavior can be changed via the Settings (
independent_of_keyboard_state) - macOS: Do not coalesce mouse events to allow precise control
- win: Fallback to entering a
Key::Unicodeas unicode if there is no key with that character - macOS: Removed setting and functions related to the delay on macOS because a sleep is no longer necessary
- all:
Key::PrintScr - all: There finally are some tests in the CI to increase the development speed and prevent regressions
- win, macOS: Allow marking events that were created by enigo. Have a look at the additional field of the
Settingsstruct and the new methodget_marker_valueof theEnigostruct (only available on Windows and macOS) - macOS: Fallback to ASCII-capable keyboard layout for handling non-standard input sources
- macOS: Check if the application has the necessary permissions. If they are missing,
enigowill ask the user to grant them. You can change this default behavior with theSettingswhen constructing anEnigostruct. - all: Added
Token::LocationandToken::MainDisplaymostly for debugging purposes. They allow you to check if your expectations are correct - win: Added a setting to take the mouse speed and acceleration level into account for relative mouse movement or reliably move the mouse to the expected location.
- macOS: No more sleeps!! (Only when the
Enigostruct is dropped) (#105) - win: Respect the language of the current window to determine which scancodes to send
- win: Send the virtual key and its scan code in the events to work with programs that only look at one of the two
- macOS: Moving the mouse no longer breaks simulating input
- win: Fix being unable to enter text containing multiple newline chars
- macOS: Switched keycodes of
Key::LaunchpadandKey::MissionControl - macOS:
CapsLockworks (#163) - macOS: Moving the mouse works also if it is the only function (#182)
- linux: libei: Typing is much faster now
- all: Use serde(default) to make the serialized strings less verbose
- all: Serialized tokens can be less verbose because serde aliases were added
- win, macOS: Allow marking events that were created by enigo. Have a look at the additional field of the
Settingsstruct and the new methodget_marker_valueof theEnigostruct (only available on Windows and macOS) - all: The enums
Button,Direction,AxisandCoordinateimplementDefault
- windows: The
move_mousefunction moves the mouse to the correct absolute coordinates again
- All: A new Enigo struct is now always created with some settings
- Rust: MSRV is 1.75
- All held keys are released when Enigo is dropped
- win: Don't panic if it was not possible to move the mouse
- All: Never panic! All functions return Results now
- win: Don't move the mouse to a relative position if it was not possible to get the current position
- All: The feature
with_serdewas renamed toserde - All: Renamed
Key::Layout(char)toKey::Unicode(char)and clarified its docs - All: Split off entering raw keycodes into it's own function
- All: Renamed
key_sequencefunction totext - All: Renamed
enter_keyfunction tokey - All: Renamed
send_mouse_button_eventfunction tobutton - All: Renamed
send_motion_notify_eventfunction tomove_mouse - All: Renamed
mouse_scroll_eventfunction toscroll - All: Renamed
mouse_locationfunction tolocation - All: Renamed
MouseButtonenum toButton - DSL: The DSL was removed and replaced with the
Agenttrait. Activate theserdefeature to use it. Have a look at theserdeexample to get an idea how to use it
- Linux: Partial support for
libeiwas added. Use the experimental featurelibeito test it. This works on GNOME 46 and above. Entering text often simulates the wrong characters. - Linux: Support X11 without
xdotools. Use the experimental featurex11rbto test it - Linux: Partial support for Wayland was added. Use the experimental feature
waylandto test it. Only the virtual_keyboard and input_method protocol can be used. This is not going to work on GNOME, but should work for example with phosh - Linux: Added
MicMutekey to enterXF86_AudioMicMutekeysym - win: Use DirectInput in addition to the SetCursorPos function in order to support DirectX
- All: You can now chose how long the delay between keypresses should be on each platform and change it during the runtime
- All: You can now use a logger to investigate errors
- *BSD: Fix the build for BSDs
- macOS: Add info how much a mouse was moved relative to the last position
- macOS: A mouse drag with the right key is now possible too
- win, linux:
key_sequence()andkey_click(Key::Layout())can properly enter new lines and tabs - linux: You can enter
Key::ScrollLocknow - win: No more sleeps! Simulating input is done in 1 ms instead of 40+ ms. This is most obvious when entering long strings
- macOS: Added keys to control media, brightness, contrast, illumination and more
- macOS: Fix entering text that starts with newline characters
- Linux: Add Media and Volume keys
- Linux: Fixed a Segfault when running in release mode
- Windows: Bumped
windowsdependency to0.48because0.47was yanked.
- Windows:
Key::ControlpressesControland no longer the leftControl.
- all: Added a ton of keys (e.g F21-F24 keys and the XBUTTON1 & XBUTTON2 mouse buttons are now available on Windows). Some of them are OS specific. Use conditional compilation (e.g
#[cfg(target_os = "windows")]) to use them to not break the build on other OSs. - examples: New example
platform_specific.rsto demonstrate how to use keys/buttons that are platform specific
- macOS: Fixed entering Key::Layout
We should have bumped the minor version with the last release. Sorry about that. Have a look at the changes of 0.0.15 if you come from an earlier version.
- Windows:
mouse_scroll_ywith a positive number scrolls down just like on the other platforms - Windows: replaced
winapiwith the officialwindowscrate - Rust: Using Rust version 2021
- Rust: Minimum supported Rust version (MSRV) is set in Cargo.toml
- Rust: MSRV is 1.64
- macOS, Windows: Moved the functions
main_display_sizeandmouse_locationfromEnigotoMouseControllable
- DSL: Additional ParseError variants to give better feedback what the problem was
- DSL: Additional keys
- All: Added support for F10-F20
- CI/CD: Github Workflows to make sure the code builds and the tests pass
- Traits: Added the functions
main_display_sizeandmouse_locationtoMouseControllable - Linux: Implemented the functions
main_display_sizeandmouse_locationforMouseControllable
- Windows: panicked at
cannot transmute_copy if U is larger than T(#121) - Windows: Inconsistent behavior between the
mouse_move_relativeandmouse_move_tofunctions (#91) - Windows, macOS: Stop panicking when
mouse_downormouse_upis called with either ofMouseButton::ScrollUp,MouseButton::ScrollDown,MouseButton::ScrollLeft,MouseButton::ScrollRightand instead scroll - Windows: Always use key codes to be layout independent. Only use scan codes for
Key::Layout(Fixes #99, #84) - macOS:
key_clickno longer triggers a segmentation fault when called withKey::Layoutargument (Fixes #124) - macOS: Double clicks now work (#82)