Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
df with colored ascii graphics bar
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index Documentation, Tips & Tricks
View previous topic :: View next topic  
Author Message
DiskBreaker
Apprentice
Apprentice


Joined: 07 Oct 2003
Posts: 224

PostPosted: Wed Jan 07, 2004 7:46 am    Post subject: df with colored ascii graphics bar Reply with quote

After reading apokalyptik's fancy version of the free command (freecolor) thread, I thought that good old df could also use an overhaul. I patched df.c of the GNU coreutils package (sys-apps/coreutils) to include an -g / --graphical option, which supresses the printing of the disk usage statistics and instead displays a nice colored ascii graph showing how much disk space is being used, together with the percentage and the amount of free disk space available. That way you can asses how much disk space you have left much faster than by reading all the numerical output.
The whole thing looks like this:
.....http://www.freewebs.com/diskbreaker/dfgraph.png
/dev/hda13 [##############################***** ] 87% (1.9G) /
.........none [********************************************] ..0% (314M) /dev/shm
/dev/hda11 [##################################*] 99% (1.1G) /mnt/mac

The -g option is totally compatible with all other df options (e.g. you can also display inode usage with a graph with the -i option). The patch is for the current coreutils 5.0.91 and also works with the very latest CVS version (df.c revision 1.156). If you have an old version of df where the patch fails, just drop me a note which version you are using and I will fix it.

Download the patch.

Have fun,
DiskBreaker

Code:
--- df.c.orig   2004-01-06 23:59:27.000000000 +0000
+++ df.c   2004-01-07 06:18:52.000000000 +0000
@@ -17,7 +17,8 @@
 
 /* Written by David MacKenzie <djm@gnu.ai.mit.edu>.
    --human-readable and --megabyte options added by lm@sgi.com.
-   --si and large file support added by eggert@twinsun.com.  */
+   --si and large file support added by eggert@twinsun.com. 
+   --graphical option added by Disk.Breaker AT gmx.net */
 
 #include <config.h>
 #include <stdio.h>
@@ -44,12 +45,18 @@
 #define AUTHORS \
   N_ ("Torbjorn Granlund, David MacKenzie, and Paul Eggert")
 
+#define BARLEN 35
+#define HEADERLEN 14
+
 /* Name this program was run with. */
 char *program_name;
 
 /* If nonzero, show inode information. */
 static int inode_format;
 
+/* If nonzero, show colored bargraph with disk usage */
+static int graphical;
+
 /* If nonzero, show even filesystems with zero size or
    uninteresting types. */
 static int show_all_fs;
@@ -124,6 +131,7 @@
   {"all", no_argument, NULL, 'a'},
   {"block-size", required_argument, NULL, 'B'},
   {"inodes", no_argument, NULL, 'i'},
+  {"graphical", no_argument, NULL, 'g'},
   {"human-readable", no_argument, NULL, 'h'},
   {"si", no_argument, NULL, 'H'},
   {"kilobytes", no_argument, NULL, 'k'}, /* long form is obsolescent */
@@ -140,6 +148,21 @@
   {NULL, 0, NULL, 0}
 };
 
+static void bargraph (float percent, char marks[BARLEN+HEADERLEN]) {
+  char percentage[BARLEN], remain[BARLEN];
+  unsigned int numberofmarks, remainnum;
+
+  numberofmarks = (int) ((float) (BARLEN*(percent/100)));
+  remainnum = BARLEN-numberofmarks;
+  memset(percentage, '#', numberofmarks);
+  memset(remain, '*', remainnum);
+  percentage[numberofmarks] = 0;
+  remain[remainnum] = 0;
+  sprintf(marks,"\033[1;36m%s\033[1;32m%s\033[0m%", percentage, remain);
+
+  return;
+}
+
 static void
 print_header (void)
 {
@@ -323,6 +346,13 @@
       else
    printf ("%s %s", disk, fstype);
     }
+  else if (graphical > 0)
+    {
+      if ((int) strlen (disk) > 20 && !posix_format)
+   printf ("%s\n%12s", disk, "");
+      else
+   printf ("%10s  ", disk);
+    }
   else
     {
       if ((int) strlen (disk) > 20 && !posix_format)
@@ -369,7 +399,9 @@
    }
     }
 
