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

    文章

    6564

    浏览量

    103945
  • WINDOWS
    +关注

    关注

    3

    文章

    3524

    浏览量

    88400
收藏 人收藏

    评论

    相关推荐

    请问ADS131E08EVM原板默认输入方式是差分输入吗?

    请问ADS131E08EVM原板默认输入方式是差分输入吗?如果是的话,请问怎么能改为单端输入
    发表于 11-20 06:01

    微软拼音输入法导致KiCad卡死

    “ 在Windows10切换到微软拼音输入法,即使是英文输入状态,操作KICAD会随机卡死。现象是鼠标没反应了,啥也做不了,只能结束进程。” 问题描述 在KiCad 6及之后的版本中,当IME为
    的头像 发表于 11-12 12:23 161次阅读
    <b class='flag-5'>微软拼音输入</b>法导致KiCad卡死

    TLV320ADC3101_EVM差分输入如此连接正确吗?

    差分输入如此连接正确吗?MK的引脚置于N2L(-) N3L(-)
    发表于 10-22 07:58

    瑞芯微RK3566鸿蒙开发板Android11修改第三方输入法为默认输入

    本文适用于触觉智能所有支持Android11系统的开发板修改第三方输入法为默认输入法。本次使用的是触觉智能的Purple Pi OH鸿蒙开源主板,搭载了瑞芯微RK3566芯片,类树莓派设计,是Laval官方社区主荐的一款鸿蒙开发板。
    的头像 发表于 09-24 09:43 343次阅读
    瑞芯微RK3566鸿蒙开发板Android11修改第三方<b class='flag-5'>输入</b>法为<b class='flag-5'>默认输入</b>法

    WSL的ubuntu里面的VSCode烧写不成功是怎么回事?

    系统Windows10,WSL版本2,ubuntu版本20.04 VScode里面安装IDF插件,编译成功 烧录时,点左下角插头图标能检测到ESP32核心板的串口COM6 烧写时提示 No module named 'serial' 请问能不能配置COM6口?
    发表于 06-21 08:14

    WSL2+ubuntu+vscode+esp-idf环境中,刷写时选择ESP32-S3(Built-in USB JTAG)、UART模式提示报错的原因?

    系统为WIN11专业版,板子为ESP32-S3-WROOM-1,通过340C连接到RX,TX。Arduino下可以正常刷写。 在WSL2+ubuntu+vscode+esp-idf环境中,编译
    发表于 06-14 06:23

    ESP32S3用WSL作为开发环境, log开启verbose有错误提示,为什么?

    xtensa-esp32-elf-addr2line -pfiaC -e \\wsl$Ubuntu/home/younggu/learned/blink/build/blink.elf
    发表于 06-05 06:35

    微软将优化Windows Subsystem for Linux并加入图形用户界面设置

    微软宣布提升Windows Subsystem for Linux(WSL)性能,推出全新设置应用提供图形化配置环境。
    的头像 发表于 05-31 11:26 491次阅读

    微软确认:Windows 11 24H2 默认启用 BitLocker 磁盘加密

    微软在声明中明确表示:“为了提升用户体验,我们剥离了Modern Standby / HSTI验证以及非可信DMA端口检测项,因此,自此之后的Windows 11重装操作都将默认开启设备加密功能。”
    的头像 发表于 05-09 15:55 825次阅读

    微软更新Win11强制推广产品引发争议

    令人困惑的是,这个窗口并非出现在新电脑上,而是已使用一段时间的Win11设备中出现。其中包含了多个推广微软自有产品的选项,如使用OneDrive云端备份文件、设定Edge浏览器为默认浏览器、订阅微软365套餐等。
    的头像 发表于 04-29 10:06 459次阅读

    关于linux的默认网关,Linux双网卡配置

    默认网关是一个用于 TCP/IP 协议的配置项,是一个可直接到达的 IP 路由器的 IP 地址。配置默认网关可以在 IP 路由表中创建一个默认路径。
    发表于 04-19 11:31 3519次阅读
    关于linux的<b class='flag-5'>默认</b>网关,Linux双网卡配置

    微软WSL更新支持IPv6流量透过Linux

    据悉,微软近期对Windows Subsystem for Linux(WSL)进行了2.2.2版本更新,包含多项优化改进。其中最引人注目的便是新增的nft规则,允许IPv6数据包经过Linux容器传输。
    的头像 发表于 04-08 10:23 909次阅读

    微软向Windows 10/11推送更新,建议将Bing设为Chrome默认搜索引擎

    微软通过提示窗口表示,只要将Bing设为Chrome浏览器的默认搜索引擎,即可免费享用ChatGPT-4,且每天可与Bing人工智能进行数百次的对话交流。
    的头像 发表于 03-15 14:32 1296次阅读

    默认usb设置怎么设置都表示什么

    是USB 1.0、USB 2.0、USB 3.0和USB 3.1。这篇文章将详细介绍默认USB设置的含义以及设置方法。 首先,我们来了解USB的默认设置是什么。默认设置是指在未进行任何特殊设置时,USB
    的头像 发表于 01-03 17:56 4471次阅读

    codeblocks如何恢复默认布局

    和偏好。然而,有时候您可能希望恢复到 CodeBlocks 的默认布局,本文将详细介绍如何执行此操作。 首先,需要了解 CodeBlocks 的默认布局是什么样的。CodeBlocks 的默认布局主要包含
    的头像 发表于 11-26 09:35 6887次阅读