解决 Putty 右边 Alt 不好使的问题

这个问题也算是困扰了我很久的问题了。就是在 Putty 里面右边的 Alt 键似乎并不是起到 Alt 的作用。 Emacs 用户应该很快就能发觉这个问题,konsole.png如果你习惯用右边的 Alt 来按 M-x 的话,就会发现根本不起作用。

在 Shell 里面也是一样的,比如本来 Alt+f 可以把光标向前移动一个单词,可是右边的 Alt 无法使用,就没法按了 (当然对喜欢用单手来按两个键的朋友这不是问题了) 。我很久以前就曾经努力寻找过解决方案,不过似乎并没有可以解决问题的方法。我也不清楚 Putty 把右边的 Alt 键当作一个什么键发送过去了。

不过我最近突然发现这个问题可以从另外的途径来解决,就是对 Putty 进行欺骗,让它接收到的 Alt 键都是左边 Alt 。Windows 本身是支持键盘映射的,比如 Ctrl 和 Caps Lock 交换之类的,都可以通过编辑注册表来实现。当然注册表里面是二进制值,是完全不可读的。不过有一个叫做 Sharpkeys 的工具提供了一个方便的界面来帮助我们完成这个任务。你只要按下想要映射的键,它就能帮助你生成合适的二进制值写入到注册表里面去。

当然,如果你不想在全局范围内把右边的 Alt 映射到左边,也有解决办法:我在介绍 Jump or Exec 的那篇 Blog 中提到了一个叫做 AutoHotkey 的小软件。它能够实现键盘映射,并且可以只在某个特定的窗口上映射。

打开 AutoHotkey ,在通知区域的图标上右键单击会出来一个菜单,选择里面的 “Window Spy”,然后点击 Putty 的窗口,就可以看到用于标识 Putty 窗口的类为 “ahk_class PuTTY” 了。脚本里面便可以这样写:

#IfWinActive ahk_class PuTTY
RAlt::LAlt
#IfWinActive
然后重新加载一下脚本,是不是 OK 了?这个工具还有很多用处,比如,gVim 发烧友可能会希望在 gVim 的窗口里把 Caps Lock 映射为 ESC 键,因为在全局范围内映射的话,会经常不小心按到,把一些窗口给关掉了。

Comments (12)

ln October 17, 2007
在windows下面的ssh登录软件中,感觉secureCRT更加专业些。
shawn October 17, 2007
啊?我怎么没有发现?
jjxu October 21, 2007

我在autohotkey里边的脚本,按alt+p如果词霸没运行则运行词霸,如果词霸在前端则最小化,不在前端则带到前端来;alt+shift+p则杀死词霸,释放资源。 用得一直很顺手,看了你的python的脚本,能增加类似的功能吗? !p:: IfWinNotExist, 金山词霸 { Run, D:\Program Files\Powerword 2007\xdict } else { IfWinActive { WinMinimize WinHide } else { WinShow WinActivate } } return

!+p:: IfWinExist, 金山词霸 Process, Close, xdict.exe return

jjxu October 21, 2007
说错了一点,我的那个脚本词霸在前端则隐藏词霸窗口:)相当于boss key
jjxu October 21, 2007
另外,你的wiki不好用,没有“changes统计”的功能。别人很难知道你的wiki到底更没更新,更新了哪些,比如那个jump or exec应该是不久前更新的吧,如果不是我之前看过,就根本不知道。
pluskid October 21, 2007

to jjxu: 你好!我写的那个 Python 脚本当时基本上属于 quick and dirty 的解决方案了,也许添加隐藏的功能并不难,不过还有一个问题就是那个是专门在 Linux 下使用的,不能用于 Windows ,也许有时间可以改进一下。 :)

关于我的 Wiki 没有 Changes 统计,这个确实不方便,不过这其实是技术原因了,因为 Emacs Muse 没有提供这样的功能吧,当然扩展一下也很方便,不过也许没有必要了,因为我现在几乎没有再修改过那个 Wiki 了,里面的东西都是很久以前写好的,现在它作为一堆静态的 HTML 页面放在那里,不过还是挺有价值的,一些资料我自己也经常去查一查。 :)

多谢你的建议和意见!

jjxu October 22, 2007
谢谢,我正是打算在linux下用你的那个python程序的;)
pluskid October 22, 2007
to jjxu:
原来是这样的!呵呵!不过我想那个东西我可能暂时更新不了了,一来我很久都没有用 Python 了,完全生疏了;二来为了专注于学习,我把 Linux 的 X 给卸载掉了,呵呵!如果你喜欢那个脚本的话,可以按照自己的需求修改一下!就是 Python 的那个 X 库文档不是很全,查起来也许有一些麻烦,呵呵! :)
jjxu October 23, 2007
ok,thx anyway,我想办法改改,另外祝学习顺利:)
Goncha October 23, 2007
解决Right Alt的方法:http://joshstaiger.org/archives/2005/04/fixing_the_righ.html
pluskid October 23, 2007
to jjxu:
Thanks!
pluskid October 23, 2007

to Goncha: 恩,你给的链接里面说的是在 Console 下右边 Alt 键的问题,我以前也确实碰到过这个问题,不过我记得当时 galilette 也给过我一个解决方案,我也记录在我的 Wiki 里面了。

不过这篇 Blog 说的是不同的问题,我想这个问题应该是属于 putty 的吧。 :)

Thank you, anyway.