-  printf (" %*s %*s %*s ",
+  if (graphical == 0)
+    {
+      printf (" %*s %*s %*s ",
      width, df_readable (0, total,
                buf[0], input_units, output_units),
      width, df_readable (negate_used, used,
@@ -377,6 +409,7 @@
      width, df_readable (negate_available, available,
                buf[2], input_units, output_units));
 
+    }
   if (used == -1 || available == -1)
     ;
   else if (!negate_used
@@ -411,12 +444,26 @@
    }
     }
 
-  if (0 <= pct)
+  // Print the graph
+  if (graphical > 0)
+    {
+   char realbarchart[BARLEN+HEADERLEN];
+   bargraph((float) pct, realbarchart);
+   printf("\033[1;37m[%*s\033[1;37m]\033[0m ", use_width, realbarchart);
+    }
+
+  if (0 <= pct && graphical == 0)
     printf ("%*.0f%%", use_width - 1, pct);
+  else if (0 <= pct && graphical > 0)
+    printf ("\033[1;37m%*.0f\033[0;31m%%\033[0m", use_width - 1, pct);
   else
     printf ("%*s", use_width, "- ");
 
-  if (mount_point)
+  // Print available diskspace
+  if (graphical > 0)
+    printf (" (%*s)", use_width, df_readable (negate_available, available, buf[2], input_units, output_units));
+
+if (mount_point)
     {
 #ifdef HIDE_AUTOMOUNT_PREFIX
       /* Don't print the first directory name in MOUNT_POINT if it's an
@@ -736,6 +783,7 @@
       fputs (_("\
   -a, --all             include filesystems having 0 blocks\n\
   -B, --block-size=SIZE use SIZE-byte blocks\n\
+  -g, --graphical   display coloured graph instead of numerical output\n\
   -h, --human-readable  print sizes in human readable format (e.g., 1K 234M 2G)\n\
   -H, --si              likewise, but use powers of 1000 not 1024\n\
 "), stdout);
@@ -784,6 +832,7 @@
   inode_format = 0;
   show_all_fs = 0;
   show_listed_fs = 0;
+  graphical = 0;
 
   human_output_opts = human_options (getenv ("DF_BLOCK_SIZE"), false,
                  &output_block_size);
@@ -792,7 +841,7 @@
   posix_format = 0;
   exit_status = 0;
 
-  while ((c = getopt_long (argc, argv, "aB:iF:hHklmPTt:vx:", long_options, NULL))
+  while ((c = getopt_long (argc, argv, "aB:iF:ghHklmPTt:vx:", long_options, NULL))
     != -1)
     {
       switch (c)
@@ -808,6 +857,9 @@
    case 'i':
      inode_format = 1;
      break;
+   case 'g':
+     graphical = 1;
+     break;
    case 'h':
      human_output_opts = human_autoscale | human_SI | human_base_1024;
      output_block_size = 1;
@@ -934,7 +986,7 @@
       /* Display explicitly requested empty filesystems. */
       show_listed_fs = 1;
 
-      if (n_valid_args > 0)
+      if (n_valid_args > 0 && graphical == 0)
    print_header ();
 
       for (i = optind; i < argc; ++i)
@@ -943,7 +995,8 @@
     }
   else
     {
-      print_header ();
+      if (graphical == 0)
+         print_header ();
       show_all_entries ();
     }
Back to top
View user's profile Send private message
Gruffi
Apprentice
Apprentice


Joined: 15 Aug 2003
Posts: 209
Location: Antwerpen - Flanders - Belgium

PostPosted: Wed Jan 07, 2004 8:01 am    Post subject: Reply with quote

Great! Now we finally have the killer app that will make everyone switch to Genoo :wink:
_________________
... and we will show Microsoft, that they cannot take whatever they want. And that Free Software is our software!
Back to top
View user's profile Send private message
DiskBreaker
Apprentice
Apprentice


Joined: 07 Oct 2003
Posts: 224

PostPosted: Wed Jan 07, 2004 8:09 am    Post subject: Reply with quote

Yeah, I agree :D
The way emerge uses color and bold font in its output, the way the default gentoo prompt is colored - it really makes gentoo stand out among other distros. So I guess it can't hurt to have some colour in all the other tools you use daily (ls --color, grep --color, colordiff, freecolor etc. pp.).
Back to top
View user's profile Send private message
amne
Bodhisattva
Bodhisattva


Joined: 17 Nov 2002
Posts: 6378
Location: Graz / EU

PostPosted: Wed Jan 07, 2004 12:41 pm    Post subject: Reply with quote

I hope it doesn't anger you, but there's already another colourful df:
emerge pydf
Back to top
View user's profile Send private message
DiskBreaker
Apprentice
Apprentice


Joined: 07 Oct 2003
Posts: 224

PostPosted: Wed Jan 07, 2004 5:24 pm    Post subject: Reply with quote

Oh hehe :oops: ... I guess I should have done a little more googling. :roll:

In any case the patch was a quick hack of 20 minutes... Now I have two programs giving me almost exactly the same output :wink:
Back to top
View user's profile Send private message
ebrostig
Bodhisattva
Bodhisattva


Joined: 20 Jul 2002
Posts: 3152
Location: Orlando, Fl

PostPosted: Wed Jan 07, 2004 9:05 pm    Post subject: Reply with quote

pydf is nice, but getting this into the regular df would be great.

Open a new bug at bugs.gentoo.org against coreutils and upload the patch.

Erik
_________________
'Yes, Firefox is indeed greater than women. Can women block pops up for you? No. Can Firefox show you naked women? Yes.'
Back to top
View user's profile Send private message
Redeeman
l33t
l33t


Joined: 25 Sep 2003
Posts: 957
Location: Denmark

PostPosted: Wed Jan 07, 2004 10:03 pm    Post subject: Reply with quote

indeed! we want this into standard gentoo! this is what makes gentoo! :D
_________________
Sandberg Enterprises
Back to top
View user's profile Send private message
amne
Bodhisattva
Bodhisattva


Joined: 17 Nov 2002
Posts: 6378
Location: Graz / EU

PostPosted: Wed Jan 07, 2004 11:20 pm    Post subject: Reply with quote

DiskBreaker wrote:
Oh hehe :oops: ... I guess I should have done a little more googling. :roll:

In any case the patch was a quick hack of 20 minutes... Now I have two programs giving me almost exactly the same output :wink:

In that case a search to find pydf wouldn't have taken less time :)
Back to top
View user's profile Send private message
DiskBreaker
Apprentice
Apprentice


Joined: 07 Oct 2003
Posts: 224

PostPosted: Thu Jan 08, 2004 5:27 pm    Post subject: Reply with quote

Glad you like it guys :)

But before I post this in, I guess I should polish it up a bit... It still is just a rather rough hack.

1. Since color is a matter of taste, I'll add an option to change that. I was thinking along the lines of an environment variable $DF_COLOR, similar to grep's implementation $GREP_COLOR. But since there are 2 color values (disk space used, currently blue color; and free disk space, currently green color), maybe this is not such a good approach... Or should it be able to read a config file like pydf does so that you can customize absolutely everything? Any ideas?

2. Do you think the standard df header line explaining the meaning of the values should be displayed? Currently the patch supresses its output when -g is on since the colored bar is rather self-explanatory... But maybe I should still print the headers.

3. I'll document the "-g as in gentoo" :wink: option in the man page.
Back to top
View user's profile Send private message
rojaro
l33t
l33t


Joined: 06 May 2002
Posts: 732

PostPosted: Thu Jan 08, 2004 9:31 pm    Post subject: Reply with quote

I think $DF_COLOR is a quite good idea, but you should use $DF_COLORS instead and the $LS_COLORS format (it's well documented and you can copy quite a lot from ls-sourcecode that reads the $LS_COLORS variable) ... a config file for something simple like this would suck. spending 4k of precious hd-space for the inode such file would need? noooo ...
_________________
A mathematician is a machine for turning coffee into theorems. ~ Alfred Renyi (*1921 - †1970)
Back to top
View user's profile Send private message
apokalyptik
n00b
n00b


Joined: 18 Jun 2002
Posts: 62

PostPosted: Thu Jan 08, 2004 11:29 pm    Post subject: while we wait for an ebuild... :D Reply with quote

Code:
cd /tmp
cd cd /usr/local/src/working/
wget http://www.freewebs.com/diskbreaker/df-bargraph-color.diff
wget ftp://alpha.gnu.org/gnu/coreutils/coreutils-5.0.91.tar.gz
tar zxf coreutils-5.0.91.tar.gz
cd coreutils-5.0.91
cd src
patch -p0 < ../../df-bargraph-color.diff
cd ..
./configure
make
cd src
mv df /bin/colordf
cd /tmp
rm -r coreutils*
rm df-bargraph-color.diff
colordf -g


in the mean time... if anyone wants to use this... folow the abofe instructions
_________________
http://www.apokalyptik.com/
Back to top
View user's profile Send private message
snakattak3
Guru
Guru


Joined: 11 Dec 2002
Posts: 468
Location: Seattle

PostPosted: Fri Jan 09, 2004 1:57 am    Post subject: Reply with quote

To still be able to use emerge, get the patch, go to /usr/local/portage/sys-apps/coreutils/ and type:
Code:
ebuild coreutils-5.0.91-r3.ebuild fetch unpack
Then move the patch to your portage build directory (mine is /var/tmp/portage/) coreutils-5.0.91-r3/work/coreutils-5.0.91/src/ directory. Apply the patch
Code:
patch -p0<df-bargraph-color.diff
Then just go back to the directory with the ebuild, and
Code:
ebuild coreutils-5.0.91-r3.ebuild compile install qmerge
That way you can still use portage so you can keep it clean :) Then put an alias in your .bashrc (if you use bash) that says,
Code:
alias df='df -gh'

