0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

微软WSL的默认终端输入为什么如此顺滑

汽车玩家 来源:开源中国 作者:局长 2019-12-25 09:50 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

一名开发者(下用Nick代称)在Windows Terminal的GitHub repo中发表了一个不是反馈问题的issue——他只是好奇该终端拥有这种如此顺滑输入的效果是如何实现的。

Nick觉得这种顺滑感是其他Windows应用都不具备的,甚至是最轻量的notepad.exe都未能提供这种输入体验。他还问到,这种UI增强功能将来是否会应用于所有Windows应用程序。

很快,负责此项目的Windows开发团队成员(@miniksa)对Nick的疑问进行了解答。

miniksa表示,保持在WSL(Windows Subsystem for Linux)默认终端输入内容的速度比其他应用快,这实际上就是他们唯一的工作!除此之外,也可能是因为他们必须使用Windows最旧和最低级别的API来完成此项工作。

WSL的默认终端不像Electron等框架那样涉及到许多其他的层或框架,它有一个并不特别的裸窗口,并且没有任何附加组件。他们会从窗口消息(window messages)而不是某种事件框架((WPF, WinForms, UWP, Electron))来处理键入的内容,而这些内容是通过内核传输过来的。接着,他们使用GDI的PolyTextOut将文本直接转储到窗口而不带多余的装饰。

miniksa解释道,notepad.exe确实很轻量,不过在其窗口上也具有多个控件,并且可能在编辑控件中使用某种库、框架来确定其文本布局(也可能正在使用其他库或框架进行国际化支持...),这些都使得它们的输入速度比不上WSL默认终端。当然,WSL也需要进行权衡取舍,它不像其他应用那样提供完全的国际化支持。

为什么要这样做?第一,conhost.exe已十分陈旧。它必须使用所有内容的裸机底层,因为它是在创建其他大多数框架之前创建的。第二,它需要保持尽可能底层的级别,而且它是用C/C++编写的,它需要尽可能保持底层的状态以方便提供给第三方使用。

至于其他Windows应用是否有机会用上这种顺滑的输入效果,miniksa觉得几乎是没机会。这些应用能够以一种简单的方式用任何一门语言来调用一种方法和布局文本(layout text),而无需手动计算像素或关心它们的字体该采用哪种样式。而恰好miniksa手动计算像素、滑动区域和数学应用区域等的方式正是使得WSL默认终端输入速度更快的原因。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微软
    +关注

    关注

    4

    文章

    6722

    浏览量

    107360
  • WINDOWS
    +关注

    关注

    4

    文章

    3697

    浏览量

    93239
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    rtt studio中 终端窗口输入不了命令,是没打开什么东西吗?

    studio新建的工程,控制台程序能正常运行终端输出了RTT的logo,想输入list_device等命令,无法输入,是哪儿配置问题?还是要自己写命令顶层?
    发表于 09-24 06:04

    rt thread 的Finsh终端启用后,怎样才能在函数里读取终端输入的字符串?

    如题,AI的建议是使用rt_kscanf,但是并没有查询到实际有这个函数。 本意是想校准一系列的值,在函数中通过终端输入来,输入校准值。 但shell.c文件里在shell线程中已经调用了finsh_getchar()
    发表于 09-22 06:24

    keil无法写入wsl文件怎么解决?

    使用rt-thread的容器开发,想要在windows上打开并编译保存在wsl2中的项目,遇到如下错误 Could not create/access path '
    发表于 09-16 06:04

    【Banana Pi BPI-RV2开发板试用体验】配置WSL网络环境访问Github

    的openWRT编译环境是WSL2,宿主OS为windows11。具体网络IP如下: WLAN的IP是192段,WSL自己弄了个172的IP,注意不是127.0.0.1。 二、配置 (一)Win侧配置 只需要
    发表于 07-19 18:14

    yolov8怎么在wsl中搭建呢?

    纯小白,yolov8怎么在wsl中搭建呢?一直报错且无法安装pip包
    发表于 07-11 07:37

    浅谈wsl --update` 命令行选项无效的解决方案

    PS C:\Users\Administrator> wsl --update >> 命令行选项无效: --update
    的头像 发表于 06-27 10:28 9900次阅读

    WSL 1 和 WSL 2 的区别是什么

    PS C:\Users\Administrator> wsl --set-default-version 2 >> 有关与 WSL 2 的主要区别的信息,请访问 https://aka.ms/wsl2
    的头像 发表于 06-27 10:25 1628次阅读

    rt thread的Finsh终端启用后,怎样才能在函数里读取终端输入的字符串?

    如题,AI的建议是使用rt_kscanf,但是并没有查询到实际有这个函数。 本意是想校准一系列的值,在函数中通过终端输入来,输入校准值。 但shell.c文件里在shell线程中已经调用了finsh_getchar()
    发表于 06-11 07:39

    岳冉扫描打印一体手持终端高效移动办公 #手持终端 #PDA

    终端
    yueranxinxi
    发布于 :2025年05月12日 17:34:16

    如何将FX3与WSL(Linux 的 Windows 子系统)一起使用?

    如何将 FX3 与 WSL(Linux 的 Windows 子系统)一起使用? 我在 /dev/ 中找不到任何设备 我有许多项目在 Windows 上使用VISUAL STUDIO项目进行操作,因此请验证该设备是否在 Windows 上运行。
    发表于 05-06 07:11

    为什么Can MV IDE终端无法输入字符?

    为什么Can MV IDE终端无法输入字符
    发表于 04-29 07:46

    旺诠WSL系列合金电阻的低阻值如何实现高精度?

    在现代电子设备中,电阻器是不可或缺的元件,其性能直接影响到电路的稳定性和精度。旺诠WSL系列合金电阻,以其低阻值和高精度的特点,在众多应用场景中脱颖而出。本文将探讨旺诠WSL系列合金电阻如何通过独特
    的头像 发表于 03-20 16:28 474次阅读
    旺诠<b class='flag-5'>WSL</b>系列合金电阻的低阻值如何实现高精度?

    pcm1795如果没有软件控制,其默认工作状态,输入是什么格式和状态

    请问:pcm1795,如果没有软件控制,其默认工作状态,输入是什么格式和状态。谢谢!
    发表于 01-21 08:06