diff --git a/compute_total_pkg_size.py b/compute_total_pkg_size.py new file mode 100755 index 0000000..b89b8b6 --- /dev/null +++ b/compute_total_pkg_size.py @@ -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)) diff --git a/wm_minimize.sh b/wm_minimize.sh new file mode 100755 index 0000000..7565110 --- /dev/null +++ b/wm_minimize.sh @@ -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 +