_________________
Ban Reality TV!
Adopt an Unanswered Post
Back to top
View user's profile Send private message
Satyrinox
Tux's lil' helper
Tux's lil' helper


Joined: 08 Oct 2003
Posts: 110
Location: New Mexico

PostPosted: Fri Jan 09, 2004 9:31 am    Post subject: Thats pretty Nifty! Reply with quote

I have made my own df mod , using no colour , but its nice nevertheless , i thoight id share it with you guys :lol: :idea: check it out this is the script i use to make the bars , made by a friend who was helping me learn bash and sed and awk :)
Code:
 percentmeter.sh
#!/bin/bash

percentmeter(){

        AVAIL=$1;
        USED=$2;


        let ONE=$AVAIL/100;
        LESS=1;
        let CUR=$USED/$ONE;

        METER="["
        for i in `seq 0 9`;
        do
                let C=$i*10;
                if [ $C  -lt $CUR ]
                then
                        if [ $i -eq 9 ]
                        then
                                METER="$METER*"
                        else
                                METER="$METER|"
                        fi
                else
                        if [ $LESS -eq 1 ]
                        then
                                METER="$METER*"
                                LESS=0;
                        else
                                METER="$METER|"
                        fi
                fi
        done;
        METER="$METER]"

        #echo $METER;

}


percentmeter 100 70;
echo $METER;
AVAIL=`free | grep Mem | awk '{print $2}'`;
USED=`free | grep Mem | awk '{print $4}'`;
percentmeter $AVAIL $USED;
echo $METER;
percentmeter 1000 300;
echo $METER;

then the corresponding script to get it to show
Code:
cat hdspace
#!/bin/bash

. ./percentmeter.sh

for i in `df -m | grep hda | awk '{print $2}'`;do  let hdatotal+=$i; done;
for i in `df -m | grep hda | awk '{print $3}'`;do  let hdausedtotal+=$i; done;
for i in `df -m | grep hdb | awk '{print $2}'`;do  let hdbtotal+=$i; done;
for i in `df -m | grep hdb | awk '{print $3}'`;do  let hdbusedtotal+=$i; done;


!! hope you like it , just a small scipt i messed with
then i have another script to give me info on my system and other virtues such as moniter specs and such
Code:

cat sys
#!/bin/bash
dev="ppp0"
uname=`uname -sr`
model=`cat /proc/cpuinfo | grep '^model name' | head -1 | sed -e 's/^.*: //'`
num=`cat /proc/cpuinfo | grep "model name" | wc -l | sed 's/ *//'`;
cpu=`cat /proc/cpuinfo | grep 'cpu MHz' | head -1 | sed -e 's/^.*: //'`;
procs=`ps ax | wc -l | awk '{print \$1 - 5}'`
uptime=`uptime | awk '{ print }'`
res=`xdpyinfo | grep dimensions | awk '{print \$2}'`
mips=`cat /proc/cpuinfo | grep '^bogomips' | awk '{ sum+=\$3 }'`
let packin=(`cat /proc/net/dev | grep $dev | awk -F: '/:/ {print \$2}'| awk '{pr
intf \$1}'`/1024)/1024
let packout=(`cat /proc/net/dev | grep $dev | awk -F: '/:/ {print \$2}' | awk '{
print \$9}'`/1024)/1024
memused=`free -m |grep Mem | awk '{print $3}' | head -1`
memfree=`free -m |grep Mem |awk '{print $4}'`
memtotal=`free -m |grep Mem |awk '{print $2}'`
mempercent=`free | grep Mem | awk '{print (( \$3 -(\$6 + \$7))/\$2)*100}'`
total=`df -h |egrep "(/)" |awk '{print $2}'`
used=`df -h |egrep "(/)" |awk '{print $3}'`
left=`df -h |egrep "(/)" | awk '{print $4}'`
ds="not yet!"

AVAIL=100;
USED=100;

let ONE=$AVAIL/100;
LESS=1;
let CUR=$USED/$ONE;

METER="["
for i in `seq 0 9`;
do
        let C=$i*10;
        if [ $C  -lt $CUR ]
        then
                if [ $i -eq 9 ]
                then
                        METER="$METER*"
                else
                        METER="$METER|"
                fi
        else
                if [ $LESS -eq 1 ]
                then
                        METER="$METER*"
                        LESS=0;
                else
                        METER="$METER|"
                fi
        fi
done;
METER="$METER]"

uname -n
echo "--------------------------------------------"
echo "SysInfo: $uname | $model $cpu MHz"
echo "Mem: $memused used / $memtotal total / $memfree Free  $METER"
echo "Diskspace: $ds"
echo "Screen Res: $res | Procs: $procs"
echo "Up: $uptime"
#echo "Cpu Temp: $TEMP Fan rpms: $FAN"
echo "$dev: In: $packin Megs Out: $packout Megs"
echo "--------------------------------------------"


you can change the "dev" to suit your machine , usually use eth0 or ppp0!

:mrgreen:
_________________
[Powered By Gentoo Linux
AMD Athlon 2000+
756 Megs ddr2100 OC-Systems RAM
NVIDIA Geforce FX 5200
Leadtek Mobo]
<same config for 2 years now ;-) >
Back to top
View user's profile Send private message
ed0n
l33t
l33t


Joined: 23 Apr 2003
Posts: 638
Location: Prishtine/Kosove

PostPosted: Fri Jan 09, 2004 9:40 am    Post subject: Reply with quote

thanks , I am really linking this :) .
Back to top
View user's profile Send private message
Satyrinox
Tux's lil' helper
Tux's lil' helper


Joined: 08 Oct 2003
Posts: 110
Location: New Mexico

PostPosted: Sat Jan 10, 2004 5:45 am    Post subject: Reply with quote

Right on , im glad that someone likes my little script , btw heres the result on my box :)
Code:
malifick@Gen_Tw0_Pr0jekt_2501 malifick $ ./sys
Gen_Tw0_Pr0jekt_2501
--------------------------------------------
SysInfo: Linux 2.4.20-gaming-r3 | AMD Athlon(tm) Processor 698.665 MHz
Mem: 245 used / 249 total / 4 Free  [|||||||||*]
Diskspace: not yet!
Screen Res: 1024x768 | Procs: 43
Up:  22:46:02 up  1:55,  0 users,  load average: 0.33, 0.15, 0.09
ppp0: In: 1 Megs Out: 0 Megs
--------------------------------------------
-----------*Go To The Darkside*-------------




LoL i like the show X-Play they had a day that they rated all thier game reviews with Darkside Points *
:mrgreen:
_________________
[Powered By Gentoo Linux
AMD Athlon 2000+
756 Megs ddr2100 OC-Systems RAM
NVIDIA Geforce FX 5200
Leadtek Mobo]
<same config for 2 years now ;-) >
Back to top
View user's profile Send private message
Satyrinox
Tux's lil' helper
Tux's lil' helper


Joined: 08 Oct 2003
Posts: 110
Location: New Mexico

PostPosted: Mon Jan 12, 2004 5:39 am    Post subject: oops Reply with quote

