一半君的总结纸

听话只听一半君

#121 如何给maya script editor添加自定义快捷键?

maya的script editor功能比较简单,但是又“不能不用“,有几个“痛点“比如:

    • 没有toggle comment的快捷键,如果在maya里敲代码,觉得有点烦躁,在其他软件里,一般快捷键是ctrl+/
    • tab / shift+tab 有时候只能缩进第一段代码,如果你一大段代码中间有空行,下面的行都没有被缩进
    • ctrl+e 运行全部代码的时候,编辑器窗口里的代码会消失,觉得这个设计很反人类,自动桌好像根本不管

lz试着用乱搞的方法来自己加几个快捷键,思路是:如果可以自己加个eventfilter,判断下当前panel如果是scripteditor,就找到当前的tab对应的QTextEdit,然后进行相应的操作(不知道lz是不是自找没趣,说不定不用这么麻烦)

首先试一下install个eventfilter,看能不能生效

可以!当在scripteditor窗口上方按下ctrl+/时,将会看到

ctrl+/ pressed
current tab: formLayout216

然后可以顺势得到这个QTextEdit,然后就可以设法在选择的行的相应位置插入#即可(似乎没有说的这么容易),lz先在外面弄了个小窗口做实验

问题分解:

      • 按tab/shift tab的时候插入#或者//, 但还能保持选中的字符串
      • 按ctrl+e运行选中的代码,如果没选,运行全部,但不清空代码
      • 得到当前的tab的类型,是python还是mel

update 14/07/2016:
整蛊后得到如下代码,太长所以贴到gist了,(未清理),如果在script editor运行后,即可得到上面描述的效果

update 17/07/2016:
继续乱搞了下,现在的快捷键有

  • ctrl+/ toggle comment
  • ctrl+d 删除行
  • ctrl+e 运行代码
  • tab和shift+tab “强化“版的缩进

效果如下:
toggle comment效果:
enhanced_scripteditor_comment
其他效果见imgur代码示例

上图中快捷键显示用的是key-mon,EPEL repo里有,所以用yum直接装了

下面还想试下看看能不能把sublime的ctrl+r的效果弄进来,还有ctrl+g的效果,首先试下有没有可能直接新加个widget到qtextedit的顶部中间

parent_widget = self.textedit.parent()
parent_rect=parent_widget.childrenRect()
_,_,w,h=parent_rect.getCoords()
btn =QtGui.QPushButton('yeah',parent=parent_widget)
btn.setGeometry(w/2-w*0.6/2,0,w*0.6,32)
btn.show()

似乎可行,看来我只要设法在上图所示位置加一个带QCompleter的QLineEdit即可,然后用regex搜到所有symbol或者class/function名字,显示在QCompleter里即可

先在Maya外面简化下问题试试,外部测试1
外部测试2, 上下箭头选择item后,显示行数, 代码示例

然后在Maya里试试,似乎可以

但是感觉比较刺眼,sublime的高亮颜色在编辑窗口没有焦点的时候是比较淡的,而这里不管script editor下部有没有焦点,都是很亮的蓝色,lz继续乱搞了下,似乎可以这样

其原理是把palette的inactive状态时候的highlight color改暗点,默认时候和active状态的颜色一样,有点刺眼,例子里举的颜色不好,lz准备继续改暗一点,代码示例

待续…

lz把最新代码放在了ogTools组合里,地址https://github.com/oglops/ogTools/

参考:
script editor looses cursor after going to different software and coming back to Maya.
Creating an event filter
Classes and Objects III: Metaclasses, Abstract Base Classes and Class Decorators
Python: Why to use @wraps with decorators?
复盘一个关于QComboBox的issue

Advertisements

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: