Repository: alacritty/alacritty (language: rust)

Issue:
Shift modifier not always accounted via KeepassXC Auto-type (on 0.13.2)
I've seen similar issues here but it was on 0.13.0 or 0.13.1, and the shift modifier seemed to never work. My problem here is a bit more weird since the behavior is not consistent.

Let's say I'm auto-typing the following password multiple times in a row with KeepPassXC: `QE12345^&*()`
Here's what I see:
```
~ $ QE123456&8()
~ $ QE12345^7*()
~ $ Qe123456&*()
```

As you can see, the shift modifier doesn't seem to work all the time.

Notes:
 -  I tried with 0.11.0 (installed via apt) and it seemed to work correctly. I couldn't try 0.12.X since it would not compile using cargo install.
 - I tried with `alacritty --config-file /dev/null`
 - I tried with a default i3 config

### System

OS: Debian bookworm
Version: alacritty 0.13.2
Linux/BSD: i3 + picom

### Logs

`alacritty --print-events` with output `QE123456&*()`
```
[12.448734443s] [INFO ] [alacritty] winit event: AboutToWait
[12.450388025s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 178507121 }, requested_resume: None })
[12.450557205s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: ModifiersChanged(Modifiers { state: ModifiersState(0x0), pressed_mods: ModifiersKeys(0x0) }) }
[12.450580966s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: KeyboardInput { device_id: DeviceId(X(DeviceId(3))), event: KeyEvent { physical_key: Code(ShiftLeft), logical_key: Named(Shift), text: None, location: Left, state: Pressed, repeat: false, platform_specific: KeyEventExtra { key_without_modifiers: Named(Shift), text_with_all_modifiers: None } }, is_synthetic: false } }
[12.450601698s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: ModifiersChanged(Modifiers { state: ModifiersState(0x0), pressed_mods: ModifiersKeys(0x0) }) }
[12.450699716s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: ModifiersChanged(Modifiers { state: ModifiersState(SHIFT), pressed_mods: ModifiersKeys(0x0) }) }
[12.450715742s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: KeyboardInput { device_id: DeviceId(X(DeviceId(3))), event: KeyEvent { physical_key: Code(KeyQ), logical_key: Character("Q"), text: Some("Q"), location: Standard, state: Pressed, repeat: false, platform_specific: KeyEventExtra { key_without_modifiers: Character("q"), text_with_all_modifiers: Some("Q") } }, is_synthetic: false } }
[12.450739444s] [INFO ] [alacritty] winit event: AboutToWait
[12.450836505s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 180530898 }, requested_resume: None })
[12.451050549s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: ModifiersChanged(Modifiers { state: ModifiersState(SHIFT), pressed_mods: ModifiersKeys(0x0) }) }
[12.451078671s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: KeyboardInput { device_id: DeviceId(X(DeviceId(3))), event: KeyEvent { physical_key: Code(KeyQ), logical_key: Character("Q"), text: Some("Q"), location: Standard, state: Released, repeat: false, platform_specific: KeyEventExtra { key_without_modifiers: Character("q"), text_with_all_modifiers: Some("Q") } }, is_synthetic: false } }
[12.451091793s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: ModifiersChanged(Modifiers { state: ModifiersState(SHIFT), pressed_mods: ModifiersKeys(0x0) }) }
[12.451161722s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: KeyboardInput { device_id: DeviceId(X(DeviceId(3))), event: KeyEvent { physical_key: Code(ShiftLeft), logical_key: Named(Shift), text: None, location: Left, state: Released, repeat: false, platform_specific: KeyEventExtra { key_without_modifiers: Named(Shift), text_with_all_modifiers: None } }, is_synthetic: false } }
[12.451177536s] [INFO ] [alacritty] winit event: UserEvent(Event { window_id: Some(WindowId(WindowId(73400325))), payload: Terminal(Wakeup) })
[12.451188523s] [INFO ] [alacritty] winit event: UserEvent(Event { window_id: Some(WindowId(WindowId(73400325))), payload: Terminal(Wakeup) })
[12.451195968s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: RedrawRequested }
[12.458190573s] [INFO ] [alacritty] winit event: AboutToWait
[12.458275066s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 187955385 }, requested_resume: None })
[12.458294783s] [INFO ] [alacritty] winit event: UserEvent(Event { window_id: Some(WindowId(WindowId(73400325))), payload: Terminal(Wakeup) })
[12.458331715s] [INFO ] [alacritty] winit event: UserEvent(Event { window_id: Some(WindowId(WindowId(73400325))), payload: Frame })
[12.458342984s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: RedrawRequested }
[12.467565554s] [INFO ] [alacritty] winit event: AboutToWait
[12.467691719s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 197370065 }, requested_resume: None })
[12.467717038s] [INFO ] [alacritty] winit event: UserEvent(Event { window_id: Some(WindowId(WindowId(73400325))), payload: Frame })
[12.467732751s] [INFO ] [alacritty] winit event: AboutToWait
[12.474292640s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 197443187 }, requested_resume: None })
[12.475188811s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: ModifiersChanged(Modifiers { state: ModifiersState(SHIFT), pressed_mods: ModifiersKeys(0x0) }) }
[12.475308057s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: ModifiersChanged(Modifiers { state: ModifiersState(0x0), pressed_mods: ModifiersKeys(0x0) }) }
[12.475329320s] [INFO ] [alacritty] winit event: AboutToWait
[12.475766144s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 205131086 }, requested_resume: None })
[12.475938785s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: ModifiersChanged(Modifiers { state: ModifiersState(0x0), pressed_mods: ModifiersKeys(0x0) }) }
[12.475978820s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: KeyboardInput { device_id: DeviceId(X(DeviceId(3))), event: KeyEvent { physical_key: Code(ShiftLeft), logical_key: Named(Shift), text: None, location: Left, state: Pressed, repeat: false, platform_specific: KeyEventExtra { key_without_modifiers: Named(Shift), text_with_all_modifiers: None } }, is_synthetic: false } }
[12.475996890s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: ModifiersChanged(Modifiers { state: ModifiersState(0x0), pressed_mods: ModifiersKeys(0x0) }) }
[12.476010729s] [INFO ] [alacritty] winit event: AboutToWait
[12.476100909s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 205795333 }, requested_resume: None })
[12.476217142s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: ModifiersChanged(Modifiers { state: ModifiersState(SHIFT), pressed_mods: ModifiersKeys(0x0) }) }
[12.476243865s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: KeyboardInput { device_id: DeviceId(X(DeviceId(3))), event: KeyEvent { physical_key: Code(KeyE), logical_key: Character("E"), text: Some("E"), location: Standard, state: Pressed, repeat: false, platform_specific: KeyEventExtra { key_without_modifiers: Character("e"), text_with_all_modifiers: Some("E") } }, is_synthetic: false } }
[12.476262224s] [INFO ] [alacritty] winit event: AboutToWait
[12.476355928s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 206049841 }, requested_resume: None })
[12.476514716s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: ModifiersChanged(Modifiers { state: ModifiersState(SHIFT), pressed_mods: ModifiersKeys(0x0) }) }
[12.476531818s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: KeyboardInput { device_id: DeviceId(X(DeviceId(3))), event: KeyEvent { physical_key: Code(KeyE), logical_key: Character("E"), text: Some("E"), location: Standard, state: Released, repeat: false, platform_specific: KeyEventExtra { key_without_modifiers: Character("e"), text_with_all_modifiers: Some("E") } }, is_synthetic: false } }
[12.476543247s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: ModifiersChanged(Modifiers { state: ModifiersState(SHIFT), pressed_mods: ModifiersKeys(0x0) }) }
[12.476636130s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: KeyboardInput { device_id: DeviceId(X(DeviceId(3))), event: KeyEvent { physical_key: Code(ShiftLeft), logical_key: Named(Shift), text: None, location: Left, state: Released, repeat: false, platform_specific: KeyEventExtra { key_without_modifiers: Named(Shift), text_with_all_modifiers: None } }, is_synthetic: false } }
[12.476669719s] [INFO ] [alacritty] winit event: UserEvent(Event { window_id: Some(WindowId(WindowId(73400325))), payload: Terminal(Wakeup) })
[12.476691263s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: RedrawRequested }
[12.477596554s] [INFO ] [alacritty] winit event: AboutToWait
[12.479215645s] [INFO ] [alacritty] winit event: NewEvents(ResumeTimeReached { start: Instant { tv_sec: 2046, tv_nsec: 207326251 }, requested_resume: Instant { tv_sec: 2046, tv_nsec: 208903847 } })
[12.479240470s] [INFO ] [alacritty] winit event: AboutToWait
[12.479254970s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 208952453 }, requested_resume: None })
[12.479264682s] [INFO ] [alacritty] winit event: UserEvent(Event { window_id: Some(WindowId(WindowId(73400325))), payload: Frame })
[12.479272964s] [INFO ] [alacritty] winit event: AboutToWait
[12.501728859s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 208981246 }, requested_resume: None })
[12.504473657s] [INFO ] [alacritty] winit event: AboutToWait
[12.505552918s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 234266209 }, requested_resume: None })
[12.505617477s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: ModifiersChanged(Modifiers { state: ModifiersState(0x0), pressed_mods: ModifiersKeys(0x0) }) }
[12.505637839s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: KeyboardInput { device_id: DeviceId(X(DeviceId(3))), event: KeyEvent { physical_key: Code(Digit1), logical_key: Character("1"), text: Some("1"), location: Standard, state: Pressed, repeat: false, platform_specific: KeyEventExtra { key_without_modifiers: Character("1"), text_with_all_modifiers: Some("1") } }, is_synthetic: false } }
[12.505655994s] [INFO ] [alacritty] winit event: AboutToWait
[12.505788359s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 235447992 }, requested_resume: None })
[12.505903864s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: KeyboardInput { device_id: DeviceId(X(DeviceId(3))), event: KeyEvent { physical_key: Code(Digit1), logical_key: Character("1"), text: Some("1"), location: Standard, state: Released, repeat: false, platform_specific: KeyEventExtra { key_without_modifiers: Character("1"), text_with_all_modifiers: Some("1") } }, is_synthetic: false } }
[12.505941699s] [INFO ] [alacritty] winit event: UserEvent(Event { window_id: Some(WindowId(WindowId(73400325))), payload: Terminal(Wakeup) })
[12.505959811s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: RedrawRequested }
[12.508551956s] [INFO ] [alacritty] winit event: AboutToWait
[12.508580611s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 238275179 }, requested_resume: None })
[12.508591838s] [INFO ] [alacritty] winit event: UserEvent(Event { window_id: Some(WindowId(WindowId(73400325))), payload: Frame })
[12.508599474s] [INFO ] [alacritty] winit event: AboutToWait
[12.528113194s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 238307857 }, requested_resume: None })
[12.529803378s] [INFO ] [alacritty] winit event: AboutToWait
[12.530772272s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 259582438 }, requested_resume: None })
[12.530941740s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: KeyboardInput { device_id: DeviceId(X(DeviceId(3))), event: KeyEvent { physical_key: Code(Digit2), logical_key: Character("2"), text: Some("2"), location: Standard, state: Pressed, repeat: false, platform_specific: KeyEventExtra { key_without_modifiers: Character("2"), text_with_all_modifiers: Some("2") } }, is_synthetic: false } }
[12.531007916s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: KeyboardInput { device_id: DeviceId(X(DeviceId(3))), event: KeyEvent { physical_key: Code(Digit2), logical_key: Character("2"), text: Some("2"), location: Standard, state: Released, repeat: false, platform_specific: KeyEventExtra { key_without_modifiers: Character("2"), text_with_all_modifiers: Some("2") } }, is_synthetic: false } }
[12.531029211s] [INFO ] [alacritty] winit event: AboutToWait
[12.531241921s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 260750899 }, requested_resume: None })
[12.531267513s] [INFO ] [alacritty] winit event: UserEvent(Event { window_id: Some(WindowId(WindowId(73400325))), payload: Terminal(Wakeup) })
[12.531283134s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: RedrawRequested }
[12.532246229s] [INFO ] [alacritty] winit event: AboutToWait
[12.532281588s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 261975054 }, requested_resume: None })
[12.532296228s] [INFO ] [alacritty] winit event: UserEvent(Event { window_id: Some(WindowId(WindowId(73400325))), payload: Frame })
[12.532306657s] [INFO ] [alacritty] winit event: AboutToWait
[12.554372386s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 262016972 }, requested_resume: None })
[12.556624626s] [INFO ] [alacritty] winit event: AboutToWait
[12.558418093s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 286396516 }, requested_resume: None })
[12.558593913s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: KeyboardInput { device_id: DeviceId(X(DeviceId(3))), event: KeyEvent { physical_key: Code(Digit3), logical_key: Character("3"), text: Some("3"), location: Standard, state: Pressed, repeat: false, platform_specific: KeyEventExtra { key_without_modifiers: Character("3"), text_with_all_modifiers: Some("3") } }, is_synthetic: false } }
[12.558618526s] [INFO ] [alacritty] winit event: AboutToWait
[12.558800257s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 288337819 }, requested_resume: None })
[12.558812281s] [INFO ] [alacritty] winit event: UserEvent(Event { window_id: Some(WindowId(WindowId(73400325))), payload: Terminal(Wakeup) })
[12.558822801s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: RedrawRequested }
[12.563960190s] [INFO ] [alacritty] winit event: AboutToWait
[12.564066682s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 293740466 }, requested_resume: None })
[12.564812688s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: KeyboardInput { device_id: DeviceId(X(DeviceId(3))), event: KeyEvent { physical_key: Code(Digit3), logical_key: Character("3"), text: Some("3"), location: Standard, state: Released, repeat: false, platform_specific: KeyEventExtra { key_without_modifiers: Character("3"), text_with_all_modifiers: Some("3") } }, is_synthetic: false } }
[12.564851914s] [INFO ] [alacritty] winit event: UserEvent(Event { window_id: Some(WindowId(WindowId(73400325))), payload: Frame })
[12.564863919s] [INFO ] [alacritty] winit event: AboutToWait
[12.580404198s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 294575315 }, requested_resume: None })
[12.580471889s] [INFO ] [alacritty] winit event: AboutToWait
[12.581515701s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 310186355 }, requested_resume: None })
[12.581601147s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: KeyboardInput { device_id: DeviceId(X(DeviceId(3))), event: KeyEvent { physical_key: Code(Digit4), logical_key: Character("4"), text: Some("4"), location: Standard, state: Pressed, repeat: false, platform_specific: KeyEventExtra { key_without_modifiers: Character("4"), text_with_all_modifiers: Some("4") } }, is_synthetic: false } }
[12.581626104s] [INFO ] [alacritty] winit event: AboutToWait
[12.581694820s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 311346500 }, requested_resume: None })
[12.581806568s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: KeyboardInput { device_id: DeviceId(X(DeviceId(3))), event: KeyEvent { physical_key: Code(Digit4), logical_key: Character("4"), text: Some("4"), location: Standard, state: Released, repeat: false, platform_specific: KeyEventExtra { key_without_modifiers: Character("4"), text_with_all_modifiers: Some("4") } }, is_synthetic: false } }
[12.581825292s] [INFO ] [alacritty] winit event: AboutToWait
[12.581850285s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 311546733 }, requested_resume: None })
[12.581860328s] [INFO ] [alacritty] winit event: UserEvent(Event { window_id: Some(WindowId(WindowId(73400325))), payload: Terminal(Wakeup) })
[12.581870658s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: RedrawRequested }
[12.582777102s] [INFO ] [alacritty] winit event: AboutToWait
[12.582806311s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 312501206 }, requested_resume: None })
[12.582818162s] [INFO ] [alacritty] winit event: UserEvent(Event { window_id: Some(WindowId(WindowId(73400325))), payload: Frame })
[12.582825690s] [INFO ] [alacritty] winit event: AboutToWait
[12.606589517s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 312534038 }, requested_resume: None })
[12.610039260s] [INFO ] [alacritty] winit event: AboutToWait
[12.612124617s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 339841387 }, requested_resume: None })
[12.612869795s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: KeyboardInput { device_id: DeviceId(X(DeviceId(3))), event: KeyEvent { physical_key: Code(Digit5), logical_key: Character("5"), text: Some("5"), location: Standard, state: Pressed, repeat: false, platform_specific: KeyEventExtra { key_without_modifiers: Character("5"), text_with_all_modifiers: Some("5") } }, is_synthetic: false } }
[12.612988671s] [INFO ] [alacritty] winit event: AboutToWait
[12.613168764s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 342768692 }, requested_resume: None })
[12.613613204s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: KeyboardInput { device_id: DeviceId(X(DeviceId(3))), event: KeyEvent { physical_key: Code(Digit5), logical_key: Character("5"), text: Some("5"), location: Standard, state: Released, repeat: false, platform_specific: KeyEventExtra { key_without_modifiers: Character("5"), text_with_all_modifiers: Some("5") } }, is_synthetic: false } }
[12.613719390s] [INFO ] [alacritty] winit event: UserEvent(Event { window_id: Some(WindowId(WindowId(73400325))), payload: Terminal(Wakeup) })
[12.613783372s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: RedrawRequested }
[12.614845037s] [INFO ] [alacritty] winit event: AboutToWait
[12.614876616s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 344568900 }, requested_resume: None })
[12.614889465s] [INFO ] [alacritty] winit event: UserEvent(Event { window_id: Some(WindowId(WindowId(73400325))), payload: Frame })
[12.614897784s] [INFO ] [alacritty] winit event: AboutToWait
[12.633517086s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 344606726 }, requested_resume: None })
[12.636031208s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: ModifiersChanged(Modifiers { state: ModifiersState(SHIFT), pressed_mods: ModifiersKeys(0x0) }) }
[12.636083904s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: ModifiersChanged(Modifiers { state: ModifiersState(0x0), pressed_mods: ModifiersKeys(0x0) }) }
[12.636101856s] [INFO ] [alacritty] winit event: AboutToWait
[12.636632336s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 365883315 }, requested_resume: None })
[12.636848862s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: ModifiersChanged(Modifiers { state: ModifiersState(0x0), pressed_mods: ModifiersKeys(0x0) }) }
[12.636874653s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: KeyboardInput { device_id: DeviceId(X(DeviceId(3))), event: KeyEvent { physical_key: Code(ShiftLeft), logical_key: Named(Shift), text: None, location: Left, state: Pressed, repeat: false, platform_specific: KeyEventExtra { key_without_modifiers: Named(Shift), text_with_all_modifiers: None } }, is_synthetic: false } }
[12.636898120s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: ModifiersChanged(Modifiers { state: ModifiersState(0x0), pressed_mods: ModifiersKeys(0x0) }) }
[12.636909584s] [INFO ] [alacritty] winit event: AboutToWait
[12.636983515s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 366679309 }, requested_resume: None })
[12.637213275s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: ModifiersChanged(Modifiers { state: ModifiersState(SHIFT), pressed_mods: ModifiersKeys(0x0) }) }
[12.637235909s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: KeyboardInput { device_id: DeviceId(X(DeviceId(3))), event: KeyEvent { physical_key: Code(Digit6), logical_key: Character("6"), text: Some("6"), location: Standard, state: Pressed, repeat: false, platform_specific: KeyEventExtra { key_without_modifiers: Character("6"), text_with_all_modifiers: Some("6") } }, is_synthetic: false } }
[12.637249153s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: ModifiersChanged(Modifiers { state: ModifiersState(0x0), pressed_mods: ModifiersKeys(0x0) }) }
[12.637285961s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: ModifiersChanged(Modifiers { state: ModifiersState(SHIFT), pressed_mods: ModifiersKeys(0x0) }) }
[12.637297900s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: KeyboardInput { device_id: DeviceId(X(DeviceId(3))), event: KeyEvent { physical_key: Code(Digit6), logical_key: Character("^"), text: Some("^"), location: Standard, state: Released, repeat: false, platform_specific: KeyEventExtra { key_without_modifiers: Character("6"), text_with_all_modifiers: Some("^") } }, is_synthetic: false } }
[12.637383258s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: KeyboardInput { device_id: DeviceId(X(DeviceId(3))), event: KeyEvent { physical_key: Code(ShiftLeft), logical_key: Named(Shift), text: None, location: Left, state: Released, repeat: false, platform_specific: KeyEventExtra { key_without_modifiers: Named(Shift), text_with_all_modifiers: None } }, is_synthetic: false } }
[12.637397999s] [INFO ] [alacritty] winit event: AboutToWait
[12.637571450s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 367176702 }, requested_resume: None })
[12.637585121s] [INFO ] [alacritty] winit event: UserEvent(Event { window_id: Some(WindowId(WindowId(73400325))), payload: Terminal(Wakeup) })
[12.637595711s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: RedrawRequested }
[12.638533976s] [INFO ] [alacritty] winit event: AboutToWait
[12.638561283s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 368255358 }, requested_resume: None })
[12.638576074s] [INFO ] [alacritty] winit event: UserEvent(Event { window_id: Some(WindowId(WindowId(73400325))), payload: Frame })
[12.638584531s] [INFO ] [alacritty] winit event: AboutToWait
[12.662482563s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 368292866 }, requested_resume: None })
[12.666285834s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: ModifiersChanged(Modifiers { state: ModifiersState(SHIFT), pressed_mods: ModifiersKeys(0x0) }) }
[12.666526185s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: ModifiersChanged(Modifiers { state: ModifiersState(0x0), pressed_mods: ModifiersKeys(0x0) }) }
[12.666642265s] [INFO ] [alacritty] winit event: AboutToWait
[12.667126586s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 396654106 }, requested_resume: None })
[12.667767545s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: ModifiersChanged(Modifiers { state: ModifiersState(0x0), pressed_mods: ModifiersKeys(0x0) }) }
[12.667856465s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: KeyboardInput { device_id: DeviceId(X(DeviceId(3))), event: KeyEvent { physical_key: Code(ShiftLeft), logical_key: Named(Shift), text: None, location: Left, state: Pressed, repeat: false, platform_specific: KeyEventExtra { key_without_modifiers: Named(Shift), text_with_all_modifiers: None } }, is_synthetic: false } }
[12.667904141s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: ModifiersChanged(Modifiers { state: ModifiersState(0x0), pressed_mods: ModifiersKeys(0x0) }) }
[12.667945397s] [INFO ] [alacritty] winit event: AboutToWait
[12.668659174s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 397777358 }, requested_resume: None })
[12.668757804s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: ModifiersChanged(Modifiers { state: ModifiersState(SHIFT), pressed_mods: ModifiersKeys(0x0) }) }
[12.668781430s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: KeyboardInput { device_id: DeviceId(X(DeviceId(3))), event: KeyEvent { physical_key: Code(Digit7), logical_key: Character("&"), text: Some("&"), location: Standard, state: Pressed, repeat: false, platform_specific: KeyEventExtra { key_without_modifiers: Character("7"), text_with_all_modifiers: Some("&") } }, is_synthetic: false } }
[12.668979566s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: ModifiersChanged(Modifiers { state: ModifiersState(SHIFT), pressed_mods: ModifiersKeys(0x0) }) }
[12.669001398s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: KeyboardInput { device_id: DeviceId(X(DeviceId(3))), event: KeyEvent { physical_key: Code(Digit7), logical_key: Character("&"), text: Some("&"), location: Standard, state: Released, repeat: false, platform_specific: KeyEventExtra { key_without_modifiers: Character("7"), text_with_all_modifiers: Some("&") } }, is_synthetic: false } }
[12.669013385s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: ModifiersChanged(Modifiers { state: ModifiersState(SHIFT), pressed_mods: ModifiersKeys(0x0) }) }
[12.669056213s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: KeyboardInput { device_id: DeviceId(X(DeviceId(3))), event: KeyEvent { physical_key: Code(ShiftLeft), logical_key: Named(Shift), text: None, location: Left, state: Released, repeat: false, platform_specific: KeyEventExtra { key_without_modifiers: Named(Shift), text_with_all_modifiers: None } }, is_synthetic: false } }
[12.669074330s] [INFO ] [alacritty] winit event: AboutToWait
[12.669332301s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 398860786 }, requested_resume: None })
[12.669363385s] [INFO ] [alacritty] winit event: UserEvent(Event { window_id: Some(WindowId(WindowId(73400325))), payload: Terminal(Wakeup) })
[12.669376151s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: RedrawRequested }
[12.670162808s] [INFO ] [alacritty] winit event: AboutToWait
[12.670185608s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 399881059 }, requested_resume: None })
[12.670196176s] [INFO ] [alacritty] winit event: UserEvent(Event { window_id: Some(WindowId(WindowId(73400325))), payload: Terminal(Wakeup) })
[12.670214182s] [INFO ] [alacritty] winit event: UserEvent(Event { window_id: Some(WindowId(WindowId(73400325))), payload: Frame })
[12.670225822s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: RedrawRequested }
[12.673871238s] [INFO ] [alacritty] winit event: AboutToWait
[12.679422422s] [INFO ] [alacritty] winit event: NewEvents(ResumeTimeReached { start: Instant { tv_sec: 2046, tv_nsec: 403634511 }, requested_resume: Instant { tv_sec: 2046, tv_nsec: 409064171 } })
[12.679457564s] [INFO ] [alacritty] winit event: AboutToWait
[12.679478150s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 409174646 }, requested_resume: None })
[12.679489268s] [INFO ] [alacritty] winit event: UserEvent(Event { window_id: Some(WindowId(WindowId(73400325))), payload: Frame })
[12.679497596s] [INFO ] [alacritty] winit event: AboutToWait
[12.690845144s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 409205540 }, requested_resume: None })
[12.691462412s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: ModifiersChanged(Modifiers { state: ModifiersState(SHIFT), pressed_mods: ModifiersKeys(0x0) }) }
[12.691518145s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: ModifiersChanged(Modifiers { state: ModifiersState(0x0), pressed_mods: ModifiersKeys(0x0) }) }
[12.691539311s] [INFO ] [alacritty] winit event: AboutToWait
[12.692052066s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 421346609 }, requested_resume: None })
[12.692237401s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: ModifiersChanged(Modifiers { state: ModifiersState(0x0), pressed_mods: ModifiersKeys(0x0) }) }
[12.692261021s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: KeyboardInput { device_id: DeviceId(X(DeviceId(3))), event: KeyEvent { physical_key: Code(ShiftLeft), logical_key: Named(Shift), text: None, location: Left, state: Pressed, repeat: false, platform_specific: KeyEventExtra { key_without_modifiers: Named(Shift), text_with_all_modifiers: None } }, is_synthetic: false } }
[12.692281658s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: ModifiersChanged(Modifiers { state: ModifiersState(0x0), pressed_mods: ModifiersKeys(0x0) }) }
[12.692325855s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: ModifiersChanged(Modifiers { state: ModifiersState(SHIFT), pressed_mods: ModifiersKeys(0x0) }) }
[12.692340650s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: KeyboardInput { device_id: DeviceId(X(DeviceId(3))), event: KeyEvent { physical_key: Code(Digit8), logical_key: Character("*"), text: Some("*"), location: Standard, state: Pressed, repeat: false, platform_specific: KeyEventExtra { key_without_modifiers: Character("8"), text_with_all_modifiers: Some("*") } }, is_synthetic: false } }
[12.692475528s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: ModifiersChanged(Modifiers { state: ModifiersState(SHIFT), pressed_mods: ModifiersKeys(0x0) }) }
[12.692489006s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: KeyboardInput { device_id: DeviceId(X(DeviceId(3))), event: KeyEvent { physical_key: Code(Digit8), logical_key: Character("*"), text: Some("*"), location: Standard, state: Released, repeat: false, platform_specific: KeyEventExtra { key_without_modifiers: Character("8"), text_with_all_modifiers: Some("*") } }, is_synthetic: false } }
[12.692502976s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: ModifiersChanged(Modifiers { state: ModifiersState(SHIFT), pressed_mods: ModifiersKeys(0x0) }) }
[12.692541567s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: KeyboardInput { device_id: DeviceId(X(DeviceId(3))), event: KeyEvent { physical_key: Code(ShiftLeft), logical_key: Named(Shift), text: None, location: Left, state: Released, repeat: false, platform_specific: KeyEventExtra { key_without_modifiers: Named(Shift), text_with_all_modifiers: None } }, is_synthetic: false } }
[12.692566022s] [INFO ] [alacritty] winit event: AboutToWait
[12.692744936s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 422353422 }, requested_resume: None })
[12.692768560s] [INFO ] [alacritty] winit event: UserEvent(Event { window_id: Some(WindowId(WindowId(73400325))), payload: Terminal(Wakeup) })
[12.692781565s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: RedrawRequested }
[12.695317546s] [INFO ] [alacritty] winit event: AboutToWait
[12.695351655s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 425044081 }, requested_resume: Some(Instant { tv_sec: 2046, tv_nsec: 425744058 }) })
[12.695368212s] [INFO ] [alacritty] winit event: UserEvent(Event { window_id: Some(WindowId(WindowId(73400325))), payload: Terminal(Wakeup) })
[12.695382464s] [INFO ] [alacritty] winit event: AboutToWait
[12.696053181s] [INFO ] [alacritty] winit event: NewEvents(ResumeTimeReached { start: Instant { tv_sec: 2046, tv_nsec: 425091777 }, requested_resume: Instant { tv_sec: 2046, tv_nsec: 425744058 } })
[12.696066197s] [INFO ] [alacritty] winit event: AboutToWait
[12.696077675s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 425776535 }, requested_resume: None })
[12.696086021s] [INFO ] [alacritty] winit event: UserEvent(Event { window_id: Some(WindowId(WindowId(73400325))), payload: Frame })
[12.696094444s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: RedrawRequested }
[12.698822708s] [INFO ] [alacritty] winit event: AboutToWait
[12.712831546s] [INFO ] [alacritty] winit event: NewEvents(ResumeTimeReached { start: Instant { tv_sec: 2046, tv_nsec: 428553545 }, requested_resume: Instant { tv_sec: 2046, tv_nsec: 442423863 } })
[12.712879750s] [INFO ] [alacritty] winit event: AboutToWait
[12.712896146s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 442592295 }, requested_resume: None })
[12.712904995s] [INFO ] [alacritty] winit event: UserEvent(Event { window_id: Some(WindowId(WindowId(73400325))), payload: Frame })
[12.712912853s] [INFO ] [alacritty] winit event: AboutToWait
[12.716998863s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 442620744 }, requested_resume: None })
[12.717642903s] [INFO ] [alacritty] winit event: AboutToWait
[12.718245170s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 447360331 }, requested_resume: None })
[12.718426505s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: ModifiersChanged(Modifiers { state: ModifiersState(0x0), pressed_mods: ModifiersKeys(0x0) }) }
[12.718457948s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: KeyboardInput { device_id: DeviceId(X(DeviceId(3))), event: KeyEvent { physical_key: Unidentified(Xkb(0x00B3)), logical_key: Character("("), text: Some("("), location: Standard, state: Pressed, repeat: false, platform_specific: KeyEventExtra { key_without_modifiers: Character("("), text_with_all_modifiers: Some("(") } }, is_synthetic: false } }
[12.718488189s] [INFO ] [alacritty] winit event: AboutToWait
[12.718586100s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 448280190 }, requested_resume: None })
[12.718680746s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: KeyboardInput { device_id: DeviceId(X(DeviceId(3))), event: KeyEvent { physical_key: Unidentified(Xkb(0x00B3)), logical_key: Character("("), text: Some("("), location: Standard, state: Released, repeat: false, platform_specific: KeyEventExtra { key_without_modifiers: Character("("), text_with_all_modifiers: Some("(") } }, is_synthetic: false } }
[12.718712516s] [INFO ] [alacritty] winit event: UserEvent(Event { window_id: Some(WindowId(WindowId(73400325))), payload: Terminal(Wakeup) })
[12.718729665s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: RedrawRequested }
[12.719728190s] [INFO ] [alacritty] winit event: AboutToWait
[12.729499377s] [INFO ] [alacritty] winit event: NewEvents(ResumeTimeReached { start: Instant { tv_sec: 2046, tv_nsec: 449453340 }, requested_resume: Instant { tv_sec: 2046, tv_nsec: 459103844 } })
[12.729549060s] [INFO ] [alacritty] winit event: AboutToWait
[12.729565981s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 459262411 }, requested_resume: None })
[12.729574610s] [INFO ] [alacritty] winit event: UserEvent(Event { window_id: Some(WindowId(WindowId(73400325))), payload: Frame })
[12.729583263s] [INFO ] [alacritty] winit event: AboutToWait
[12.742366674s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 459293770 }, requested_resume: None })
[12.743033557s] [INFO ] [alacritty] winit event: AboutToWait
[12.743662060s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 472773733 }, requested_resume: None })
[12.743790828s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: KeyboardInput { device_id: DeviceId(X(DeviceId(3))), event: KeyEvent { physical_key: Unidentified(Xkb(0x00B4)), logical_key: Character(")"), text: Some(")"), location: Standard, state: Pressed, repeat: false, platform_specific: KeyEventExtra { key_without_modifiers: Character(")"), text_with_all_modifiers: Some(")") } }, is_synthetic: false } }
[12.743828992s] [INFO ] [alacritty] winit event: AboutToWait
[12.743974252s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 473554726 }, requested_resume: None })
[12.744126210s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: KeyboardInput { device_id: DeviceId(X(DeviceId(3))), event: KeyEvent { physical_key: Unidentified(Xkb(0x00B4)), logical_key: Character(")"), text: Some(")"), location: Standard, state: Released, repeat: false, platform_specific: KeyEventExtra { key_without_modifiers: Character(")"), text_with_all_modifiers: Some(")") } }, is_synthetic: false } }
[12.744153050s] [INFO ] [alacritty] winit event: UserEvent(Event { window_id: Some(WindowId(WindowId(73400325))), payload: Terminal(Wakeup) })
[12.744166832s] [INFO ] [alacritty] winit event: WindowEvent { window_id: WindowId(WindowId(73400325)), event: RedrawRequested }
[12.745709898s] [INFO ] [alacritty] winit event: AboutToWait
[12.746092054s] [INFO ] [alacritty] winit event: NewEvents(ResumeTimeReached { start: Instant { tv_sec: 2046, tv_nsec: 475445755 }, requested_resume: Instant { tv_sec: 2046, tv_nsec: 475783903 } })
[12.746107673s] [INFO ] [alacritty] winit event: AboutToWait
[12.746120296s] [INFO ] [alacritty] winit event: NewEvents(WaitCancelled { start: Instant { tv_sec: 2046, tv_nsec: 475818492 }, requested_resume: None })
[12.746132478s] [INFO ] [alacritty] winit event: UserEvent(Event { window_id: Some(WindowId(WindowId(73400325))), payload: Frame })
[12.746145018s] [INFO ] [alacritty] winit event: AboutToWait
```



Discussion / hints:
@kchibisov You should be more aware of the recent X11 modifier changes in Winit than me. Do you think there's still the possibility for a racing condition here?

From what I remember, the modifiers on X11 are retrieved on every key press. So it shouldn't be possible to have key events with incorrect modifiers attached?
There were cases where the modifier was set wrongly on the key itself. One could provide the `xtrace` output, it should be pretty clear from it.
Output was `qe12345^7*()`

```
xtrace -n --relative-timestamps -o xtrace.log alacritty
```

Interesting part should start around 10/11 seconds, when I hit ctrl-shift-k to trigger keepassxc autocomplete, and then ctrl-2 to type password

[xtrace.log](https://github.com/alacritty/alacritty/files/15058535/xtrace.log)
I think I'm having the same issue with my programmable keyboard. I have a symbol layer that has a dedicated key for `_`, but occasionally when I type it quickly alacritty sees the `-` character instead. I haven't noticed this on any other application.

```
alacritty --version
alacritty 0.15.0-dev (1063706f)
```
Here's the `--print-events` output:

https://gist.github.com/emesterhazy/98cb03a2c2abd694a3f93a4f40f237dc

It looks like the shift isn't being applied to the `-` key for some reason.

I did some manual bisecting using the tagged releases on crates.io.

- 0.12.0: No issues
- 0.12.3: No issues
- 0.13.0: Broken

I love Alacritty but this is a pretty showstopping issue for me on the newer versions since I basically can't use the symbol layer of my keyboard. Willing to take a look into it if someone can point me to the right place in the code. I may also start bisecting between 0.12.3 and 0.13.0 to see if I can find the bad change.

@kchibisov In case you know where to look or have other suggestions.
Ok, I finished bisecting and found that the bad commit is db903503df024a3f5066937fbe0272be88226738

I haven't dug into the changes in that commit yet, but I'll see if there's an obvious issue. By the way, this issue should probably be renamed since this doesn't seem to be specific to KeepassXC, and affects all versions after the commit I posted above.

Edit: I'm guessing this is a bug in winit, but I'm not 100% sure. Possibly related:

- https://github.com/rust-windowing/winit/issues/3769
- https://github.com/rust-windowing/winit/issues/2898

Fix patch:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b86fc7a42e5..35585f7eee7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,19 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
 Notable changes to the `alacritty_terminal` crate are documented in its
 [CHANGELOG](./alacritty_terminal/CHANGELOG.md).
 
+## 0.15.1-rc1
+
+### Changed
+
+- Error out when socket fails to create with `--daemon`
+- Default URL hints now stop before backslashes
+
+### Fixed
+
+- Modifiers being out of sync for fast/synthetic input on X11
+- Child process creation failing while inside a deleted directory
+- Shifted key reported without a shift when using kitty keyboard protocol
+
 ## 0.15.0
 
 ### Added
diff --git a/Cargo.lock b/Cargo.lock
index 4a1e39e3870..7d3b5f04ec4 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -32,7 +32,7 @@ dependencies = [
 
 [[package]]
 name = "alacritty"
-version = "0.15.0"
+version = "0.15.1-rc1"
 dependencies = [
  "ahash",
  "alacritty_config",
@@ -93,7 +93,7 @@ dependencies = [
 
 [[package]]
 name = "alacritty_terminal"
-version = "0.24.2"
+version = "0.25.0-rc1"
 dependencies = [
  "base64",
  "bitflags 2.6.0",
@@ -814,9 +814,9 @@ dependencies = [
 
 [[package]]
 name = "glutin"
-version = "0.32.1"
+version = "0.32.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec69412a0bf07ea7607e638b415447857a808846c2b685a43c8aa18bc6d5e499"
+checksum = "03642b8b0cce622392deb0ee3e88511f75df2daac806102597905c3ea1974848"
 dependencies = [
  "bitflags 2.6.0",
  "cfg_aliases",
@@ -839,9 +839,9 @@ dependencies = [
 
 [[package]]
 name = "glutin_egl_sys"
-version = "0.7.0"
+version = "0.7.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cae99fff4d2850dbe6fb8c1fa8e4fead5525bab715beaacfccf3fb994e01c827"
+checksum = "4c4680ba6195f424febdc3ba46e7a42a0e58743f2edb115297b86d7f8ecc02d2"
 dependencies = [
  "gl_generator",
  "windows-sys 0.52.0",
@@ -849,9 +849,9 @@ dependencies = [
 
 [[package]]
 name = "glutin_glx_sys"
-version = "0.6.0"
+version = "0.6.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9c2b2d3918e76e18e08796b55eb64e8fe6ec67d5a6b2e2a7e2edce224ad24c63"
+checksum = "8a7bb2938045a88b612499fbcba375a77198e01306f52272e692f8c1f3751185"
 dependencies = [
  "gl_generator",
  "x11-dl",
@@ -859,9 +859,9 @@ dependencies = [
 
 [[package]]
 name = "glutin_wgl_sys"
-version = "0.6.0"
+version = "0.6.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0a4e1951bbd9434a81aa496fe59ccc2235af3820d27b85f9314e279609211e2c"
+checksum = "2c4ee00b289aba7a9e5306d57c2d05499b2e5dc427f84ac708bd2c090212cf3e"
 dependencies = [
  "gl_generator",
 ]
@@ -2526,9 +2526,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
 
 [[package]]
 name = "winit"
-version = "0.30.8"
+version = "0.30.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f5d74280aabb958072864bff6cfbcf9025cf8bfacdde5e32b5e12920ef703b0f"
+checksum = "a809eacf18c8eca8b6635091543f02a5a06ddf3dad846398795460e6e0ae3cc0"
 dependencies = [
  "ahash",
  "android-activity",
diff --git a/alacritty/Cargo.toml b/alacritty/Cargo.toml
index 51f686a8d0d..aa89f8db4b5 100644
--- a/alacritty/Cargo.toml
+++ b/alacritty/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "alacritty"
-version = "0.15.0"
+version = "0.15.1-rc1"
 authors = ["Christian Duerr <contact@christianduerr.com>", "Joe Wilm <joe@jwilm.com>"]
 license = "Apache-2.0"
 description = "A fast, cross-platform, OpenGL terminal emulator"
@@ -12,7 +12,7 @@ rust-version = "1.74.0"
 
 [dependencies.alacritty_terminal]
 path = "../alacritty_terminal"
-version = "0.24.2"
+version = "0.25.0-rc1"
 
 [dependencies.alacritty_config_derive]
 path = "../alacritty_config_derive"
@@ -28,7 +28,7 @@ bitflags = "2.2.1"
 clap = { version = "4.2.7", features = ["derive", "env"] }
 copypasta = { version = "0.10.1", default-features = false }
 crossfont = "0.8.0"
-glutin = { version = "0.32.0", default-features = false, features = ["egl", "wgl"] }
+glutin = { version = "0.32.2", default-features = false, features = ["egl", "wgl"] }
 home = "0.5.5"
 libc = "0.2"
 log = { version = "0.4", features = ["std", "serde"] }
@@ -41,7 +41,7 @@ tempfile = "3.12.0"
 toml = "0.8.2"
 toml_edit = "0.22.21"
 unicode-width = "0.1"
-winit = { version = "0.30.8", default-features = false, features = ["rwh_06", "serde"] }
+winit = { version = "0.30.9", default-features = false, features = ["rwh_06", "serde"] }
 
 [build-dependencies]
 gl_generator = "0.14.0"
diff --git a/alacritty/src/cli.rs b/alacritty/src/cli.rs
index 5010ffc87c0..feac41bd88b 100644
--- a/alacritty/src/cli.rs
+++ b/alacritty/src/cli.rs
@@ -189,7 +189,7 @@ impl TerminalOptions {
             pty_config.shell = Some(command.into());
         }
 
-        pty_config.hold |= self.hold;
+        pty_config.drain_on_exit |= self.hold;
     }
 }
 
@@ -198,7 +198,7 @@ impl From<TerminalOptions> for PtyOptions {
         PtyOptions {
             working_directory: options.working_directory.take(),
             shell: options.command().map(Into::into),
-            hold: options.hold,
+            drain_on_exit: options.hold,
             env: HashMap::new(),
         }
     }
diff --git a/alacritty/src/config/ui_config.rs b/alacritty/src/config/ui_config.rs
index b44bda0d757..960bdbbc7cc 100644
--- a/alacritty/src/config/ui_config.rs
+++ b/alacritty/src/config/ui_config.rs
@@ -37,7 +37,7 @@ use crate::config::LOG_TARGET_CONFIG;
 /// Regex used for the default URL hint.
 #[rustfmt::skip]
 const URL_REGEX: &str = "(ipfs:|ipns:|magnet:|mailto:|gemini://|gopher://|https://|http://|news:|file:|git://|ssh:|ftp://)\
-                         [^\u{0000}-\u{001F}\u{007F}-\u{009F}<>\"\\s{-}\\^⟨⟩`]+";
+                         [^\u{0000}-\u{001F}\u{007F}-\u{009F}<>\"\\s{-}\\^⟨⟩`\\\\]+";
 
 #[derive(ConfigDeserialize, Default, Clone, Debug, PartialEq)]
 pub struct UiConfig {
@@ -130,7 +130,7 @@ impl UiConfig {
         let shell = self.terminal.shell.clone().or_else(|| self.shell.clone()).map(Into::into);
         let working_directory =
             self.working_directory.clone().or_else(|| self.general.working_directory.clone());
-        PtyOptions { working_directory, shell, hold: false, env: HashMap::new() }
+        PtyOptions { working_directory, shell, drain_on_exit: false, env: HashMap::new() }
     }
 
     /// Generate key bindings for all keyboard hints.
diff --git a/alacritty/src/daemon.rs b/alacritty/src/daemon.rs
index c8fb88d1df0..fa530fa0e6e 100644
--- a/alacritty/src/daemon.rs
+++ b/alacritty/src/daemon.rs
@@ -9,6 +9,7 @@ use std::process::{Command, Stdio};
 #[rustfmt::skip]
 #[cfg(not(windows))]
 use {
+    std::env,
     std::error::Error,
     std::os::unix::process::CommandExt,
     std::os::unix::io::RawFd,
@@ -58,18 +59,22 @@ where
 {
     let mut command = Command::new(program);
     command.args(args).stdin(Stdio::null()).stdout(Stdio::null()).stderr(Stdio::null());
-    if let Ok(cwd) = foreground_process_path(master_fd, shell_pid) {
-        command.current_dir(cwd);
-    }
+
+    let working_directory = foreground_process_path(master_fd, shell_pid).ok();
     unsafe {
         command
-            .pre_exec(|| {
+            .pre_exec(move || {
                 match libc::fork() {
                     -1 => return Err(io::Error::last_os_error()),
                     0 => (),
                     _ => libc::_exit(0),
                 }
 
+                // Copy foreground process' working directory, ignoring invalid paths.
+                if let Some(working_directory) = working_directory.as_ref() {
+                    let _ = env::set_current_dir(working_directory);
+                }
+
                 if libc::setsid() == -1 {
                     return Err(io::Error::last_os_error());
                 }
diff --git a/alacritty/src/display/mod.rs b/alacritty/src/display/mod.rs
index 6c685a2ac70..c605f14f560 100644
--- a/alacritty/src/display/mod.rs
+++ b/alacritty/src/display/mod.rs
@@ -5,7 +5,7 @@ use std::cmp;
 use std::fmt::{self, Formatter};
 use std::mem::{self, ManuallyDrop};
 use std::num::NonZeroU32;
-use std::ops::{Deref, DerefMut};
+use std::ops::Deref;
 use std::time::{Duration, Instant};
 
 use glutin::context::{NotCurrentContext, PossiblyCurrentContext};
@@ -388,7 +388,7 @@ pub struct Display {
 
     surface: ManuallyDrop<Surface<WindowSurface>>,
 
-    context: ManuallyDrop<Replaceable<PossiblyCurrentContext>>,
+    context: ManuallyDrop<PossiblyCurrentContext>,
 
     glyph_cache: GlyphCache,
     meter: Meter,
@@ -510,7 +510,7 @@ impl Display {
         }
 
         Ok(Self {
-            context: ManuallyDrop::new(Replaceable::new(context)),
+            context: ManuallyDrop::new(context),
             visual_bell: VisualBell::from(&config.bell),
             renderer: ManuallyDrop::new(renderer),
             surface: ManuallyDrop::new(surface),
@@ -538,29 +538,24 @@ impl Display {
 
     #[inline]
     pub fn gl_context(&self) -> &PossiblyCurrentContext {
-        self.context.get()
+        &self.context
     }
 
     pub fn make_not_current(&mut self) {
-        if self.context.get().is_current() {
-            self.context.replace_with(|context| {
-                context
-                    .make_not_current()
-                    .expect("failed to disable context")
-                    .treat_as_possibly_current()
-            });
+        if self.context.is_current() {
+            self.context.make_not_current_in_place().expect("failed to disable context");
         }
     }
 
     pub fn make_current(&self) {
-        if !self.context.get().is_current() {
+        if !self.context.is_current() {
             self.context.make_current(&self.surface).expect("failed to make context current")
         }
     }
 
     fn swap_buffers(&self) {
         #[allow(clippy::single_match)]
-        let res = match (self.surface.deref(), &self.context.get()) {
+        let res = match (self.surface.deref(), &self.context.deref()) {
             #[cfg(not(any(target_os = "macos", windows)))]
             (Surface::Egl(surface), PossiblyCurrentContext::Egl(context))
                 if matches!(self.raw_window_handle, RawWindowHandle::Wayland(_))
@@ -1504,47 +1499,6 @@ pub struct RendererUpdate {
     clear_font_cache: bool,
 }
 
-/// Struct for safe in-place replacement.
-///
-/// This struct allows easily replacing struct fields that provide `self -> Self` methods in-place,
-/// without having to deal with constantly unwrapping the underlying [`Option`].
-struct Replaceable<T>(Option<T>);
-
-impl<T> Replaceable<T> {
-    pub fn new(inner: T) -> Self {
-        Self(Some(inner))
-    }
-
-    /// Replace the contents of the container.
-    pub fn replace_with<F: FnMut(T) -> T>(&mut self, f: F) {
-        self.0 = self.0.take().map(f);
-    }
-
-    /// Get immutable access to the wrapped value.
-    pub fn get(&self) -> &T {
-        self.0.as_ref().unwrap()
-    }
-
-    /// Get mutable access to the wrapped value.
-    pub fn get_mut(&mut self) -> &mut T {
-        self.0.as_mut().unwrap()
-    }
-}
-
-impl<T> Deref for Replaceable<T> {
-    type Target = T;
-
-    fn deref(&self) -> &Self::Target {
-        self.get()
-    }
-}
-
-impl<T> DerefMut for Replaceable<T> {
-    fn deref_mut(&mut self) -> &mut Self::Target {
-        self.get_mut()
-    }
-}
-
 /// The frame timer state.
 pub struct FrameTimer {
     /// Base timestamp used to compute sync points.
diff --git a/alacritty/src/display/window.rs b/alacritty/src/display/window.rs
index fe40fab52f6..f9fb9272fb8 100644
--- a/alacritty/src/display/window.rs
+++ b/alacritty/src/display/window.rs
@@ -109,6 +109,9 @@ pub struct Window {
     /// Flag indicating whether redraw was requested.
     pub requested_redraw: bool,
 
+    /// Hold the window when terminal exits.
+    pub hold: bool,
+
     window: WinitWindow,
 
     /// Current window title.
@@ -127,7 +130,7 @@ impl Window {
         event_loop: &ActiveEventLoop,
         config: &UiConfig,
         identity: &Identity,
-        _options: &mut WindowOptions,
+        options: &mut WindowOptions,
         #[rustfmt::skip]
         #[cfg(all(feature = "x11", not(any(target_os = "macos", windows))))]
         x11_visual: Option<X11VisualInfo>,
@@ -139,7 +142,7 @@ impl Window {
             #[cfg(all(feature = "x11", not(any(target_os = "macos", windows))))]
             x11_visual,
             #[cfg(target_os = "macos")]
-            &_options.window_tabbing_id.take(),
+            &options.window_tabbing_id.take(),
         );
 
         if let Some(position) = config.window.position {
@@ -148,7 +151,7 @@ impl Window {
         }
 
         #[cfg(not(any(target_os = "macos", windows)))]
-        if let Some(token) = _options
+        if let Some(token) = options
             .activation_token
             .take()
             .map(ActivationToken::from_raw)
@@ -199,6 +202,7 @@ impl Window {
         let is_x11 = matches!(window.window_handle().unwrap().as_raw(), RawWindowHandle::Xlib(_));
 
         Ok(Self {
+            hold: options.terminal_options.hold,
             requested_redraw: false,
             title: identity.title,
             current_mouse_cursor,
diff --git a/alacritty/src/event.rs b/alacritty/src/event.rs
index 2ac6279d9d6..c761f5aeed9 100644
--- a/alacritty/src/event.rs
+++ b/alacritty/src/event.rs
@@ -4,6 +4,7 @@ use crate::ConfigMonitor;
 use glutin::config::GetGlConfig;
 use std::borrow::Cow;
 use std::cmp::min;
+use std::collections::hash_map::Entry;
 use std::collections::{HashMap, HashSet, VecDeque};
 use std::error::Error;
 use std::ffi::OsStr;
@@ -380,9 +381,14 @@ impl ApplicationHandler<Event> for Processor {
             },
             (EventType::Terminal(TerminalEvent::Exit), Some(window_id)) => {
                 // Remove the closed terminal.
-                let window_context = match self.windows.remove(window_id) {
-                    Some(window_context) => window_context,
-                    None => return,
+                let window_context = match self.windows.entry(*window_id) {
+                    // Don't exit when terminal exits if user asked to hold the window.
+                    Entry::Occupied(window_context)
+                        if !window_context.get().display.window.hold =>
+                    {
+                        window_context.remove()
+                    },
+                    _ => return,
                 };
 
                 // Unschedule pending events.
@@ -838,9 +844,8 @@ impl<'a, N: Notify + 'a, T: EventListener> input::ActionContext<T> for ActionCon
     #[cfg(not(windows))]
     fn create_new_window(&mut self, #[cfg(target_os = "macos")] tabbing_id: Option<String>) {
         let mut options = WindowOptions::default();
-        if let Ok(working_directory) = foreground_process_path(self.master_fd, self.shell_pid) {
-            options.terminal_options.working_directory = Some(working_directory);
-        }
+        options.terminal_options.working_directory =
+            foreground_process_path(self.master_fd, self.shell_pid).ok();
 
         #[cfg(target_os = "macos")]
         {
@@ -869,7 +874,7 @@ impl<'a, N: Notify + 'a, T: EventListener> input::ActionContext<T> for ActionCon
 
         match result {
             Ok(_) => debug!("Launched {} with args {:?}", program, args),
-            Err(_) => warn!("Unable to launch {} with args {:?}", program, args),
+            Err(err) => warn!("Unable to launch {program} with args {args:?}: {err}"),
         }
     }
 
@@ -1793,7 +1798,11 @@ impl input::Processor<EventProxy, ActionContext<'_, Notifier, EventProxy>> {
             },
             WinitEvent::WindowEvent { event, .. } => {
                 match event {
-                    WindowEvent::CloseRequested => self.ctx.terminal.exit(),
+                    WindowEvent::CloseRequested => {
+                        // User asked to close the window, so no need to hold it.
+                        self.ctx.window().hold = false;
+                        self.ctx.terminal.exit();
+                    },
                     WindowEvent::ScaleFactorChanged { scale_factor, .. } => {
                         let old_scale_factor =
                             mem::replace(&mut self.ctx.window().scale_factor, scale_factor);
diff --git a/alacritty/src/input/keyboard.rs b/alacritty/src/input/keyboard.rs
index af9bfbb2507..417f599b5d6 100644
--- a/alacritty/src/input/keyboard.rs
+++ b/alacritty/src/input/keyboard.rs
@@ -342,18 +342,21 @@ impl SequenceBuilder {
         };
 
         if character.chars().count() == 1 {
-            let character = character.chars().next().unwrap();
-            let base_character = character.to_lowercase().next().unwrap();
+            let shift = self.modifiers.contains(SequenceModifiers::SHIFT);
 
-            let alternate_key_code = u32::from(character);
-            let mut unicode_key_code = u32::from(base_character);
+            let ch = character.chars().next().unwrap();
+            let unshifted_ch = if shift { ch.to_lowercase().next().unwrap() } else { ch };
+
+            let alternate_key_code = u32::from(ch);
+            let mut unicode_key_code = u32::from(unshifted_ch);
 
             // Try to get the base for keys which change based on modifier, like `1` for `!`.
-            match key.key_without_modifiers().as_ref() {
-                Key::Character(unmodded) if alternate_key_code == unicode_key_code => {
-                    unicode_key_code = u32::from(unmodded.chars().next().unwrap_or(base_character));
-                },
-                _ => (),
+            //
+            // However it should only be performed when `SHIFT` is pressed.
+            if shift && alternate_key_code == unicode_key_code {
+                if let Key::Character(unmodded) = key.key_without_modifiers().as_ref() {
+                    unicode_key_code = u32::from(unmodded.chars().next().unwrap_or(unshifted_ch));
+                }
             }
 
             // NOTE: Base layouts are ignored, since winit doesn't expose this information
diff --git a/alacritty/src/input/mod.rs b/alacritty/src/input/mod.rs
index 60a505290cd..3f85512f2f7 100644
--- a/alacritty/src/input/mod.rs
+++ b/alacritty/src/input/mod.rs
@@ -324,7 +324,10 @@ impl<T: EventListener> Execute<T> for Action {
             #[cfg(not(target_os = "macos"))]
             Action::Hide => ctx.window().set_visible(false),
             Action::Minimize => ctx.window().set_minimized(true),
-            Action::Quit => ctx.terminal_mut().exit(),
+            Action::Quit => {
+                ctx.window().hold = false;
+                ctx.terminal_mut().exit();
+            },
             Action::IncreaseFontSize => ctx.change_font_size(FONT_SIZE_STEP),
             Action::DecreaseFontSize => ctx.change_font_size(-FONT_SIZE_STEP),
             Action::ResetFontSize => ctx.reset_font_size(),
diff --git a/alacritty/src/ipc.rs b/alacritty/src/ipc.rs
index 3d14c4cea52..919035a6e56 100644
--- a/alacritty/src/ipc.rs
+++ b/alacritty/src/ipc.rs
@@ -19,7 +19,10 @@ use crate::event::{Event, EventType};
 const ALACRITTY_SOCKET_ENV: &str = "ALACRITTY_SOCKET";
 
 /// Create an IPC socket.
-pub fn spawn_ipc_socket(options: &Options, event_proxy: EventLoopProxy<Event>) -> Option<PathBuf> {
+pub fn spawn_ipc_socket(
+    options: &Options,
+    event_proxy: EventLoopProxy<Event>,
+) -> IoResult<PathBuf> {
     // Create the IPC socket and export its path as env.
 
     let socket_path = options.socket.clone().unwrap_or_else(|| {
@@ -28,13 +31,7 @@ pub fn spawn_ipc_socket(options: &Options, event_proxy: EventLoopProxy<Event>) -
         path
     });
 
-    let listener = match UnixListener::bind(&socket_path) {
-        Ok(listener) => listener,
-        Err(err) => {
-            warn!("Unable to create socket: {:?}", err);
-            return None;
-        },
-    };
+    let listener = UnixListener::bind(&socket_path)?;
 
     env::set_var(ALACRITTY_SOCKET_ENV, socket_path.as_os_str());
     if options.daemon {
@@ -80,7 +77,7 @@ pub fn spawn_ipc_socket(options: &Options, event_proxy: EventLoopProxy<Event>) -
         }
     });
 
-    Some(socket_path)
+    Ok(socket_path)
 }
 
 /// Send a message to the active Alacritty socket.
diff --git a/alacritty/src/main.rs b/alacritty/src/main.rs
index 5382e475170..9260bfa4f3b 100644
--- a/alacritty/src/main.rs
+++ b/alacritty/src/main.rs
@@ -183,7 +183,14 @@ fn alacritty(mut options: Options) -> Result<(), Box<dyn Error>> {
     // Create the IPC socket listener.
     #[cfg(unix)]
     let socket_path = if config.ipc_socket() {
-        ipc::spawn_ipc_socket(&options, window_event_loop.create_proxy())
+        match ipc::spawn_ipc_socket(&options, window_event_loop.create_proxy()) {
+            Ok(path) => Some(path),
+            Err(err) if options.daemon => return Err(err.into()),
+            Err(err) => {
+                log::warn!("Unable to create socket: {:?}", err);
+                None
+            },
+        }
     } else {
         None
     };
diff --git a/alacritty/src/window_context.rs b/alacritty/src/window_context.rs
index e3c39382b89..a0e66cc01c3 100644
--- a/alacritty/src/window_context.rs
+++ b/alacritty/src/window_context.rs
@@ -212,7 +212,7 @@ impl WindowContext {
             Arc::clone(&terminal),
             event_proxy.clone(),
             pty,
-            pty_config.hold,
+            pty_config.drain_on_exit,
             config.debug.ref_test,
         )?;
 
diff --git a/alacritty/windows/wix/alacritty.wxs b/alacritty/windows/wix/alacritty.wxs
index 274d82a5949..47f4dabfd9e 100644
--- a/alacritty/windows/wix/alacritty.wxs
+++ b/alacritty/windows/wix/alacritty.wxs
@@ -1,5 +1,5 @@
 <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:ui="http://wixtoolset.org/schemas/v4/wxs/ui">
-   <Package Name="Alacritty" UpgradeCode="87c21c74-dbd5-4584-89d5-46d9cd0c40a7" Language="1033" Codepage="1252" Version="0.15.0" Manufacturer="Alacritty" InstallerVersion="200">
+   <Package Name="Alacritty" UpgradeCode="87c21c74-dbd5-4584-89d5-46d9cd0c40a7" Language="1033" Codepage="1252" Version="0.15.1-rc1" Manufacturer="Alacritty" InstallerVersion="200">
       <MajorUpgrade AllowSameVersionUpgrades="yes" DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
       <Icon Id="AlacrittyIco" SourceFile=".\alacritty\windows\alacritty.ico" />
       <WixVariable Id="WixUILicenseRtf" Value=".\alacritty\windows\wix\license.rtf" />
diff --git a/alacritty_terminal/CHANGELOG.md b/alacritty_terminal/CHANGELOG.md
index cb7235c23b4..25216451409 100644
--- a/alacritty_terminal/CHANGELOG.md
+++ b/alacritty_terminal/CHANGELOG.md
@@ -8,6 +8,12 @@ sections should follow the order `Added`, `Changed`, `Deprecated`, `Fixed` and
 
 The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
 
+## 0.25.0-rc1
+
+### Changed
+
+- Replaced `Options::hold` with `Options::drain_on_exit` that drains, but doesn't hold, since holding can be done outside of alacritty_terminal
+
 ## 0.24.2
 
 ### Added
diff --git a/alacritty_terminal/Cargo.toml b/alacritty_terminal/Cargo.toml
index 4a04c0c2b40..d216b87832d 100644
--- a/alacritty_terminal/Cargo.toml
+++ b/alacritty_terminal/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "alacritty_terminal"
-version = "0.24.2"
+version = "0.25.0-rc1"
 authors = ["Christian Duerr <contact@christianduerr.com>", "Joe Wilm <joe@jwilm.com>"]
 license = "Apache-2.0"
 description = "Library for writing terminal emulators"
diff --git a/alacritty_terminal/src/event_loop.rs b/alacritty_terminal/src/event_loop.rs
index 62dd7440239..58f6b840586 100644
--- a/alacritty_terminal/src/event_loop.rs
+++ b/alacritty_terminal/src/event_loop.rs
@@ -50,7 +50,7 @@ pub struct EventLoop<T: tty::EventedPty, U: EventListener> {
     tx: Sender<Msg>,
     terminal: Arc<FairMutex<Term<U>>>,
     event_proxy: U,
-    hold: bool,
+    drain_on_exit: bool,
     ref_test: bool,
 }
 
@@ -64,7 +64,7 @@ where
         terminal: Arc<FairMutex<Term<U>>>,
         event_proxy: U,
         pty: T,
-        hold: bool,
+        drain_on_exit: bool,
         ref_test: bool,
     ) -> io::Result<EventLoop<T, U>> {
         let (tx, rx) = mpsc::channel();
@@ -76,7 +76,7 @@ where
             rx: PeekableReceiver::new(rx),
             terminal,
             event_proxy,
-            hold,
+            drain_on_exit,
             ref_test,
         })
     }
@@ -263,13 +263,10 @@ where
                                 if let Some(code) = code {
                                     self.event_proxy.send_event(Event::ChildExit(code));
                                 }
-                                if self.hold {
-                                    // With hold enabled, make sure the PTY is drained.
+                                if self.drain_on_exit {
                                     let _ = self.pty_read(&mut state, &mut buf, pipe.as_mut());
-                                } else {
-                                    // Without hold, shutdown the terminal.
-                                    self.terminal.lock().exit();
                                 }
+                                self.terminal.lock().exit();
                                 self.event_proxy.send_event(Event::Wakeup);
                                 break 'event_loop;
                             }
diff --git a/alacritty_terminal/src/tty/mod.rs b/alacritty_terminal/src/tty/mod.rs
index eed2a76dc28..208547bac10 100644
--- a/alacritty_terminal/src/tty/mod.rs
+++ b/alacritty_terminal/src/tty/mod.rs
@@ -28,8 +28,8 @@ pub struct Options {
     /// Shell startup directory.
     pub working_directory: Option<PathBuf>,
 
-    /// Remain open after child process exits.
-    pub hold: bool,
+    /// Drain the child process output before exiting the terminal.
+    pub drain_on_exit: bool,
 
     /// Extra environment variables.
     pub env: HashMap<String, String>,
diff --git a/alacritty_terminal/src/tty/unix.rs b/alacritty_terminal/src/tty/unix.rs
index 6565f20b8d9..e3db51fb8ee 100644
--- a/alacritty_terminal/src/tty/unix.rs
+++ b/alacritty_terminal/src/tty/unix.rs
@@ -231,6 +231,7 @@ pub fn from_fd(config: &Options, window_id: u64, master: OwnedFd, slave: OwnedFd
     builder.env_remove("XDG_ACTIVATION_TOKEN");
     builder.env_remove("DESKTOP_STARTUP_ID");
 
+    let working_directory = config.working_directory.clone();
     unsafe {
         builder.pre_exec(move || {
             // Create a new process group.
@@ -239,6 +240,11 @@ pub fn from_fd(config: &Options, window_id: u64, master: OwnedFd, slave: OwnedFd
                 return Err(Error::new(ErrorKind::Other, "Failed to set session id"));
             }
 
+            // Set working directory, ignoring invalid paths.
+            if let Some(working_directory) = working_directory.as_ref() {
+                let _ = env::set_current_dir(working_directory);
+            }
+
             set_controlling_terminal(slave_fd);
 
             // No longer need slave/master fds.
@@ -256,11 +262,6 @@ pub fn from_fd(config: &Options, window_id: u64, master: OwnedFd, slave: OwnedFd
         });
     }
 
-    // Handle set working directory option.
-    if let Some(dir) = &config.working_directory {
-        builder.current_dir(dir);
-    }
-
     // Prepare signal handling before spawning child.
     let (signals, sig_id) = {
         let (sender, recv) = UnixStream::pair()?;
diff --git a/extra/man/alacritty.5.scd b/extra/man/alacritty.5.scd
index 1817248787d..e2f5b252e51 100644
--- a/extra/man/alacritty.5.scd
+++ b/extra/man/alacritty.5.scd
@@ -740,7 +740,8 @@ post_processing = _true_++
 persist         = _false_++
 mouse.enabled   = _true_++
 binding         = { key = _"O"_, mods = _"Control|Shift"_ }++
-regex = _"(ipfs:|ipns:|magnet:|mailto:|gemini://|gopher://|https://|http://|news:|file:|git://|ssh:|ftp://)[^\\u0000-\\u001F\\u007F-\\u009F<>\\"\\\\s{-}\\\\^⟨⟩`]+"_
+regex =
+_"(ipfs:|ipns:|magnet:|mailto:|gemini://|gopher://|https://|http://|news:|file:|git://|ssh:|ftp://)[^\\u0000-\\u001F\\u007F-\\u009F<>\\"\\\\s{-}\\\\^⟨⟩`\\\\\\\\]+"_
 
 # KEYBOARD
 
diff --git a/extra/osx/Alacritty.app/Contents/Info.plist b/extra/osx/Alacritty.app/Contents/Info.plist
index e35fc70ef86..48df9b38b2b 100644
--- a/extra/osx/Alacritty.app/Contents/Info.plist
+++ b/extra/osx/Alacritty.app/Contents/Info.plist
@@ -15,7 +15,7 @@
   <key>CFBundlePackageType</key>
   <string>APPL</string>
   <key>CFBundleShortVersionString</key>
-  <string>0.15.0</string>
+  <string>0.15.1-rc1</string>
   <key>CFBundleSupportedPlatforms</key>
   <array>
     <string>MacOSX</string>


Test patch: