明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 11590|回复: 130

[经验] [原创]用纯lsp切换键盘布局(已增加自动切换输入法源码)

    [复制链接]
发表于 2024-5-25 08:38:29 | 显示全部楼层 |阅读模式
本帖最后由 baitang36 于 2024-5-30 16:11 编辑

Windows是支持多国语言的,每种语言对应一种键盘布局(KeyboardLayout),在英文键盘布局下只能输入英文,在中文键盘布局下可以切换输入法,可以输入中文,也可以输入英文。

经过试验,我用保留函数实现了切换键盘布局的操作函数。用途吗,就是让lsp爱好者能够方便的打造自己的自动切换输入法。
在syz-kb_pro.fas中定义了三个函数:syz-currentKeyboardLayout  syz-setKeyboardLayout-chn  syz-setKeyboardLayout-eng
(syz-currentKeyboardLayout)是获取系统当前使用的键盘布局,英文返回字符串"ENG",中文返回"CHN"
(syz-setKeyboardLayout-chn)是设置键盘布局为中文
(syz-setKeyboardLayout-eng)是设置键盘布局为英文
因为是用的纯lisp,因此不挑版本,支持所有AutoCAD版本,32位和64位同样支持,包括最新的acad2025,也支持lispsys=1的情况。

请参考yxp大侠的这个帖子CAD输入法自动切换程序(V1.02) - AutoLISP/Visual LISP 编程技术 - AutoCAD论坛 - 明经CAD社区 - Powered by Discuz! (mjtd.com)

帖子发表后,有的朋友说不会用。我写了个使用它的例子,是参考上述yxp大侠的代码修改的,请下载试用。
例子中(setq *COM_DEF# '("MTEDIT" "MTEXT" "DDEDIT" "TEXT" "TEXTEDIT"))是自动切换到中文的命令,可以按自己需要增减。

autoim.lsp源码如下:
  1. (vl-load-com)
  2. (load "c:/00/syz-kb_pro.fas")
  3. (setq *COM_DEF# '("MTEDIT" "MTEXT" "DDEDIT" "TEXT" "TEXTEDIT"))
  4. (defun ime-shift()
  5. (defun *fun_str#(x y)(if (member(car y) *com_def#)(syz-setKeyboardLayout-chn)))
  6. (defun *fun_end#(x y)(syz-setKeyboardLayout-eng))
  7. (vlr-command-reactor nil '((:vlr-commandWillStart . *fun_str#)))
  8. (foreach x '(:vlr-commandEnded :vlr-commandCancelled)(vlr-command-reactor nil (list(cons x (quote *fun_end#)))))
  9. (syz-setKeyboardLayout-eng)(princ))
  10. (ime-shift)
  11. (princ)




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 16明经币 +16 金钱 +80 收起 理由
leedun + 1 很给力!
rocking2008 + 1 切换到其它程序时,并没有自动恢复到中文的.
a405692168 + 1 很好用~~~~~~
cjrun + 1 赞一个!
xshrimp + 1 神马都是浮云
言戲無軍 + 1 赞一个!
仲文玉 + 1 赞一个!
zhoupeng220 + 1 很给力!
cghdy + 1 地基稳固,高楼大厦!
xiaoyingzi + 50 很给力!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2024-5-25 15:46:37 | 显示全部楼层
本帖最后由 baitang36 于 2024-5-26 16:18 编辑

按惯例,没币的在这里下载

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

点评

还得是白糖给力  发表于 2024-6-21 10:57
大佬无私  发表于 2024-5-25 21:33

评分

参与人数 3明经币 +3 收起 理由
p-3-ianlcc + 1 赞一个!
zhoupeng220 + 1 很给力!
jun353835273 + 1 支持一波

查看全部评分

回复 支持 5 反对 1

使用道具 举报

发表于 2024-5-27 12:04:02 | 显示全部楼层
本帖最后由 qazxswk 于 2024-5-27 12:13 编辑
moranyuyan 发表于 2024-5-27 08:05
我是在(setq *COM_DEF# '("MTEDIT" "MTEXT" "DDEDIT" "TEXT" "TEXTEDIT"  "ERN" "ZML"))这一句添加新的指 ...

不是这样的,是在你的插件中,写入切换输入法的代码
比如:


(defun c:11(/ )
(syz-setKeyboardLayout-chn)
(你的插件内容)
(if(= (syz-currentKeyboardLayout) "CHN") (syz-setKeyboardLayout-eng))
(princ)
)

点评

常用的需要切换的, 只有T命令, 其他几乎很少  发表于 2024-6-21 11:02
回复 支持 2 反对 0

使用道具 举报

 楼主| 发表于 2024-5-28 05:39:27 | 显示全部楼层
本帖最后由 baitang36 于 2024-5-28 05:45 编辑
e2002 发表于 2024-5-27 17:25
有没有办法,使切换到中文键盘布局时,使用的中文输入法,就是设置为中文输入状态?

Windows中的中文输 ...

试验过,win10会记忆你的输入法状态,你设置成中文,切换到英文布局后再切换成中文布局,输入法状态会恢复你原来的中文状态的。
WINDOWS在键盘输入这块搞得非常复杂,语言区域下有键盘布局,键盘布局下有输入法,输入法下有英文和中文,中文输入法又有好多种,常用的有搜狗、微软、百度、讯飞、微信。还有人喜欢五笔。
要精准控制输入法状态,就要去研究各种输入法,针对各种输入法去写程序。对于个人来说,这几乎是不可能完成的任务。
目前的输入法自动切换,都存在这样那样的问题,根本原因就是对现有的众多输入法没有研究透彻。没有从深层次去研究,只是根据使用习惯去编程,用户的使用习惯五花八门,就会出各种状况。
我用的方法是避开具体的输入法,不会受用户习惯影响。思路清晰且固定,状态就两种,我不管用户怎么用,让用户去适应我。
回复 支持 2 反对 0

使用道具 举报

发表于 2024-5-25 12:32:52 | 显示全部楼层
2个币,不舍得

点评

你个2b啊  发表于 2024-6-21 10:54
财迷呀  发表于 2024-5-25 12:45

评分

参与人数 6明经币 +6 收起 理由
pxt2001 + 1 盛老师大神帖子,两个币都舍不得,赞助你了
qazxswk + 1 拿去,不谢。
love1030312 + 1 赞一个!
蓦然语嫣 + 1 淡定
baitang36 + 1 神马都是浮云
gaics + 1 淡定

查看全部评分

回复 支持 2 反对 0

使用道具 举报

发表于 2024-5-29 16:47:37 | 显示全部楼层

  1. 用老师的这个模拟按键

  2. http://bbs.mjtd.com/thread-187076-1-1.html
  3. 可以把用shift切换,比如搜狗。这样win7系统可以的
  4. (defun Press-Shift( / VK_SHIFT)
  5. (setq VK_SHIFT 16 );Shift键
  6. (if (null syz_press)
  7. (alert "需加载按键插件")
  8. (syz_press VK_SHIFT);需加载按键插件
  9. )
  10. )

点评

非常好用  发表于 2024-5-30 17:36

评分

参与人数 1明经币 +1 收起 理由
baitang36 + 1 很给力!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 2024-5-25 08:41:01 | 显示全部楼层
哈哈,谢谢楼主分享,沙发

点评

这么快?还在修改中呢  发表于 2024-5-25 08:43
发表于 2024-5-25 08:56:22 | 显示全部楼层
大神又出精品了!
发表于 2024-5-25 09:42:25 | 显示全部楼层
配合命令反应器就可以实现切换了
发表于 2024-5-25 09:48:57 | 显示全部楼层
下载了,
不会用
发表于 2024-5-25 10:14:25 | 显示全部楼层
没有币下载不了
发表于 2024-5-25 10:35:07 | 显示全部楼层

下载了,
不会用
发表于 2024-5-25 10:42:17 | 显示全部楼层
我试了一下,确实爽
发表于 2024-5-25 11:11:55 | 显示全部楼层
试了下 Win11下有用 这下不用每次开cad都去切换输入法了。
发表于 2024-5-25 11:50:33 | 显示全部楼层
重启CAD还是恢复中文布局?如何记忆?

点评

问觉得应该是在编辑模式对自动切换之前的输入法状态进行记忆  发表于 2024-5-30 11:07
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-23 02:31 , Processed in 0.222003 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表