Two more scripts.

I should move this folder to ~/.bin, probably
This commit is contained in:
Abhay Rana 2012-06-09 04:48:01 +05:30
parent 1c6bea1d59
commit 87c31364f1
2 changed files with 145 additions and 0 deletions

105
compute_total_pkg_size.py Executable file
View File

@ -0,0 +1,105 @@
#!/usr/bin/env python
'''
http://ubuntuforums.org/showthread.php?t=1154940&highlight=get_dependencies
'''
import sys
from subprocess import Popen,PIPE,STDOUT
__usage__='''
compute_total_pkg_size.py emacs
'''
pkg=sys.argv[1]
def report_lines(alist,max_len,vdiv,hline):
'''
alist is a list of tuples
report_lines returns a list of strings
'''
result=[]
svs=' '+vdiv+' '
for row in alist:
if row[0]=='-':
line_string=hline
else:
data_justified=[str(elt).rjust(num) for elt,num in zip(row,max_len)]
data_svs=svs.join(data_justified)
line_list=[vdiv,data_svs,vdiv]
line_string=' '.join(line_list)
result.append(line_string)
return result
def report_table(alist,corner='+',hdiv='-',vdiv='|',header=True):
max_len=max_col_len(alist)
hline_l=[corner,
corner.join([hdiv.ljust(max_num+2,hdiv)
for max_num in max_len]),
corner]
hline=''.join(hline_l)
result=report_lines(alist,max_len,vdiv,hline)
if header:
new_result=[hline,result[0],hline,]
new_result.extend(result[1:])
else:
new_result=[hline,]
new_result.extend(result)
new_result.append(hline)
result='\n'.join(new_result)+'\n'
return result
def max_col_len(alist):
return [max([len(str(elt)) for elt in column]) for column in zip(*alist)]
def find_installed():
'''
Returns a list of all the packages installed on the computer
'''
proc=Popen("dpkg --get-selections | awk '/install/{print $1}'",
shell=True, stdout=PIPE, stderr=open('/dev/null'),)
return proc.communicate()[0].split()
def get_size(pkg):
'''
Returns (download size, installed size) in KiB
'''
cmd='apt-cache show %s'%pkg
proc=Popen(cmd, shell=True, stdout=PIPE, )
size=0
install_size=0
for line in proc.communicate()[0].split('\n'):
if line.startswith('Size: '):
size=line.split()[-1]
elif line.startswith('Installed-Size: '):
install_size=line.split()[-1]
return (int(size)/1024,int(install_size))
def get_dependencies(pkg):
'''
Returns all the (recursive) dependencies of a package
'''
cmd='apt-rdepends -s=DEPENDS %s'%pkg
proc=Popen(cmd, shell=True, stdout=PIPE, )
return proc.communicate()[0].strip().split('\n')
deps=get_dependencies(pkg)
installed_packages=find_installed()
needed_packages=list(set(deps)-set(installed_packages))
(sizes_dep,sizes_dep_installed)=zip(*[get_size(pkg) for pkg in deps])
(sizes_needed,sizes_needed_installed)=zip(*[get_size(pkg) for pkg in needed_packages])
data=[('Package (*=needed)','Download size (KiB)','Installed size (KiB)')]
for apkg,size,install_size in zip(deps,sizes_dep,sizes_dep_installed):
if apkg in needed_packages:
data.append(('%s *'%apkg,size,install_size))
else:
data.append((apkg,size,install_size))
print(report_table(data))
data=[('','Sizes (KiB)')]
data.append(('Total download size',sum(sizes_dep)))
data.append(('Total installed size',sum(sizes_dep_installed)))
data.append(('Total download size needed',sum(sizes_needed)))
data.append(('Total installed size needed',sum(sizes_needed_installed)))
print(report_table(data))

40
wm_minimize.sh Executable file
View File

@ -0,0 +1,40 @@
#! /bin/sh
# minimize/restore windows on current desktop
# -----------------------------------
# vermaden [AT] interia [DOT] pl
# http://toya.net.pl/~vermaden/links.htm
CURRENT_DESKTOP=$( wmctrl -d | egrep "^[0-9][ ]{2}\*" | awk '{print $1}' )
WINDOW_LIST=$( wmctrl -l | egrep "^[0-9]x.{8}\ {2}${CURRENT_DESKTOP}" | awk '{print $1}' )
WINDOW_COUNT=0
for WINDOW in ${WINDOW_LIST} ;do
WINDOW_COUNT=$(( ${WINDOW_COUNT} + 1 ))
done
minimize () {
for WINDOW in ${WINDOW_LIST}; do
wmctrl -t ${CURRENT_DESKTOP} -i -r ${WINDOW} -b add,hidden
done
}
restore () {
for WINDOW in ${WINDOW_LIST}; do
wmctrl -t ${CURRENT_DESKTOP} -i -r ${WINDOW} -b remove,hidden
done
}
MINIMIZED=0
for WINDOW in ${WINDOW_LIST}; do
if xprop -id ${WINDOW} _NET_WM_STATE | grep -q NET_WM_STATE_HIDDEN; then
MINIMIZED=$(( ${MINIMIZED} + 1 ))
fi
done
if [ ${MINIMIZED} -eq ${WINDOW_COUNT} ]; then
restore
else
minimize
fi