summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Duerr <contact@christianduerr.com>2021-01-01 05:07:39 +0000
committerGitHub <noreply@github.com>2021-01-01 05:07:39 +0000
commit8ed72cc065255007a7f0687e3b8a540e8c6202c6 (patch)
tree97be52ae4c288fcfeb849d1f97f7a5efc9c2dab1
parent1723e30d25f0c6068f9532448b016a89aa491a95 (diff)
downloadalacritty-8ed72cc065255007a7f0687e3b8a540e8c6202c6.tar.gz
alacritty-8ed72cc065255007a7f0687e3b8a540e8c6202c6.zip
Remove Windows WinPTY backend
-rw-r--r--.github/ISSUE_TEMPLATE.md5
-rw-r--r--CHANGELOG.md1
-rw-r--r--Cargo.lock445
-rw-r--r--INSTALL.md1
-rw-r--r--README.md6
-rw-r--r--alacritty.yml10
-rw-r--r--alacritty/Cargo.toml1
-rw-r--r--alacritty/src/cli.rs3
-rw-r--r--alacritty/src/config/bindings.rs101
-rw-r--r--alacritty/src/event.rs3
-rw-r--r--alacritty/src/input.rs6
-rw-r--r--alacritty_terminal/Cargo.toml5
-rw-r--r--alacritty_terminal/src/config/mod.rs4
-rw-r--r--alacritty_terminal/src/grid/tests.rs4
-rw-r--r--alacritty_terminal/src/tty/windows/automatic_backend.rs190
-rw-r--r--alacritty_terminal/src/tty/windows/conpty.rs65
-rw-r--r--alacritty_terminal/src/tty/windows/mod.rs21
-rw-r--r--alacritty_terminal/src/tty/windows/winpty.rs70
18 files changed, 77 insertions, 864 deletions
diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
index 5fffe15c..4011d6bb 100644
--- a/.github/ISSUE_TEMPLATE.md
+++ b/.github/ISSUE_TEMPLATE.md
@@ -1,11 +1,12 @@
-For bug reports, the following information can help speed up the process. Please describe the bug that you have found and what you would expect to happen instead.
+For bug reports, the following information can help speed up the process. Please
+describe the bug that you have found and what you would expect to happen
+instead.
### System
OS: Linux/BSD/macOS/Windows
Version: `alacritty --version` output
Linux/BSD: X11/Wayland, DE or Compositor and WM
-Windows: WinPTY/ConPTY (see `alacritty -v` output)
### Logs
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 78f74a8d..a94c3a4d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -62,6 +62,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- `live-shader-reload` feature
- Config option `dynamic_title`, you should use `window.dynamic_title` instead
- Config option `scrolling.faux_multiplier`, which was replaced by escape `CSI ? 1007 h/l`
+- WinPTY support on Windows
## 0.6.0
diff --git a/Cargo.lock b/Cargo.lock
index c2fb959c..e531f683 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -13,15 +13,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234"
[[package]]
-name = "aho-corasick"
-version = "0.7.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5"
-dependencies = [
- "memchr",
-]
-
-[[package]]
name = "alacritty"
version = "0.7.0-dev"
dependencies = [
@@ -81,7 +72,6 @@ dependencies = [
"mio",
"mio-anonymous-pipes",
"mio-extras",
- "mio-named-pipes",
"miow 0.3.6",
"nix",
"parking_lot",
@@ -93,7 +83,6 @@ dependencies = [
"unicode-width",
"vte",
"winapi 0.3.9",
- "winpty",
]
[[package]]
@@ -166,30 +155,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
[[package]]
-name = "bindgen"
-version = "0.53.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c72a978d268b1d70b0e963217e60fdabd9523a941457a6c42a7315d15c7e89e5"
-dependencies = [
- "bitflags",
- "cexpr",
- "cfg-if 0.1.10",
- "clang-sys",
- "clap",
- "env_logger",
- "lazy_static",
- "lazycell",
- "log",
- "peeking_take_while",
- "proc-macro2",
- "quote",
- "regex",
- "rustc-hash",
- "shlex",
- "which",
-]
-
-[[package]]
name = "bitflags"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -219,27 +184,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de"
[[package]]
-name = "bzip2"
-version = "0.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "42b7c3cbf0fa9c1b82308d57191728ca0256cb821220f4e2fd410a72ade26e3b"
-dependencies = [
- "bzip2-sys",
- "libc",
-]
-
-[[package]]
-name = "bzip2-sys"
-version = "0.1.9+1.0.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ad3b39a260062fca31f7b0b12f207e8f2590a67d32ec7d59c20484b07ea7285e"
-dependencies = [
- "cc",
- "libc",
- "pkg-config",
-]
-
-[[package]]
name = "calloop"
version = "0.6.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -254,18 +198,6 @@ name = "cc"
version = "1.0.66"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4c0496836a84f8d0495758516b8621a622beb77c0fed418570e50764093ced48"
-dependencies = [
- "jobserver",
-]
-
-[[package]]
-name = "cexpr"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f4aedb84272dbe89af497cf81375129abda4fc0a9e7c5d317498c15cc30c0d27"
-dependencies = [
- "nom 5.1.2",
-]
[[package]]
name = "cfg-if"
@@ -289,17 +221,6 @@ dependencies = [
]
[[package]]
-name = "clang-sys"
-version = "0.29.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fe6837df1d5cba2397b835c8530f51723267e16abbf83892e9e5af4f0e5dd10a"
-dependencies = [
- "glob",
- "libc",
- "libloading 0.5.2",
-]
-
-[[package]]
name = "clap"
version = "2.33.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -623,7 +544,7 @@ version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b11f15d1e3268f140f68d390637d5e76d849782d971ae7063e0da69fe9709a76"
dependencies = [
- "libloading 0.6.4",
+ "libloading",
]
[[package]]
@@ -663,19 +584,6 @@ dependencies = [
]
[[package]]
-name = "env_logger"
-version = "0.7.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36"
-dependencies = [
- "atty",
- "humantime",
- "log",
- "regex",
- "termcolor",
-]
-
-[[package]]
name = "expat-sys"
version = "2.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -698,18 +606,6 @@ dependencies = [
]
[[package]]
-name = "flate2"
-version = "1.0.14"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2cfff41391129e0a856d6d822600b8d71179d46879e310417eb9c762eb178b42"
-dependencies = [
- "cfg-if 0.1.10",
- "crc32fast",
- "libc",
- "miniz_oxide",
-]
-
-[[package]]
name = "fnv"
version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -837,12 +733,6 @@ dependencies = [
]
[[package]]
-name = "glob"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
-
-[[package]]
name = "glutin"
version = "0.26.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -858,7 +748,7 @@ dependencies = [
"glutin_glx_sys",
"glutin_wgl_sys",
"lazy_static",
- "libloading 0.6.4",
+ "libloading",
"log",
"objc",
"osmesa-sys",
@@ -924,25 +814,6 @@ dependencies = [
]
[[package]]
-name = "http_req"
-version = "0.5.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef9a6b5b2cd80630d9c6bda175408a86908d8a9c1eb5b2857206529d88d063a3"
-dependencies = [
- "native-tls",
- "unicase",
-]
-
-[[package]]
-name = "humantime"
-version = "1.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f"
-dependencies = [
- "quick-error",
-]
-
-[[package]]
name = "ident_case"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -999,15 +870,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
[[package]]
-name = "jobserver"
-version = "0.1.21"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c71313ebb9439f74b00d9d2dcec36440beaf57a6aa0623068441dd7cd81a7f2"
-dependencies = [
- "libc",
-]
-
-[[package]]
name = "kernel32-sys"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1049,16 +911,6 @@ checksum = "1482821306169ec4d07f6aca392a4681f66c75c9918aa49641a2595db64053cb"
[[package]]
name = "libloading"
-version = "0.5.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f2b111a074963af1d37a139918ac6d49ad1d0d5e47f72fd55388619691a7d753"
-dependencies = [
- "cc",
- "winapi 0.3.9",
-]
-
-[[package]]
-name = "libloading"
version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3557c9384f7f757f6d139cd3a4c62ef4e850696c16bf27924a5538c8a09717a1"
@@ -1175,18 +1027,6 @@ dependencies = [
]
[[package]]
-name = "mio-named-pipes"
-version = "0.1.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0840c1c50fd55e521b247f949c241c9997709f23bd7f023b9762cd561e935656"
-dependencies = [
- "log",
- "mio",
- "miow 0.3.6",
- "winapi 0.3.9",
-]
-
-[[package]]
name = "miow"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1209,24 +1049,6 @@ dependencies = [
]
[[package]]
-name = "native-tls"
-version = "0.2.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b8d96b2e1c8da3957d58100b09f102c6d9cfdfced01b7ec5a8974044bb09dbd4"
-dependencies = [
- "lazy_static",
- "libc",
- "log",
- "openssl",
- "openssl-probe",
- "openssl-sys",
- "schannel",
- "security-framework",
- "security-framework-sys",
- "tempfile",
-]
-
-[[package]]
name = "ndk"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1296,16 +1118,6 @@ dependencies = [
[[package]]
name = "nom"
-version = "5.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af"
-dependencies = [
- "memchr",
- "version_check",
-]
-
-[[package]]
-name = "nom"
version = "6.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "88034cfd6b4a0d54dd14f4a507eceee36c0b70e5a02236c4e4df571102be17f0"
@@ -1390,39 +1202,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "13bd41f508810a131401606d54ac32a467c97172d74ba7662562ebba5ad07fa0"
[[package]]
-name = "openssl"
-version = "0.10.32"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "038d43985d1ddca7a9900630d8cd031b56e4794eecc2e9ea39dd17aa04399a70"
-dependencies = [
- "bitflags",
- "cfg-if 1.0.0",
- "foreign-types 0.3.2",
- "lazy_static",
- "libc",
- "openssl-sys",
-]
-
-[[package]]
-name = "openssl-probe"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de"
-
-[[package]]
-name = "openssl-sys"
-version = "0.9.60"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "921fc71883267538946025deffb622905ecad223c28efbfdef9bb59a0175f3e6"
-dependencies = [
- "autocfg",
- "cc",
- "libc",
- "pkg-config",
- "vcpkg",
-]
-
-[[package]]
name = "osmesa-sys"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1467,12 +1246,6 @@ dependencies = [
]
[[package]]
-name = "peeking_take_while"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
-
-[[package]]
name = "percent-encoding"
version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1496,12 +1269,6 @@ dependencies = [
]
[[package]]
-name = "ppv-lite86"
-version = "0.2.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"
-
-[[package]]
name = "proc-macro-crate"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1520,12 +1287,6 @@ dependencies = [
]
[[package]]
-name = "quick-error"
-version = "1.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
-
-[[package]]
name = "quote"
version = "1.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1535,47 +1296,6 @@ dependencies = [
]
[[package]]
-name = "rand"
-version = "0.7.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
-dependencies = [
- "getrandom",
- "libc",
- "rand_chacha",
- "rand_core",
- "rand_hc",
-]
-
-[[package]]
-name = "rand_chacha"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
-dependencies = [
- "ppv-lite86",
- "rand_core",
-]
-
-[[package]]
-name = "rand_core"
-version = "0.5.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
-dependencies = [
- "getrandom",
-]
-
-[[package]]
-name = "rand_hc"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
-dependencies = [
- "rand_core",
-]
-
-[[package]]
name = "raw-window-handle"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1602,18 +1322,6 @@ dependencies = [
]
[[package]]
-name = "regex"
-version = "1.4.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "38cf2c13ed4745de91a5eb834e11c00bcc3709e773173b2ce4c56c9fbde04b9c"
-dependencies = [
- "aho-corasick",
- "memchr",
- "regex-syntax",
- "thread_local",
-]
-
-[[package]]
name = "regex-automata"
version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1630,15 +1338,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b181ba2dcf07aaccad5448e8ead58db5b742cf85dfe035e2227f137a539a189"
[[package]]
-name = "remove_dir_all"
-version = "0.5.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
-dependencies = [
- "winapi 0.3.9",
-]
-
-[[package]]
name = "rust-argon2"
version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1651,12 +1350,6 @@ dependencies = [
]
[[package]]
-name = "rustc-hash"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
-
-[[package]]
name = "rusttype"
version = "0.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1682,16 +1375,6 @@ dependencies = [
]
[[package]]
-name = "schannel"
-version = "0.1.19"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75"
-dependencies = [
- "lazy_static",
- "winapi 0.3.9",
-]
-
-[[package]]
name = "scoped-tls"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1704,29 +1387,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
[[package]]
-name = "security-framework"
-version = "2.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c1759c2e3c8580017a484a7ac56d3abc5a6c1feadf88db2f3633f12ae4268c69"
-dependencies = [
- "bitflags",
- "core-foundation 0.9.1",
- "core-foundation-sys 0.8.2",
- "libc",
- "security-framework-sys",
-]
-
-[[package]]
-name = "security-framework-sys"
-version = "2.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f99b9d5e26d2a71633cc4f2ebae7cc9f874044e0c351a27e17892d76dce5678b"
-dependencies = [
- "core-foundation-sys 0.8.2",
- "libc",
-]
-
-[[package]]
name = "serde"
version = "1.0.118"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1801,12 +1461,6 @@ dependencies = [
]
[[package]]
-name = "shlex"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2"
-
-[[package]]
name = "signal-hook"
version = "0.1.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1908,29 +1562,6 @@ dependencies = [
]
[[package]]
-name = "tempfile"
-version = "3.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9"
-dependencies = [
- "cfg-if 0.1.10",
- "libc",
- "rand",
- "redox_syscall",
- "remove_dir_all",
- "winapi 0.3.9",
-]
-
-[[package]]
-name = "termcolor"
-version = "1.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4"
-dependencies = [
- "winapi-util",
-]
-
-[[package]]
name = "textwrap"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1960,15 +1591,6 @@ dependencies = [
]
[[package]]
-name = "thread_local"
-version = "1.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14"
-dependencies = [
- "lazy_static",
-]
-
-[[package]]
name = "time"
version = "0.1.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1995,15 +1617,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3e5d7cd7ab3e47dda6e56542f4bbf3824c15234958c6e1bd6aaa347e93499fdc"
[[package]]
-name = "unicase"
-version = "2.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
-dependencies = [
- "version_check",
-]
-
-[[package]]
name = "unicode-width"
version = "0.1.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2027,12 +1640,6 @@ version = "0.2.0"
source = "git+https://github.com/alacritty/vte#b4b08a6de09ebecc6a4c14c81435418fd5a4e8a8"
[[package]]
-name = "vcpkg"
-version = "0.2.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b00bca6106a5e23f3eee943593759b7fcddb00554332e856d990c893966879fb"
-
-[[package]]
name = "vec_map"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2189,15 +1796,6 @@ dependencies = [
]
[[package]]
-name = "which"
-version = "3.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d011071ae14a2f6671d0b74080ae0cd8ebf3a6f8c9589a2cd45f23126fe29724"
-dependencies = [
- "libc",
-]
-
-[[package]]
name = "winapi"
version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2273,29 +1871,6 @@ dependencies = [
]
[[package]]
-name = "winpty"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "92c5a39bb2408a307dd5ab774039ec3f2c68d052970ae4dacc346101abe202b2"
-dependencies = [
- "bitflags",
- "http_req",
- "tempfile",
- "winpty-sys",
- "zip",
-]
-
-[[package]]
-name = "winpty-sys"
-version = "0.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ed8a179a59760dc51d30b5e6eaf1bd6da88461f72f2616e962ddebef7e413210"
-dependencies = [
- "bindgen",
- "cc",
-]
-
-[[package]]
name = "winreg"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2360,7 +1935,7 @@ version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3a9a231574ae78801646617cefd13bfe94be907c0e4fa979cfd8b770aa3c5d08"
dependencies = [
- "nom 6.0.1",
+ "nom",
]
[[package]]
@@ -2383,17 +1958,3 @@ checksum = "39f0c922f1a334134dc2f7a8b67dc5d25f0735263feec974345ff706bcf20b0d"
dependencies = [
"linked-hash-map",
]
-
-[[package]]
-name = "zip"
-version = "0.5.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cc2896475a242c41366941faa27264df2cb935185a92e059a004d0048feb2ac5"
-dependencies = [
- "byteorder",
- "bzip2",
- "crc32fast",
- "flate2",
- "thiserror",
- "time",
-]
diff --git a/INSTALL.md b/INSTALL.md
index 29db5f24..d12b1639 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -240,7 +240,6 @@ cargo build --release
```
If all goes well, this should place a binary at `target/release/alacritty`.
-On Windows this directory should also contain the `winpty-agent.exe`.
### macOS
diff --git a/README.md b/README.md
index 13f692be..7aa0fcd2 100644
--- a/README.md
+++ b/README.md
@@ -44,12 +44,6 @@ macOS and Windows.
Prebuilt binaries for macOS and Windows can also be downloaded from the
[GitHub releases page](https://github.com/alacritty/alacritty/releases).
-On Windows, Alacritty requires winpty to emulate UNIX's PTY API for versions
-older than Windows 10 (October 2018 Update) and Microsoft's VC++
-redistributable. The winpty agent (`winpty-agent.exe`) **must** be in the same
-directory as the Alacritty executable and is available through the
-[GitHub releases page](https://github.com/alacritty/alacritty/releases).
-
For everyone else, the detailed instructions to install Alacritty can be found
[here](INSTALL.md).
diff --git a/alacritty.yml b/alacritty.yml
index a24f478b..cb16bf7c 100644
--- a/alacritty.yml
+++ b/alacritty.yml
@@ -402,16 +402,6 @@
# directory of the parent process will be used.
#working_directory: None
-# WinPTY backend (Windows only)
-#
-# Alacritty defaults to using the newer ConPTY backend if it is available,
-# since it resolves a lot of bugs and is quite a bit faster. If it is not
-# available, the WinPTY backend will be used instead.
-#
-# Setting this option to `true` makes Alacritty use the legacy WinPTY backend,
-# even if the ConPTY backend is available.
-#winpty_backend: false
-
# Send ESC (\x1b) before characters when alt is pressed.
#alt_send_esc: true
diff --git a/alacritty/Cargo.toml b/alacritty/Cargo.toml
index 8ed68a51..39a7e0cf 100644
--- a/alacritty/Cargo.toml
+++ b/alacritty/Cargo.toml
@@ -64,6 +64,5 @@ embed-resource = "1.3"
default = ["wayland", "x11"]
x11 = ["copypasta/x11", "glutin/x11", "x11-dl", "png"]
wayland = ["copypasta/wayland", "glutin/wayland", "wayland-client"]
-winpty = ["alacritty_terminal/winpty"]
nightly = []
bench = []
diff --git a/alacritty/src/cli.rs b/alacritty/src/cli.rs
index 6dea3319..682bdde3 100644
--- a/alacritty/src/cli.rs
+++ b/alacritty/src/cli.rs
@@ -298,8 +298,7 @@ mod tests {
fn dynamic_title_overridden_by_options() {
let mut config = Config::default();
- let mut options = Options::default();
- options.title = Some("foo".to_owned());
+ let options = Options { title: Some("foo".to_owned()), ..Options::default() };
options.override_config(&mut config);
assert!(!config.ui_config.window.dynamic_title);
diff --git a/alacritty/src/config/bindings.rs b/alacritty/src/config/bindings.rs
index 383a057e..4d0fcadd 100644
--- a/alacritty/src/config/bindings.rs
+++ b/alacritty/src/config/bindings.rs
@@ -1210,8 +1210,8 @@ mod tests {
#[test]
fn binding_matches_different_action() {
let binding = MockBinding::default();
- let mut different_action = MockBinding::default();
- different_action.action = Action::ClearHistory;
+ let different_action =
+ MockBinding { action: Action::ClearHistory, ..MockBinding::default() };
assert!(binding.triggers_match(&different_action));
assert!(different_action.triggers_match(&binding));
@@ -1219,10 +1219,8 @@ mod tests {
#[test]
fn mods_binding_requires_strict_match() {
- let mut superset_mods = MockBinding::default();
- superset_mods.mods = ModifiersState::all();
- let mut subset_mods = MockBinding::default();
- subset_mods.mods = ModifiersState::ALT;
+ let superset_mods = MockBinding { mods: ModifiersState::all(), ..MockBinding::default() };
+ let subset_mods = MockBinding { mods: ModifiersState::ALT, ..MockBinding::default() };
assert!(!superset_mods.triggers_match(&subset_mods));
assert!(!subset_mods.triggers_match(&superset_mods));
@@ -1230,10 +1228,8 @@ mod tests {
#[test]
fn binding_matches_identical_mode() {
- let mut b1 = MockBinding::default();
- b1.mode = BindingMode::ALT_SCREEN;
- let mut b2 = MockBinding::default();
- b2.mode = BindingMode::ALT_SCREEN;
+ let b1 = MockBinding { mode: BindingMode::ALT_SCREEN, ..MockBinding::default() };
+ let b2 = MockBinding { mode: BindingMode::ALT_SCREEN, ..MockBinding::default() };
assert!(b1.triggers_match(&b2));
assert!(b2.triggers_match(&b1));
@@ -1242,18 +1238,22 @@ mod tests {
#[test]
fn binding_without_mode_matches_any_mode() {
let b1 = MockBinding::default();
- let mut b2 = MockBinding::default();
- b2.mode = BindingMode::APP_KEYPAD;
- b2.notmode = BindingMode::ALT_SCREEN;
+ let b2 = MockBinding {
+ mode: BindingMode::APP_KEYPAD,
+ notmode: BindingMode::ALT_SCREEN,
+ ..MockBinding::default()
+ };
assert!(b1.triggers_match(&b2));
}
#[test]
fn binding_with_mode_matches_empty_mode() {
- let mut b1 = MockBinding::default();
- b1.mode = BindingMode::APP_KEYPAD;
- b1.notmode = BindingMode::ALT_SCREEN;
+ let b1 = MockBinding {
+ mode: BindingMode::APP_KEYPAD,
+ notmode: BindingMode::ALT_SCREEN,
+ ..MockBinding::default()
+ };
let b2 = MockBinding::default();
assert!(b1.triggers_match(&b2));
@@ -1262,10 +1262,11 @@ mod tests {
#[test]
fn binding_matches_modes() {
- let mut b1 = MockBinding::default();
- b1.mode = BindingMode::ALT_SCREEN | BindingMode::APP_KEYPAD;
- let mut b2 = MockBinding::default();
- b2.mode = BindingMode::APP_KEYPAD;
+ let b1 = MockBinding {
+ mode: BindingMode::ALT_SCREEN | BindingMode::APP_KEYPAD,
+ ..MockBinding::default()
+ };
+ let b2 = MockBinding { mode: BindingMode::APP_KEYPAD, ..MockBinding::default() };
assert!(b1.triggers_match(&b2));
assert!(b2.triggers_match(&b1));
@@ -1273,10 +1274,14 @@ mod tests {
#[test]
fn binding_matches_partial_intersection() {
- let mut b1 = MockBinding::default();
- b1.mode = BindingMode::ALT_SCREEN | BindingMode::APP_KEYPAD;
- let mut b2 = MockBinding::default();
- b2.mode = BindingMode::APP_KEYPAD | BindingMode::APP_CURSOR;
+ let b1 = MockBinding {
+ mode: BindingMode::ALT_SCREEN | BindingMode::APP_KEYPAD,
+ ..MockBinding::default()
+ };
+ let b2 = MockBinding {
+ mode: BindingMode::APP_KEYPAD | BindingMode::APP_CURSOR,
+ ..MockBinding::default()
+ };
assert!(b1.triggers_match(&b2));
assert!(b2.triggers_match(&b1));
@@ -1284,10 +1289,8 @@ mod tests {
#[test]
fn binding_mismatches_notmode() {
- let mut b1 = MockBinding::default();
- b1.mode = BindingMode::ALT_SCREEN;
- let mut b2 = MockBinding::default();
- b2.notmode = BindingMode::ALT_SCREEN;
+ let b1 = MockBinding { mode: BindingMode::ALT_SCREEN, ..MockBinding::default() };
+ let b2 = MockBinding { notmode: BindingMode::ALT_SCREEN, ..MockBinding::default() };
assert!(!b1.triggers_match(&b2));
assert!(!b2.triggers_match(&b1));
@@ -1295,10 +1298,8 @@ mod tests {
#[test]
fn binding_mismatches_unrelated() {
- let mut b1 = MockBinding::default();
- b1.mode = BindingMode::ALT_SCREEN;
- let mut b2 = MockBinding::default();
- b2.mode = BindingMode::APP_KEYPAD;
+ let b1 = MockBinding { mode: BindingMode::ALT_SCREEN, ..MockBinding::default() };
+ let b2 = MockBinding { mode: BindingMode::APP_KEYPAD, ..MockBinding::default() };
assert!(!b1.triggers_match(&b2));
assert!(!b2.triggers_match(&b1));
@@ -1306,10 +1307,12 @@ mod tests {
#[test]
fn binding_matches_notmodes() {
- let mut subset_notmodes = MockBinding::default();
- let mut superset_notmodes = MockBinding::default();
- subset_notmodes.notmode = BindingMode::VI | BindingMode::APP_CURSOR;
- superset_notmodes.notmode = BindingMode::APP_CURSOR;
+ let subset_notmodes = MockBinding {
+ notmode: BindingMode::VI | BindingMode::APP_CURSOR,
+ ..MockBinding::default()
+ };
+ let superset_notmodes =
+ MockBinding { notmode: BindingMode::APP_CURSOR, ..MockBinding::default() };
assert!(subset_notmodes.triggers_match(&superset_notmodes));
assert!(superset_notmodes.triggers_match(&subset_notmodes));
@@ -1317,11 +1320,12 @@ mod tests {
#[test]
fn binding_matches_mode_notmode() {
- let mut b1 = MockBinding::default();
- let mut b2 = MockBinding::default();
- b1.mode = BindingMode::VI;
- b1.notmode = BindingMode::APP_CURSOR;
- b2.notmode = BindingMode::APP_CURSOR;
+ let b1 = MockBinding {
+ mode: BindingMode::VI,
+ notmode: BindingMode::APP_CURSOR,
+ ..MockBinding::default()
+ };
+ let b2 = MockBinding { notmode: BindingMode::APP_CURSOR, ..MockBinding::default() };
assert!(b1.triggers_match(&b2));
assert!(b2.triggers_match(&b1));
@@ -1329,8 +1333,7 @@ mod tests {
#[test]
fn binding_trigger_input() {
- let mut binding = MockBinding::default();
- binding.trigger = 13;
+ let binding = MockBinding { trigger: 13, ..MockBinding::default() };
let mods = binding.mods;
let mode = binding.mode;
@@ -1341,8 +1344,10 @@ mod tests {
#[test]
fn binding_trigger_mods() {
- let mut binding = MockBinding::default();
- binding.mods = ModifiersState::ALT | ModifiersState::LOGO;
+ let binding = MockBinding {
+ mods: ModifiersState::ALT | ModifiersState::LOGO,
+ ..MockBinding::default()
+ };
let superset_mods = ModifiersState::all();
let subset_mods = ModifiersState::empty();
@@ -1357,8 +1362,7 @@ mod tests {
#[test]
fn binding_trigger_modes() {
- let mut binding = MockBinding::default();
- binding.mode = BindingMode::ALT_SCREEN;
+ let binding = MockBinding { mode: BindingMode::ALT_SCREEN, ..MockBinding::default() };
let t = binding.trigger;
let mods = binding.mods;
@@ -1370,8 +1374,7 @@ mod tests {
#[test]
fn binding_trigger_notmodes() {
- let mut binding = MockBinding::default();
- binding.notmode = BindingMode::ALT_SCREEN;
+ let binding = MockBinding { notmode: BindingMode::ALT_SCREEN, ..MockBinding::default() };
let t = binding.trigger;
let mods = binding.mods;
diff --git a/alacritty/src/event.rs b/alacritty/src/event.rs
index bbb0da0f..b8793f16 100644
--- a/alacritty/src/event.rs
+++ b/alacritty/src/event.rs
@@ -1118,8 +1118,7 @@ impl<N: Notify + OnResize> Processor<N> {
WindowEvent::Resized(size) => {
// Minimizing the window sends a Resize event with zero width and
// height. But there's no need to ever actually resize to this.
- // Both WinPTY & ConPTY have issues when resizing down to zero size
- // and back.
+ // ConPTY has issues when resizing down to zero size and back.
#[cfg(windows)]
if size.width == 0 && size.height == 0 {
return;
diff --git a/alacritty/src/input.rs b/alacritty/src/input.rs
index 259ceeba..cac21f69 100644
--- a/alacritty/src/input.rs
+++ b/alacritty/src/input.rs
@@ -1255,8 +1255,10 @@ mod tests {
let mut terminal = Term::new(&cfg, size, MockEventProxy);
- let mut mouse = Mouse::default();
- mouse.click_state = $initial_state;
+ let mut mouse = Mouse {
+ click_state: $initial_state,
+ ..Mouse::default()
+ };
let mut selection = None;
diff --git a/alacritty_terminal/Cargo.toml b/alacritty_terminal/Cargo.toml
index b859185c..5bc144b2 100644
--- a/alacritty_terminal/Cargo.toml
+++ b/alacritty_terminal/Cargo.toml
@@ -32,7 +32,6 @@ nix = "0.18.0"
signal-hook = { version = "0.1", features = ["mio-support"] }
[target.'cfg(windows)'.dependencies]
-mio-named-pipes = "0.1"
miow = "0.3"
winapi = { version = "0.3.7", features = [
"impl-default", "basetsd", "libloaderapi", "minwindef", "ntdef", "processthreadsapi", "winbase",
@@ -40,10 +39,6 @@ winapi = { version = "0.3.7", features = [
]}
mio-anonymous-pipes = "0.1"
-# Winpty crate supports only MSVC.
-[target.'cfg(all(target_os="windows", target_env="msvc"))'.dependencies]
-winpty = { version = "0.2.0", optional = true }
-
[features]
default = []
bench = []
diff --git a/alacritty_terminal/src/config/mod.rs b/alacritty_terminal/src/config/mod.rs
index cbe56057..caa8930b 100644
--- a/alacritty_terminal/src/config/mod.rs
+++ b/alacritty_terminal/src/config/mod.rs
@@ -57,10 +57,6 @@ pub struct Config<T> {
/// Bell configuration.
bell: BellConfig,
- #[cfg(windows)]
- #[config(deprecated = "recompile with winpty feature or remove this setting")]
- pub winpty_backend: bool,
-
#[config(deprecated = "use `bell` instead")]
pub visual_bell: Option<BellConfig>,
}
diff --git a/alacritty_terminal/src/grid/tests.rs b/alacritty_terminal/src/grid/tests.rs
index eac19828..f178226c 100644
--- a/alacritty_terminal/src/grid/tests.rs
+++ b/alacritty_terminal/src/grid/tests.rs
@@ -297,8 +297,6 @@ fn grow_reflow_multiline() {
assert_eq!(grid[2][Column(5)], cell('6'));
// Make sure rest of grid is empty.
- // https://github.com/rust-lang/rust-clippy/issues/3788
- #[allow(clippy::needless_range_loop)]
for r in 0..2 {
assert_eq!(grid[r].len(), 6);
for c in 0..6 {
@@ -348,6 +346,8 @@ fn shrink_reflow_disabled() {
assert_eq!(grid[0][Column(1)], cell('2'));
}
+// https://github.com/rust-lang/rust-clippy/pull/6375
+#[allow(clippy::all)]
fn cell(c: char) -> Cell {
let mut cell = Cell::default();
cell.c = c;
diff --git a/alacritty_terminal/src/tty/windows/automatic_backend.rs b/alacritty_terminal/src/tty/windows/automatic_backend.rs
deleted file mode 100644
index a1bd540d..00000000
--- a/alacritty_terminal/src/tty/windows/automatic_backend.rs
+++ /dev/null
@@ -1,190 +0,0 @@
-//! Types to determine the appropriate PTY backend at runtime.
-//!
-//! Unless the winpty feature is disabled, the PTY backend will automatically fall back to
-//! WinPTY when the newer ConPTY API is not supported, as long as the user hasn't explicitly
-//! opted into the WinPTY config option.
-
-use std::io::{self, Read, Write};
-
-use log::info;
-use mio::{Evented, Poll, PollOpt, Ready, Token};
-use mio_anonymous_pipes::{EventedAnonRead, EventedAnonWrite};
-use mio_named_pipes::NamedPipe;
-
-use crate::config::Config;
-use crate::event::OnResize;
-use crate::term::SizeInfo;
-
-use super::{conpty, winpty, Pty};
-
-pub fn new<C>(config: &Config<C>, size: &SizeInfo, window_id: Option<usize>) -> Pty {
- if let Some(pty) = conpty::new(config, size, window_id) {
- info!("Using ConPTY backend");
- pty
- } else {
- info!("Using WinPTY backend");
- winpty::new(config, size, window_id)
- }
-}
-
-pub enum PtyBackend {
- Winpty(winpty::Agent),
- Conpty(conpty::Conpty),
-}
-
-impl OnResize for PtyBackend {
- fn on_resize(&mut self, size: &SizeInfo) {
- match self {
- PtyBackend::Winpty(w) => w.on_resize(size),
- PtyBackend::Conpty(c) => c.on_resize(size),
- }
- }
-}
-
-// TODO: The ConPTY API currently must use synchronous pipes as the input
-// and output handles. This has led to the need to support two different
-// types of pipe.
-//
-// When https://github.com/Microsoft/console/issues/262 lands then the
-// Anonymous variant of this enum can be removed from the codebase and
-// everything can just use NamedPipe.
-pub enum EventedReadablePipe {
- Anonymous(EventedAnonRead),
- Named(NamedPipe),
-}
-
-pub enum EventedWritablePipe {
- Anonymous(EventedAnonWrite),
- Named(NamedPipe),
-}
-
-impl Evented for EventedReadablePipe {
- fn register(
- &self,
- poll: &Poll,
- token: Token,
- interest: Ready,
- opts: PollOpt,
- ) -> io::Result<()> {
- match self {
- EventedReadablePipe::Anonymous(p) => p.register(poll, token, interest, opts),
- EventedReadablePipe::Named(p) => p.register(poll, token, interest, opts),
- }
- }
-
- fn reregister(
- &self,
- poll: &Poll,
- token: Token,
- interest: Ready,
- opts: PollOpt,
- ) -> io::Result<()> {
- match self {
- EventedReadablePipe::Anonymous(p) => p.reregister(poll, token, interest, opts),
- EventedReadablePipe::Named(p) => p.reregister(poll, token, interest, opts),
- }
- }
-
- fn deregister(&self, poll: &Poll) -> io::Result<()> {
- match self {
- EventedReadablePipe::Anonymous(p) => p.deregister(poll),
- EventedReadablePipe::Named(p) => p.deregister(poll),
- }
- }
-}
-
-impl Read for EventedReadablePipe {
- fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
- match self {
- EventedReadablePipe::Anonymous(p) => p.read(buf),
- EventedReadablePipe::Named(p) => p.read(buf),
- }
- }
-}
-
-impl Evented for EventedWritablePipe {
- fn register(
- &self,
- poll: &Poll,
- token: Token,
- interest: Ready,
- opts: PollOpt,
- ) -> io::Result<()> {
- match self {
- EventedWritablePipe::Anonymous(p) => p.register(poll, token, interest, opts),
- EventedWritablePipe::Named(p) => p.register(poll, token, interest, opts),
- }
- }
-
- fn reregister(
- &self,
- poll: &Poll,
- token: Token,
- interest: Ready,
- opts: PollOpt,
- ) -> io::Result<()> {
- match self {
- EventedWritablePipe::Anonymous(p) => p.reregister(poll, token, interest, opts),
- EventedWritablePipe::Named(p) => p.reregister(poll, token, interest, opts),
- }
- }
-
- fn deregister(&self, poll: &Poll) -> io::Result<()> {
- match self {
- EventedWritablePipe::Anonymous(p) => p.deregister(poll),
- EventedWritablePipe::Named(p) => p.deregister(poll),
- }
- }
-}
-
-impl Write for EventedWritablePipe {
- fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
- match self {
- EventedWritablePipe::Anonymous(p) => p.write(buf),
- EventedWritablePipe::Named(p) => p.write(buf),
- }
- }
-
- fn flush(&mut self) -> io::Result<()> {
- match self {
- EventedWritablePipe::Anonymous(p) => p.flush(),
- EventedWritablePipe::Named(p) => p.flush(),
- }
- }
-}
-
-impl From<winpty::Agent> for PtyBackend {
- fn from(inner: winpty::Agent) -> Self {
- PtyBackend::Winpty(inner)
- }
-}
-
-impl From<conpty::Conpty> for PtyBackend {
- fn from(inner: conpty::Conpty) -> Self {
- PtyBackend::Conpty(inner)
- }
-}
-
-impl From<EventedAnonRead> for EventedReadablePipe {
- fn from(inner: EventedAnonRead) -> Self {
- EventedReadablePipe::Anonymous(inner)
- }
-}
-
-impl From<NamedPipe> for EventedReadablePipe {
- fn from(inner: NamedPipe) -> Self {
- EventedReadablePipe::Named(inner)
- }
-}
-
-impl From<EventedAnonWrite> for EventedWritablePipe {
- fn from(inner: EventedAnonWrite) -> Self {
- EventedWritablePipe::Anonymous(inner)
- }
-}
-
-impl From<NamedPipe> for EventedWritablePipe {
- fn from(inner: NamedPipe) -> Self {
- EventedWritablePipe::Named(inner)
- }
-}
diff --git a/alacritty_terminal/src/tty/windows/conpty.rs b/alacritty_terminal/src/tty/windows/conpty.rs
index 5469c7fe..de3d8d4e 100644
--- a/alacritty_terminal/src/tty/windows/conpty.rs
+++ b/alacritty_terminal/src/tty/windows/conpty.rs
@@ -6,10 +6,10 @@ use std::ptr;
use mio_anonymous_pipes::{EventedAnonRead, EventedAnonWrite};
use winapi::shared::basetsd::{PSIZE_T, SIZE_T};
-use winapi::shared::minwindef::{BYTE, DWORD};
-use winapi::shared::ntdef::{HANDLE, HRESULT, LPWSTR};
+use winapi::shared::minwindef::BYTE;
+use winapi::shared::ntdef::LPWSTR;
use winapi::shared::winerror::S_OK;
-use winapi::um::libloaderapi::{GetModuleHandleA, GetProcAddress};
+use winapi::um::consoleapi::{ClosePseudoConsole, CreatePseudoConsole, ResizePseudoConsole};
use winapi::um::processthreadsapi::{
CreateProcessW, InitializeProcThreadAttributeList, UpdateProcThreadAttribute,
PROCESS_INFORMATION, STARTUPINFOW,
@@ -23,52 +23,9 @@ use crate::term::SizeInfo;
use crate::tty::windows::child::ChildExitWatcher;
use crate::tty::windows::{cmdline, win32_string, Pty};
-// TODO: Replace with winapi's implementation. This cannot be
-// done until a safety net is in place for versions of Windows
-// that do not support the ConPTY api, as such versions will
-// pass unit testing - but fail to actually function.
-/// Dynamically-loaded Pseudoconsole API from kernel32.dll.
-///
-/// The field names are deliberately PascalCase as this matches
-/// the defined symbols in kernel32 and also is the convention
-/// that the `winapi` crate follows.
-#[allow(non_snake_case)]
-struct ConptyApi {
- CreatePseudoConsole:
- unsafe extern "system" fn(COORD, HANDLE, HANDLE, DWORD, *mut HPCON) -> HRESULT,
- ResizePseudoConsole: unsafe extern "system" fn(HPCON, COORD) -> HRESULT,
- ClosePseudoConsole: unsafe extern "system" fn(HPCON),
-}
-
-impl ConptyApi {
- /// Load the API or None if it cannot be found.
- pub fn new() -> Option<Self> {
- // Unsafe because windows API calls.
- unsafe {
- let hmodule = GetModuleHandleA("kernel32\0".as_ptr() as _);
- assert!(!hmodule.is_null());
-
- let cpc = GetProcAddress(hmodule, "CreatePseudoConsole\0".as_ptr() as _);
- let rpc = GetProcAddress(hmodule, "ResizePseudoConsole\0".as_ptr() as _);
- let clpc = GetProcAddress(hmodule, "ClosePseudoConsole\0".as_ptr() as _);
-
- if cpc.is_null() || rpc.is_null() || clpc.is_null() {
- None
- } else {
- Some(Self {
- CreatePseudoConsole: mem::transmute(cpc),
- ResizePseudoConsole: mem::transmute(rpc),
- ClosePseudoConsole: mem::transmute(clpc),
- })
- }
- }
- }
-}
-
/// RAII Pseudoconsole.
pub struct Conpty {
pub handle: HPCON,
- api: ConptyApi,
}
impl Drop for Conpty {
@@ -77,20 +34,14 @@ impl Drop for Conpty {
// conout pipe has already been dropped by this point.
//
// See PR #3084 and https://docs.microsoft.com/en-us/windows/console/closepseudoconsole.
- unsafe { (self.api.ClosePseudoConsole)(self.handle) }
+ unsafe { ClosePseudoConsole(self.handle) }
}
}
// The ConPTY handle can be sent between threads.
unsafe impl Send for Conpty {}
-pub fn new<C>(config: &Config<C>, size: &SizeInfo, _window_id: Option<usize>) -> Option<Pty> {
- if config.winpty_backend {
- return None;
- }
-
- let api = ConptyApi::new()?;
-
+pub fn new<C>(config: &Config<C>, size: &SizeInfo) -> Option<Pty> {
let mut pty_handle = 0 as HPCON;
// Passing 0 as the size parameter allows the "system default" buffer
@@ -105,7 +56,7 @@ pub fn new<C>(config: &Config<C>, size: &SizeInfo, _window_id: Option<usize>) ->
// Create the Pseudo Console, using the pipes.
let result = unsafe {
- (api.CreatePseudoConsole)(
+ CreatePseudoConsole(
coord,
conin_pty_handle.into_raw_handle(),
conout_pty_handle.into_raw_handle(),
@@ -213,7 +164,7 @@ pub fn new<C>(config: &Config<C>, size: &SizeInfo, _window_id: Option<usize>) ->
let conout = EventedAnonRead::new(conout);
let child_watcher = ChildExitWatcher::new(proc_info.hProcess).unwrap();
- let conpty = Conpty { handle: pty_handle, api };
+ let conpty = Conpty { handle: pty_handle };
Some(Pty::new(conpty, conout, conin, child_watcher))
}
@@ -226,7 +177,7 @@ fn panic_shell_spawn() {
impl OnResize for Conpty {
fn on_resize(&mut self, sizeinfo: &SizeInfo) {
if let Some(coord) = coord_from_sizeinfo(sizeinfo) {
- let result = unsafe { (self.api.ResizePseudoConsole)(self.handle, coord) };
+ let result = unsafe { ResizePseudoConsole(self.handle, coord) };
assert_eq!(result, S_OK);
}
}
diff --git a/alacritty_terminal/src/tty/windows/mod.rs b/alacritty_terminal/src/tty/windows/mod.rs
index 27b65e58..644253f4 100644
--- a/alacritty_terminal/src/tty/windows/mod.rs
+++ b/alacritty_terminal/src/tty/windows/mod.rs
@@ -10,23 +10,12 @@ use crate::term::SizeInfo;
use crate::tty::windows::child::ChildExitWatcher;
use crate::tty::{ChildEvent, EventedPty, EventedReadWrite};
-#[cfg(all(feature = "winpty", target_env = "msvc"))]
-mod automatic_backend;
mod child;
mod conpty;
-#[cfg(all(feature = "winpty", target_env = "msvc"))]
-mod winpty;
-#[cfg(not(all(feature = "winpty", target_env = "msvc")))]
use conpty::Conpty as Backend;
-#[cfg(not(all(feature = "winpty", target_env = "msvc")))]
use mio_anonymous_pipes::{EventedAnonRead as ReadPipe, EventedAnonWrite as WritePipe};
-#[cfg(all(feature = "winpty", target_env = "msvc"))]
-use automatic_backend::{
- EventedReadablePipe as ReadPipe, EventedWritablePipe as WritePipe, PtyBackend as Backend,
-};
-
pub struct Pty {
// XXX: Backend is required to be the first field, to ensure correct drop order. Dropping
// `conout` before `backend` will cause a deadlock (with Conpty).
@@ -39,14 +28,8 @@ pub struct Pty {
child_watcher: ChildExitWatcher,
}
-#[cfg(not(all(feature = "winpty", target_env = "msvc")))]
-pub fn new<C>(config: &Config<C>, size: &SizeInfo, window_id: Option<usize>) -> Pty {
- conpty::new(config, size, window_id).expect("Failed to create ConPTY backend")
-}
-
-#[cfg(all(feature = "winpty", target_env = "msvc"))]
-pub fn new<C>(config: &Config<C>, size: &SizeInfo, window_id: Option<usize>) -> Pty {
- automatic_backend::new(config, size, window_id)
+pub fn new<C>(config: &Config<C>, size: &SizeInfo, _window_id: Option<usize>) -> Pty {
+ conpty::new(config, size).expect("Failed to create ConPTY backend")
}
impl Pty {
diff --git a/alacritty_terminal/src/tty/windows/winpty.rs b/alacritty_terminal/src/tty/windows/winpty.rs
deleted file mode 100644
index 5de4b401..00000000
--- a/alacritty_terminal/src/tty/windows/winpty.rs
+++ /dev/null
@@ -1,70 +0,0 @@
-use std::fs::OpenOptions;
-use std::os::windows::fs::OpenOptionsExt;
-use std::os::windows::io::{FromRawHandle, IntoRawHandle};
-use std::u16;
-
-use log::info;
-use mio_named_pipes::NamedPipe;
-use winapi::um::winbase::FILE_FLAG_OVERLAPPED;
-use winpty::{Config as WinptyConfig, ConfigFlags, MouseMode, SpawnConfig, SpawnFlags, Winpty};
-
-use crate::config::Config;
-use crate::event::OnResize;
-use crate::term::SizeInfo;
-use crate::tty::windows::child::ChildExitWatcher;
-use crate::tty::windows::{cmdline, Pty};
-
-pub use winpty::Winpty as Agent;
-
-pub fn new<C>(config: &Config<C>, size: &SizeInfo, _window_id: Option<usize>) -> Pty {
- // Create config.
- let mut wconfig = WinptyConfig::new(ConfigFlags::empty()).unwrap();
-
- wconfig.set_initial_size(size.cols().0 as i32, size.screen_lines().0 as i32);
- wconfig.set_mouse_mode(&MouseMode::Auto);
-
- // Start agent.
- let mut agent = Winpty::open(&wconfig).unwrap();
- let (conin, conout) = (agent.conin_name(), agent.conout_name());
-
- let cmdline = cmdline(&config);
-
- // Spawn process.
- let spawnconfig = SpawnConfig::new(
- SpawnFlags::AUTO_SHUTDOWN | SpawnFlags::EXIT_AFTER_SHUTDOWN,
- None, // appname.
- Some(&cmdline),
- config.working_directory.as_deref(),
- None, // Env.
- )
- .unwrap();
-
- let default_opts = &mut OpenOptions::new();
- default_opts.share_mode(0).custom_flags(FILE_FLAG_OVERLAPPED);
-
- let (conout_pipe, conin_pipe);
- unsafe {
- conout_pipe = NamedPipe::from_raw_handle(
- default_opts.clone().read(true).open(conout).unwrap().into_raw_handle(),
- );
- conin_pipe = NamedPipe::from_raw_handle(
- default_opts.clone().write(true).open(conin).unwrap().into_raw_handle(),
- );
- };
-
- agent.spawn(&spawnconfig).unwrap();
-
- let child_watcher = ChildExitWatcher::new(agent.raw_handle()).unwrap();
-
- Pty::new(agent, conout_pipe, conin_pipe, child_watcher)
-}
-
-impl OnResize for Agent {
- fn on_resize(&mut self, size: &SizeInfo) {
- let (cols, lines) = (size.cols().0, size.screen_lines().0);
- if cols > 0 && cols <= u16::MAX as usize && lines > 0 && lines <= u16::MAX as usize {
- self.set_size(cols as u16, lines as u16)
- .unwrap_or_else(|_| info!("Unable to set WinPTY size, did it die?"));
- }
- }
-}