also i forgot to include a description of my hdspace script lol so here goes
Code:
 ./hdspace
[|||||||*||]
[|*||||||||]
[|||*||||||]

_________________
[Powered By Gentoo Linux
AMD Athlon 2000+
756 Megs ddr2100 OC-Systems RAM
NVIDIA Geforce FX 5200
Leadtek Mobo]
<same config for 2 years now ;-) >
Back to top
View user's profile Send private message
vdboor
Guru
Guru


Joined: 03 Dec 2003
Posts: 592
Location: The Netherlands

PostPosted: Mon Jan 12, 2004 9:05 am    Post subject: Reply with quote

Cool thread. :D and I hope this can be sent upstream.

I can't seam to patch my coreutils-5.0.91-r3: :(

Code:
patching file df.c
Hunk #5 succeeded at 375 with fuzz 2 (offset 29 lines).
Hunk #6 FAILED at 428.
Hunk #7 succeeded at 438 with fuzz 2 (offset 29 lines).
Hunk #8 succeeded at 473 with fuzz 1 (offset 29 lines).
Hunk #9 succeeded at 813 (offset 30 lines).
Hunk #10 succeeded at 862 with fuzz 1 (offset 30 lines).
Hunk #11 FAILED at 871.
Hunk #12 FAILED at 887.
Hunk #13 FAILED at 1016.
Hunk #14 succeeded at 1025 (offset 30 lines).
4 out of 14 hunks FAILED -- saving rejects to file df.c.rej

_________________
The best way to accelerate a windows server is by 9.81M/S²
Linux user #311670 and Yet Another Perl Programmer

[ screenies | Coding on KMess ]
Back to top
View user's profile Send private message
DiskBreaker
Apprentice
Apprentice


Joined: 07 Oct 2003
Posts: 224

PostPosted: Wed Jan 14, 2004 2:39 am    Post subject: Reply with quote

vdboor wrote:
I can't seam to patch my coreutils-5.0.91-r3: :(

Code:
patching file df.c
Hunk #5 succeeded at 375 with fuzz 2 (offset 29 lines).
Hunk #6 FAILED at 428.
Hunk #7 succeeded at 438 with fuzz 2 (offset 29 lines).
Hunk #8 succeeded at 473 with fuzz 1 (offset 29 lines).
Hunk #9 succeeded at 813 (offset 30 lines).
Hunk #10 succeeded at 862 with fuzz 1 (offset 30 lines).
Hunk #11 FAILED at 871.
Hunk #12 FAILED at 887.
Hunk #13 FAILED at 1016.
Hunk #14 succeeded at 1025 (offset 30 lines).
4 out of 14 hunks FAILED -- saving rejects to file df.c.rej


Hmm weird... I unpacked and patched both coreutils-5.0.91-r3 and coreutils-5.0.91-r4 and the patch applied cleanly. Did you use emerge to get your sources?
Code:
ebuild coreutils-5.0.91-r3 fetch unpack

Tell me where you got your source from or just send me your df.c and I'll fix the patch for you.

vdboor wrote:
Cool thread. :D and I hope this can be sent upstream.

Thanks :) I'll try to finish the patch soon and post it to bugzilla.

Cheers,
DiskBreaker
Back to top
View user's profile Send private message
vdboor
Guru
Guru


Joined: 03 Dec 2003
Posts: 592
Location: The Netherlands

PostPosted: Wed Jan 14, 2004 10:42 am    Post subject: Reply with quote

I'd used the ebuild commands mentioned earlier in this thead, it seams that my versions was a bit different though. Perhaps I need to use emerge sync more often, because somehow, my coreutils downgraded to 5.0-r5.. don't ask me why... I was amazed to see this :oops:

The patch merges well with sys-apps/coreutils-5.0-r5, The first print_header() statement wasn't patched, but I've fixed this manually.

But I have a very cool 'df' command now. :) thanks for your work, and I hope to see this patch in more systems soon. Just one thing, I find the red percent sign a bit 'overdone'. imho, it could have been left white.. (try to use linux terminal colors with your patch) :roll:
_________________
The best way to accelerate a windows server is by 9.81M/S²
Linux user #311670 and Yet Another Perl Programmer

[ screenies | Coding on KMess ]
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Documentation, Tips & Tricks All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum