修复 OpenFL 的 TextField 不显示输入法候选词列表的问题

在前文《试用跨平台 GUI 框架 HaxeUI》中提到了 OpenFLTextField 在启用输入法时无法显示候选词列表的问题。经过一番摸索,发现了问题出在了 SDL 库的身上。

OpenFL 的底层基于 Lime ,而 Lime 的桌面后端又是基于 SDL 。OpenFL 默认使用的 SDL 代码位于 openfl/libsdl 。问题定位于源文件 SDL_windowskeyboard.c 中的 IME_init() 函数中,只要将第 373 行的代码注释掉,就可以正常显示输入法候选词列表了:

……

试用跨平台 GUI 框架 HaxeUI

HaxeUI 是一款跨平台 GUI 框架,支持网页、桌面和移动端。 框架前端使用 Hexo 语言开发。框架后端使用图形引擎或者原生跨平台 GUI 框架,比如 OpenFL, NME, Kha,PixiJS, wxWidgets, Winforms 等。最终生成 C++ 代码编译成本地可执行文件或者 HTML 代码。在各种后端中,除了 wxWidgets 和 Winforms 使用原生组件外,其他都是使用图形引擎绘制或者生成 HTML 代码。

img

Haxe 也是一个比较有意思的语言。它本身不能进行本地编译,而是转译成其他语言,比如 Lua, PHP, Java, Python, C++, C# 等,也可以编译成 Neko 或 HashLink 虚拟机的字节码(详见 Haxe Compiler Targets)。Haxe 语言诞生于 2005 年,算是历史久远了,然而其社区却一直不温不火,网上也很难找到中文资料。 Haxelib 上的开发者提交的三方库数量和 Python 的 PyPi 相比,只能说是聊胜于无。

……

在 WSL 中运行 Lazarus IDE

Free Pascal 支持交叉编译,理论上是可以在 Windows 平台上编译 Linux 可执行文件的,但是官方没有提供相关文档,且不建议这么做。除了使用虚拟机外,在 Windows 平台上还可以使用 WSL 来交叉编译 Lazarus 项目。

……

判断用户是否删除过浏览器历史记录

本文仅适用于 Google Chrome, Microsoft Edge 等使用 Chromium 内核的浏览器。此内核的浏览器会将浏览器的访问历史记录储存在一个 SQLite 数据库文件中,可以用任何支持 SQLite 数据库 GUI 工具打开。常用的免费 SQLite 数据库 GUI 工具有:

在不同的操作系统下, Google Chrome 的历史记录数据库文件默认保存路径如下:

  • Windows: %LOCALAPPDATA%\Google\Chrome\User Data\Default\History
  • Linux: ~/.config/google-chrome/Default/History
  • macOS: /Users/<username>/Library/Application Support/Google/Chrome/Default/History

在 Windows 下, Microsoft Edge 的历史记录数据库文件保存路径为:

……

Lazarus 项目支持多语言国际化

Lazarus 是一个与 Delphi 兼容的跨平台 RAD 集成开发环境。和 Delphi 一样, Lazarus 可以拖放组件,快速开发 GUI 应用程序。它使用 Free Pascal 作为后端编译器。当前的 Lazarus 版本是 2.2.6 ,内置的 Free Pascal 编译器版本是 3.2.2 。

……

通过 GitHub Actions 自动构建分支

CudaText 汉化包项目中需要实现一个 CI/CD 脚本:一是用 msgfmt 命令生成 MO 文件;二是将生成的汉化包发布到 main 分支上。第一步倒是很容易通过 GitHub Actions 调用 Makefile 脚本来实现,第二步纯手写的话似乎比较麻烦,不如我们先问一下神奇的 ChatGPT 吧:

……

    如何在支持多国语言的程序中正确使用格式化字符串

    让程序支持多国语言也叫做国际化( internationalization / i18n )。几乎所有的现代软件开发框架都会提供至少一种国际化解决方案,开发人员也可以使用第三方的 i18n 库,比如 GNU gettext 等。其实现原理也很简单:开发者在编写软件时,使用某个 Native 语言书写代码内部的文本字符串,一般选择使用英语;然后将每个文本字符串都翻译成软件需要支持的其他语言;在软件运行时,每次输出文本字符串都会调用 i18n 模块的接口,模块会根据当前系统的 locale 环境将文本字符串转换成对应的语言版本,这一过程也被称为本地化( localization / l10n )。

    ……

      文本编辑器 CudaText 简体中文汉化包

      不久之前,我在 Windows 平台上最常用的文本编辑器还是 Notepad3Notepad++ 。前者用来替换系统自带的记事本;后者用来处理一些稍微复杂,但还没有上升到需要动用专业 IDE 的文本编辑工作。最近发现新版本的 Notepad++ 会频繁卡顿,但由于拖延症和考虑到更换新软件的适应成本,就一直没有想过要换掉它。直到前几周 Notepad++ 被爆出存在多个缓冲区溢出漏洞,特别地,其中还包含了几个可以执行任意代码的高危漏洞。本来作为一个个人维护的开源项目,爆出几个漏洞来也无伤大雅。然而离谱的是,漏洞发现者早在今年四月份就向 Notepad++ 的作者报告了漏洞,但是这几个漏洞一直没有被修复。直到漏洞细节被公开的半个月后,这几个漏洞才得以修复。是时候另觅一款好用的轻量级文本编辑器了。

      ……

        般若波罗蜜多心经

        觀自在菩薩行深般若波羅蜜多時照見五蘊皆空
        度一切苦厄舍利子色不異空空不異色色即是空
        空即是色受想行識亦復如是舍利子是諸法空相
        不生不滅不垢不淨不增不減是故空中無色無受
        想行識無眼耳鼻舌身意無色聲香味觸法無眼界
        乃至無意識界無無明亦無無明盡乃至無老死亦
        無老死盡無苦集滅道無智亦無得以無所得故菩
        提薩埵依般若波羅蜜多故心無罣礙無罣礙故無
        有恐怖遠離顛倒夢想究竟涅槃三世諸佛依般若
        波羅蜜多故得阿耨多羅三藐三菩提故知般若波
        羅蜜多是大神咒是大明咒是無上咒是無等等咒
        能除一切苦真實不虛故說般若波羅蜜多咒即說
        咒曰揭諦揭諦波羅揭諦波羅僧揭諦菩提薩婆訶

        用 RunDLL32.exe 命令实现 xdg-open

        xdg-open 是 Linux 下的一个命令,可以调用对应的程序来打开目标文件,等同于在文件管理器中双击打开该文件。Ubuntu 用户可以通过执行 sudo apt install xdg-utils -y 来安装 xdg-open 命令,这个命令的用法也很简单:

        xdg-open { file | URL }

        遗憾的是, Windows 系统并没用提供类似的命令,不过我们可以通过 Windows 自带的 rundll32.exe 命令来实现一个类似功能的脚本。

        RunDLL32.exe 用来加载指定的 DLL 文件并调用指定的导出函数。用法如下:

        ……