De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"
Dit had je zelf ook wel kunnen vinden door te zoeken in man bash volgens mij, het is namelijk gelijk de eerste "hit" als ik zoek in die manpage.
COLUMNS
Used by the select builtin command to determine the terminal width when printing selection lists. Automatically
set upon receipt of a SIGWINCH.
De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"
Remember, if you have any trouble you can always send a telegram to the Right People.
Dat gaat niet, want de docent moet het ook kunnen draaien, en die word niet blij als ie voor iedereen dit soort dingen moet gaan installeren.raoulduke schreef op 06 mei 2004 @ 23:20:
Je kan eventueel ook kijken of je een ncurses gebaseerde applicatie kan bouwen. Deze library vind je op http://www.gnu.org/software/ncurses/ .
De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"
windows/cygwin (bash shell)NetForce1 schreef op 06 mei 2004 @ 23:20:
die had ik idd al wel gevonden, maar ik las ook ergens (geen flauw id meer waar) dat die niet altijd geset is, of is dat alleen bij uitzonderlijke gevallen?
1
2
3
| $ set | egrep COLUMNS\|LINES COLUMNS=80 LINES=25 |
openbsd/xterm
1
2
3
| root@tech-no-logical:~# set | egrep COLUMNS\|LINES COLUMNS=140 LINES=25 |
linux/xterm
1
2
3
| peter@ns:~$ set | egrep COLUMNS\|LINES COLUMNS=101 LINES=26 |
linux/cygwin (doorgelogd met ssh)
1
2
3
| peter@fire:~$ set | egrep COLUMNS\|LINES COLUMNS=80 LINES=25 |
werkt best aardig :-)
[ Voor 4% gewijzigd door tech-no-logical op 06-05-2004 23:40 ]
Verwijderd
$COLUMNS is geset als de shell verbonden is aan een tty, m.a.w. alleen als het een interactieve shell is die inderdaad dingen kan laten zien; geen probleem dus neem ik aan. Het stukje dat blaataaps quote waarschuwt er overigens voor dat de waarde van $COLUMNS veranderen kan tijdens het draaien van je script (als de shell in een window draait dat geresized wordt).NetForce1 schreef op 06 mei 2004 @ 23:20:
die had ik idd al wel gevonden, maar ik las ook ergens (geen flauw id meer waar) dat die niet altijd geset is, of is dat alleen bij uitzonderlijke gevallen?
De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"
Verwijderd
De truuk is bash een SIGWINCH te sturen zodat hij $COLUMNS en $LINES zetten moet:NetForce1 schreef op 07 mei 2004 @ 09:38:
Ik heb het ff geprobeerd, vanaf de commandline doetie het idd perfect, maar vanuit een script kan ik er niet bij komen. En als ik 'set' in een script zet, geeft ie ook veel minder variabelen terug dan wanneer ik set vanaf de commandline aanroep
1
2
| kill -WINCH $$ echo $COLUMNS x $LINES |
Een andere mogelijkheid is bash met -i op te starten:
1
2
| #!/bin/bash -i echo $COLUMNS x $LINES |
[ Voor 12% gewijzigd door Verwijderd op 07-05-2004 10:55 ]
1
| . ./script |
De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"
Verwijderd
De tweede oplossing zou ook moeten werken als je het script gewoon opstart.NetForce1 schreef op 07 mei 2004 @ 11:08:
Dat werkt idd, thanks! Maar dan moet het script wel gestart worden metcode:
1 . ./script
1
| bash: ./script: /bin/bash: bad interpreter: Permission Denied |
De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"
Verwijderd
Doe eens:NetForce1 schreef op 07 mei 2004 @ 11:26:
./script geeftcode:
1 bash: ./script: /bin/bash: bad interpreter: Permission Denied
1
| chmod u+x script |
Het script moet executable zijn, anders kun je het i.d.d. alleen maar sourcen (met . ./script)
Verwijderd schreef op 07 mei 2004 @ 11:31:
[...]
Doe eens:
code:
1 chmod u+x script
Het script moet executable zijn, anders kun je het i.d.d. alleen maar sourcen (met . ./script)
./script voert nu wel het script uit, maar geeft een lege string terug, terwijl . ./script de inhoud van $COLUMNS teruggeeft
De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"
Verwijderd
1
2
| #!/bin/bash -i echo $COLUMNS x $LINES |
En vervolgens executable maak:
1
| [mietje@loki prog]$ chmod u+x script.sh |
Dan kan ik hem gewoon uitvoeren en geeft hij output:
1
2
3
| [mietje@loki prog]$ ./script.sh 80 x 24 [mietje@loki prog]$ |
.edit: khad nog een knoppix-cd liggen, maar die weigert eveneens
[ Voor 19% gewijzigd door NetForce1 op 07-05-2004 12:36 ]
De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"
Verwijderd
Raar hoor, maar ik heb nog een andere mogelijke oplossingNetForce1 schreef op 07 mei 2004 @ 12:25:
Strange, dan ligt het blijkbaar aan mijn machientje. Ik heb nu geen andere linux-comp tot mn beschikking, maar ik zal het volgende week is proberen op de uni
Heb je tput geinstalleerd? Zo ja:
1
| tput cols |
De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"
Dat ging over ncurses.NetForce1 schreef op 06 mei 2004 @ 23:26:
Dat gaat niet, want de docent moet het ook kunnen draaien, en die word niet blij als ie voor iedereen dit soort dingen moet gaan installeren.
En dat gaat over tput, een onderdeel van ncursesNetForce1 schreef op 07 mei 2004 @ 12:43:
woei, die heb ik ja, zowel op knoppix als op me debian. Nu maar hopen dat me docent em ook heeft
Ergo: als je tput gebruikt, kan je net zo goed helemaal ncurses gaan gebruiken
Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.
okodysseus schreef op 07 mei 2004 @ 13:53:
[...]
Dat ging over ncurses.
[...]
En dat gaat over tput, een onderdeel van ncurses.
Ergo: als je tput gebruikt, kan je net zo goed helemaal ncurses gaan gebruiken.
[ Voor 3% gewijzigd door NetForce1 op 07-05-2004 14:28 ]
De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"
Verwijderd
Ik het het probleem met bash en $COLUMNS eens uitgezocht; het blijkt dat bash versie 1 .x de problemen oplevert, terwijl bash2 het (met wat tweaks) wel doet:NetForce1 schreef op 07 mei 2004 @ 14:21:
ok, om eerlijk te zijn heb ik speciaal voor deze opdracht linux op me servert geinstalleerd. Ik had al wat disto's liggen, maar nooit echt serieus in verdiept (SuSE, RH, knoppix). Ik heb echt halve nacht zitten info-en en mannen, en dan ben je best blij als het zomaar werkt
. Maar kzal ncurses nog maar es ff bekijken dan
1
2
3
4
| #!/bin/bash2 -i shopt -s checkwinsize kill -WINCH $$ echo $COLUMNS x $LINES |
[ Voor 8% gewijzigd door Verwijderd op 07-05-2004 14:45 ]
Verwijderd
Je kunt er alles over je console me instellen en uitlezen:
Je hoeft hier niets voor te zetten of resetten. Hoewel de "speed" natuurlijk nergens op slaatskipjack $ stty -a
speed 38400 baud; 51 rows; 80 columns;
lflags: icanon isig iexten echo echoe echok echoke -echonl echoctl
-echoprt -altwerase -noflsh -tostop -flusho pendin -nokerninfo
-extproc
iflags: -istrip icrnl -inlcr -igncr ixon -ixoff -ixany imaxbel -ignbrk
brkint -inpck ignpar -parmrk
oflags: opost onlcr -ocrnl -oxtabs -onocr -onlret
cflags: cread cs8 -parenb -parodd -hupcl -clocal -cstopb -crtscts
-dsrflow -dtrflow -mdmbuf
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = <undef>;
eol2 = <undef>; erase = ^?; erase2 = ^H; intr = ^C; kill = ^U;
lnext = ^V; min = 1; quit = ^\; reprint = ^R; start = ^Q;
status =this.href + ' label: ' +this.href + ' label: ' + ^T; stop = ^S; susp = ^Z; time = 0; werase = ^W;
skipjack $
Werkt nog steeds niet, ik heb btw bash 2.05. Ik ga denk dus toch maar voor die andere oplossing(en).Verwijderd schreef op 07 mei 2004 @ 14:37:
[...]
Ik het het probleem met bash en $COLUMNS eens uitgezocht; het blijkt dat bash versie 1 .x de problemen oplevert, terwijl bash2 het (met wat tweaks) wel doet:
code:
1 2 3 4 #!/bin/bash2 -i shopt -s checkwinsize kill -WINCH $$ echo $COLUMNS x $LINES
Kan ik er vanuit gaan dat ncurses altijd geinstalleerd is? Ik denk het wel, omdat het onderdeel is van System V. Of blaat ik nu heel erg onzin?
1
| tput cols |
1
| stty size | awk '{print $2}' |
De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"
Ncurses is geen onderdeel van System V, maar het heeft wel de prioriteit "Required" in Debian. Dat betekent dat je het op elk Debian-systeem mag verwachten en dat de kans groot is dat ook andere distributies het standaard installerenNetForce1 schreef op 07 mei 2004 @ 20:22:
Kan ik er vanuit gaan dat ncurses altijd geinstalleerd is? Ik denk het wel, omdat het onderdeel is van System V. Of blaat ik nu heel erg onzin?
Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.
Verwijderd
Dan zit ik liever beneden met mijn laptop op schoot en dan ben ik soms onder XP met cygwin naar zolder-linux of soms met een andere linux (X -query 192.168.bla.bla :1).
Terug op topic: is het mogelijk om de hoogte x breedte in pixels van je huidige Xsessie uit te vragen? Dan kan ik daar een forumule op los laten en dat in het Xnest opstartscript verwerken.
misschien is dit wat? http://www.xfree86.org/4.4.0/xrdb.1.htmlVerwijderd schreef op 08 mei 2004 @ 11:24:
Laatst Xnest gevonden en geinstalleerd. Leuk tooltje. Nu wil ik een opstartscripje maken om Xnest te starten binnen het huidige scherm. Dat scherm varieert, want soms werk ik 'native' op de computer. Da's nie fijn. Hij staat op zolder naast de kattebak en die oude S3 videokaart haalt er niet meer dan 800x600 uit.
Dan zit ik liever beneden met mijn laptop op schoot en dan ben ik soms onder XP met cygwin naar zolder-linux of soms met een andere linux (X -query 192.168.bla.bla :1).
Terug op topic: is het mogelijk om de hoogte x breedte in pixels van je huidige Xsessie uit te vragen? Dan kan ik daar een forumule op los laten en dat in het Xnest opstartscript verwerken.
[ Voor 85% gewijzigd door NetForce1 op 08-05-2004 11:43 ]
De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"
Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.
Verwijderd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| #!/bin/sh
# Obtain current session values
#
declare -i width=$(xdpyinfo | grep -i dimension | awk '{ print $2 }' | awk 'BEGIN { FS = "x" } {print $1}')
declare -i heigt=$(xdpyinfo | grep -i dimension | awk '{ print $2 }' | awk 'BEGIN { FS = "x" } {print $2}')
# Compute new values (more from height, need the room for taksbars and so on)
#
(( width += -32 ))
(( heigt += -96 ))
#
if [ -z ${1} ]
then
echo "Geen parameter? Doe het dan maar met jezelf!"
gastheer=localhost
else
gastheer=${1}
fi
#
for s in {10,11,12,13,14,15,16,17,18,19}
do
if [ ! -e /tmp/.X${s}-lock ]
then
/usr/X11R6/bin/Xnest -name ${gastheer}:${s} -query ${gastheer} -once -geometry ${width}x${heigt} :${s}
exit 0
fi
done
#
echo "meer dan 10 sessies? Dat meen je niet. Sterker nog, dat doe ik niet!"
exit 1
# |