是否存在一种专门编辑文本的脚本语言?

redraiment 发布于 2011/06/17 19:21
阅读 1K+
收藏 1
据大家所知,有没有这样一种脚本语言:专门用于编辑文本信息?

我现在是比较习惯 Emacs 的快捷键,而且最近使用的键盘按方向键不太方便,所以很希望所使用的软件都能用 Emacs 的快捷键来操作。

一开始,我使用 XKeymacs (日本人开发的一款小工具),它能把 Windows 下所有应用程序的快捷键都转换成 Emacs 的。不过这个软件不太稳定,和 mitty 等软件配合得也不好;可配置性也不强,只能选择是否启用某些快捷键。

后来我想到 AutoHotKey,它算是一门脚本语言,可以用脚本模拟鼠标、键盘操作,控制 Windows 窗口等,最主要的是可以给任何操作绑定热键。就定义快捷键而言,它绝对是无可匹敌了,我仔细研究了一下它的文档,发现它只能用来组合现有功能,而且不具备 操作文本的能力。

简单地说,我用 AutoHotKey 能做到的地步就是将 Windows 记事本一些现有的快捷键切换成和 Emacs 一样,比如用 Ctrl-D 代替 Delete、用 Ctrl-A 代替 Home 等。可是,诸如 Emacs 中 Meta-a 可以移动到句子的开头这种功能,因为 记事本 本身没提供,因此 AHK 也无能为力了。

所以,我在想有没有另一种语言,来设定一些全局的编辑功能?无论光标在哪个编辑窗口里,按 M-f 都能往前移动一个 word、按 M-v 往后移动一个 page,等等。本来,emacs-lisp 是很不错的,可惜它只能用来定制 Emacs,没办法去增强其他程序的功能。而 AHK 可以通过组合来增强现有程序的能力,却没办法编辑文本。如果能有一种结合两者的优点的就好了。

简言之:如果 Emacs 的配置是对整个操作系统有效就好了;或者说,如果操作系统里所有牵涉到编辑的地方都能自动调用 Emacs 来编辑就好了。

加载中
0
mallon
mallon
把emacs设置成默认编辑器就可以了啊
0
redraiment
redraiment

引用来自“mallon”的答案

把emacs设置成默认编辑器就可以了啊
设置成默认编辑器后,那请问聊 QQ 是可以用 Emacs 编辑器做对话框不?
0
mallon
mallon
你是指需要这样的控件啊,这就不清楚了。不过即便有,想要改QQ的输入控件,肯定得找麻花疼,你自己改不了的
0
redraiment
redraiment

引用来自“mallon”的答案

你是指需要这样的控件啊,这就不清楚了。不过即便有,想要改QQ的输入控件,肯定得找麻花疼,你自己改不了的
呃,我不是要一个“控件”,开发这么一个控件某种角度来说只不过是再开一个 Emacs。况且,QQ 哪天真用上了这个控件,那 IE 的地址栏又该怎么办呢?我所希望的是一个能从系统层次上做全局的“光标”控制的工具(或者说是一门编程语句),无聊当前光标处在哪个编辑窗口中(记事本、Outlook 的邮件正文等等),它发送一个类似 forward-char 的命令都能另光标向前移动一个字符,发送 backward-sentence 就后退一句话。如果有这样的工具,再配合 AHK 将这些命令绑定成快捷键,就能在所有文本输入的地方使用相同的编辑功能!
BossKiller
BossKiller
你说的不就是输入法吗? 输入法+自带输入窗口,差不多就是你说的功能了。
0
mallon
mallon
Windows下面实现是很有难度的,那么多类型的文本控件:系统提供的、私有的...实现方式,内部的消息处理都不一样,你的功能要想实现,首先还得把这些控件里的文本提取出来,这甚至连电子辞典的自动取词功能都无法完美地做到
0
周翼翼
周翼翼
首先,你有没有什么办法能向任意编辑窗口发送合适的消息..比如我打字的窗口,如果我按c+D的话,响应它的是chrome的书签的功能,不是这个编辑窗口,当然这个窗口是有删除一个字符的功能的,但是怎么向它发消息呢?
0
redraiment
redraiment

引用来自“mallon”的答案

Windows下面实现是很有难度的,那么多类型的文本控件:系统提供的、私有的...实现方式,内部的消息处理都不一样,你的功能要想实现,首先还得把这些控件里的文本提取出来,这甚至连电子辞典的自动取词功能都无法完美地做到
原来 XKeyMacs 源代码开发的。可以考虑自己修改一下了。呵呵
0
redraiment
redraiment

引用来自“周翼翼”的答案

首先,你有没有什么办法能向任意编辑窗口发送合适的消息..比如我打字的窗口,如果我按c+D的话,响应它的是chrome的书签的功能,不是这个编辑窗口,当然这个窗口是有删除一个字符的功能的,但是怎么向它发消息呢?
同上,你说的这些功能 XKeyMacs 里其实已经实现了。你也可以去下一个玩玩看。
0
周翼翼
周翼翼

引用来自“redraiment”的答案

引用来自“周翼翼”的答案

首先,你有没有什么办法能向任意编辑窗口发送合适的消息..比如我打字的窗口,如果我按c+D的话,响应它的是chrome的书签的功能,不是这个编辑窗口,当然这个窗口是有删除一个字符的功能的,但是怎么向它发消息呢?
同上,你说的这些功能 XKeyMacs 里其实已经实现了。你也可以去下一个玩玩看。
这个好像真的可以,楼主可以试试..可惜我是用vim的....不会emace
0
施宇迪
施宇迪

可以考虑基于

XKeyMacs二次开发。

自己写的话,工程量比较大。本来看到标题的话,我想说perl的,但是看了内容以后才发现不是这个意思。整合下XkeyMacs和emacs的部分源代码应该可以实现的,不过工程量还是有点大的。其实emacs常用的快捷键也就那么几个,C-a,C-e,C-n,C-p,C-f,C-b,M-a,M-e,M-f,M-b什么什么的,大多数XKeyMacs已经做得很好了。像M系列的那些光标的移动的话,可以自己GetWindowText以后自己来决定移动光标。用MFC问题也不大。看LZ喜欢了。

返回顶部
顶部