查看memcache所有key的小程序
本地开发过程中经常要查看内容写没写到memcache中,一般看一下memcache中有没有想对应的key就好了,懒得用telnet连接memcache,自带的memcached-tool输出又不怎么方便阅读,so 写了一个简单的查看memcache中key的python小程序
# /usr/bin/env python
# -*- coding: utf-8 -*
import socket
import re
class MemcacheServer(object):
def __init__(self):
self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
def connect(self, host=None, port=None):
self.host = host
self.port = port
try:
self.server.connect((host, port))
except:
print "connect error ......"
def send(self, msg):
self.server.send(msg)
def get_msg(self):
buf_len = 1024
msg = u""
while True:
buf = self.server.recv(buf_len)
msg += buf
if len(buf)!=buf_len:
break
return msg
if __name__ == "__main__":
ms = MemcacheServer()
ms.connect("127.0.0.1", 11211)
items = {}
totalitems = 0
ms.send("stats items\r\n")
for line in ms.get_msg().splitlines():
match = re.search(u"^STAT items:(\d*):number (\d*)", line)
if match:
i, j = match.groups()
items[int(i)] = int(j)
totalitems += int(j)
for buckets in sorted(items.keys()):
ms.send("stats cachedump %d %d\r\n" % (buckets, items[buckets]))
for line in ms.get_msg().splitlines():
match = re.search(u"^ITEM (\S+) \[.* (\d+) s\]", line)
if match:
print match.groups()[0]
更新了下Rhythmbox文件夹视图插件
本来想这个东西没什么用 烂尾了算了
谁知道有人发邮件提起这个东东 说喜欢用 可现在用不了了
那国外友人用的是F15
我装上Rhythmbox一看 这玩意蹦的也太快了吧
我好像才不用它也就几个月的时间吧 版本号直接从0.12蹦到了2.90
女大十八变啊……API都长大了……依稀还能辨认出模样
也用上GTK3了 细节地方各种不同啊……
配置也改成dconf了
改了小两天 终于勉强能用了
欢迎大家各种使用各种围观~~~~
PS:项目地址也从google code搬到了github上,https://github.com/imdiot/rhythmbox_folder_view
来~让我们把gnome-shell中ibus的tray挪挪地儿~~~
在很久很久以前 那时的gnome-shell的系统托盘还在右上角
不知从何时起 他们分成了status-icon和message-icon
status-icon有了CSS的外衣住在了右上角 message-icon则搬到了右下角
但是因为底部的通知区域设计成了有消息才会有反应 例如dbus的一些通知什么的
因此产生了一些不爽的感觉
比如我想看一些程序tray的变化 我只能把鼠标挪到右下角才能看到
毕竟现在适合gnome-shell的这种通知模式的程序还很少
下面就以ibus为例 让ibus的tray挪挪窝:
打开statusIconDispatcher.js文件
我用的是arch+testing安装的gnome-shell,statusIconDispatcher.js文件在/usr/share/gnome-shell/js/ui目录下
如果是自己编译的gnome-shell那就应该在~/gnome-shell/install/share/gnome-shell/js/ui目录下
看到statusIconDispatcher.js中的STANDARD_TRAY_ICON_IMPLEMENTATIONS变量了吗 没错 这就是右上方status-icon的白名单~
这个字典的key呢 则是程序tray的wm_class
大家看出来了吧 其实gnome-shell是想把ibus的tray放在右上方的status-icon区域的
可他们毕竟不是中国人 不用ibus………… 这个ibus-ui-gtk好像还是很久很久以前要装ibus-gtk、ibus-qt时候的东西呢吧????
现在ibus tray的wm_class没有设 是默认的main.py……
所以我们只要吧ibus-ui-gtk改成main.py就大功告成啦~~~
其实这根本就不是什么问题嘛 只要ibus的人和gnome-shell的人稍微沟通一些 下个版本大家一起做一两行的就该就OK了嘛
白名单加上statusIconDispatcher.js中的_onTrayIconAdded、_onTrayIconRemoved就可以随你挪啦~想挪谁挪谁 像以前那样放在一起都没问题~
PS:
ibus extensions
StatusIconDispatcher = imports.ui.statusIconDispatcher;
function main() {
StatusIconDispatcher.STANDARD_TRAY_ICON_IMPLEMENTATIONS['main.py'] = 'ibus';
}
gnome-shell alt+tab 扩展
详情见《小hack一下gnome-shell的alt+tab》and《GNOME Shell的“Alt+Tab”革新》
听从TualatriX建议写成了个扩展
这可是我第一个gnome-shell扩展哦
刚开始看js 也刚耍上gnome-shell
用的也是最笨的方法………………
使用方法:
在~/.local/share/gnome-shell/extensions/建立alt_tab_key_press@imdiot.wordpress.com文件夹
在alt_tab_key_press@imdiot.wordpress.com文件夹中建立两文件
extension.js:
const St = imports.gi.St;
const Mainloop = imports.mainloop;
const Shell = imports.gi.Shell;
const Clutter = imports.gi.Clutter;
const Meta = imports.gi.Meta;
const Lang = imports.lang;
const Main = imports.ui.main;
const AltTab = imports.ui.altTab;
function startAppSwitcher (shellwm, binding, window, backwards) {
if (shellwm._workspaceSwitcherPopup != null)
shellwm._workspaceSwitcherPopup.actor.hide();
let tabPopup = new AltTab.AltTabPopup();
tabPopup._keyPressEvent = function(actor, event) {
let keysym = event.get_key_symbol();
let event_state = Shell.get_event_state(event);
let backwards = event_state & Clutter.ModifierType.SHIFT_MASK;
let action = global.screen.get_display().get_keybinding_action(event.get_key_code(), event_state);
this._disableHover();
if (action == Meta.KeyBindingAction.SWITCH_GROUP)
this._select(this._currentApp, backwards ? this._previousWindow() : this._nextWindow());
else if (keysym == Clutter.Escape)
this.destroy();
else if (this._thumbnailsFocused) {
if (action == Meta.KeyBindingAction.SWITCH_WINDOWS)
if (backwards) {
if (this._currentWindow == 0 || this._currentWindow == -1)
this._select(this._previousApp());
else
this._select(this._currentApp, this._previousWindow());
} else {
if (this._currentWindow == this._appIcons[this._currentApp].cachedWindows.length - 1)
this._select(this._nextApp());
else
this._select(this._currentApp, this._nextWindow());
}
else if (keysym == Clutter.Left || keysym == Clutter.a)
this._select(this._currentApp, this._previousWindow());
else if (keysym == Clutter.Right || keysym == Clutter.d || keysym == 96)
this._select(this._currentApp, this._nextWindow());
else if (keysym == Clutter.Up || keysym == Clutter.w)
this._select(this._currentApp, null, true);
} else {
if (action == Meta.KeyBindingAction.SWITCH_WINDOWS)
this._select(backwards ? this._previousApp() : this._nextApp());
else if (keysym == Clutter.Left || keysym == Clutter.a)
this._select(this._previousApp());
else if (keysym == Clutter.Right || keysym == Clutter.d)
this._select(this._nextApp());
else if (keysym == Clutter.Down || keysym == Clutter.s || keysym == 96)
this._select(this._currentApp, 0);
}
return true;
}
if (!tabPopup.show(backwards, binding == 'switch_group'))
tabPopup.destroy();
}
function main() {
Main.wm.setKeybindingHandler('switch_windows', Lang.bind(Main.wm, startAppSwitcher));
}
metadata.json:
{
"shell-version": ["3.0.0.2"],
"uuid": "alt_tab_key_press@imdiot.wordpress.com",
"name": "alt_tab_key_press",
"description": "change alt+tab key press -> begin alt+tab you can alt+w,s,a,d,` control",
"url": "imdiot.wordpress.com"
}
小hack一下gnome-shell的alt+tab
TualatriX在《GNOME Shell的“Alt+Tab”革新》中介绍了gnome-shell的alt+tab 那时我还没用过gnome-shell 虽说之后偶尔耍耍gnome-shell 但也是浅尝即止 这几天有时间好好玩了玩gnome-sehll
看过TualatriX的那篇文章后 发现自己的alt+tab的快捷键与那时的已经不一样了 可能是代码做了调整了 已经没有alt+`了 alt+a、w、s、d也变成了alt+上、下、左、右 感觉还没有`、a、w、s、d方便
所以就hack了一下alt+tab 具体的使用方式可以看TualatriX的文章
[yangguang] [~/gnome-shell/install/share/gnome-shell/js/ui] > diff altTab.js ../../../../../source/gnome-shell/js/ui/altTab.js 253c253 < else if (keysym == Clutter.Left || keysym == Clutter.a) --- > else if (keysym == Clutter.Left) 255c255 < else if (keysym == Clutter.Right || keysym == Clutter.d || keysym == 96) --- > else if (keysym == Clutter.Right) 257c257 < else if (keysym == Clutter.Up || keysym == Clutter.w) --- > else if (keysym == Clutter.Up)2 62c262 < else if (keysym == Clutter.Left || keysym == Clutter.a) --- > else if (keysym == Clutter.Left) 264c264 < else if (keysym == Clutter.Right || keysym == Clutter.d) --- > else if (keysym == Clutter.Right) 266c266 < else if (keysym == Clutter.Down || keysym == Clutter.s || keysym == 96) --- > else if (keysym == Clutter.Down)




最新评论