/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
linux promt
Fra : kosta


Dato : 16-02-03 15:23

Hej ng!

   Jeg sidder og leger lidt med fjernstyring af xmms. Det jeg gerne vil er
at når man trykker på en knap som f.eks. 'n' (uden at trykke enter) så
vil min program udføre en eller anden handling og bogstavet 'n' vil
blive slettet fra skermen. Derefter skulle man kunne trykke på en anden
bogstav som f.eks. 'k', den nye bogstav skal så blive skrevet på samme
sted hvor 'n' blev skrevet og programmet skal udføre endnu en handling.
   Jeg har kikket lidt på ncurses og readline, men jeg kan ikke helt finde
den rette løsning. Jeg håber at der er en der forstår hvad jeg mener og
kan pege mig i den rigtige retning.

På forhånd tak.


 
 
Kent Friis (16-02-2003)
Kommentar
Fra : Kent Friis


Dato : 16-02-03 18:50

Den Sun, 16 Feb 2003 15:23:25 +0100 skrev kosta:
>Hej ng!
>
>   Jeg sidder og leger lidt med fjernstyring af xmms. Det jeg gerne vil er
>at når man trykker på en knap som f.eks. 'n' (uden at trykke enter) så
>vil min program udføre en eller anden handling og bogstavet 'n' vil
>blive slettet fra skermen. Derefter skulle man kunne trykke på en anden
>bogstav som f.eks. 'k', den nye bogstav skal så blive skrevet på samme
>sted hvor 'n' blev skrevet og programmet skal udføre endnu en handling.
>   Jeg har kikket lidt på ncurses og readline, men jeg kan ikke helt finde
>den rette løsning. Jeg håber at der er en der forstår hvad jeg mener og
>kan pege mig i den rigtige retning.

Med ncurses, skal du kalde cbread(); for at slippe for <enter>, og
noecho(); for at den ikke skriver bogstavet på skærmen. Begge dele
kaldes typisk lige efter initscr();

Mvh
Kent
--
Hvis man ikke kan lide klassisk musik, er det sandsynligvis fordi
lydkvaliteten er for dårlig. Klassisk musik kræver et godt anlæg.

kosta (17-02-2003)
Kommentar
Fra : kosta


Dato : 17-02-03 14:54

Kent Friis wrote:
> Den Sun, 16 Feb 2003 15:23:25 +0100 skrev kosta:
>
>>Hej ng!
>>
>>   Jeg sidder og leger lidt med fjernstyring af xmms. Det jeg gerne vil er
>>at når man trykker på en knap som f.eks. 'n' (uden at trykke enter) så
>>vil min program udføre en eller anden handling og bogstavet 'n' vil
>>blive slettet fra skermen. Derefter skulle man kunne trykke på en anden
>>bogstav som f.eks. 'k', den nye bogstav skal så blive skrevet på samme
>>sted hvor 'n' blev skrevet og programmet skal udføre endnu en handling.
>>   Jeg har kikket lidt på ncurses og readline, men jeg kan ikke helt finde
>>den rette løsning. Jeg håber at der er en der forstår hvad jeg mener og
>>kan pege mig i den rigtige retning.
>
>
> Med ncurses, skal du kalde cbread(); for at slippe for <enter>, og
> noecho(); for at den ikke skriver bogstavet på skærmen. Begge dele
> kaldes typisk lige efter initscr();
>
> Mvh
> Kent

   Tak for dit indslag men problemet med ncurses er at jeg bliver nødt til
at lave en vindue i konsollen og dermed bliver det som var skrevet i
konsollen før jeg startede programmet gemt indtil jeg afslutter
programmet, og det vil jeg helt ikke have.
   Jeg har ikke kunne finde ud af om man kun kan lave en vindue som
befinder sig neders i konsollen og fylder 1 linie og COLS coloner,
samtidig mens resten af konsollen er uberørt. Det er sikkert meget
muligt at man kan men jeg har endnu ikke stødt ind i noget der beskriver
hvordan det kan gøres.
   Med andre ord skal programmet have et interface der ligner noget fra
readline library, men opføre sig ligesom ncurses med cbreak() og
noecho(). Jeg ved ikke om du kender readline, hvis du ikke gør, så er
det et interface som kan læse fra STDIN. Det kan altså få ens program
til at opføre sig som en shell.


soren (17-02-2003)
Kommentar
Fra : soren


Dato : 17-02-03 16:16

kosta <kostabarkaia@softhome.net> writes:

[snip en masse]
>    Med andre ord skal programmet have et interface der ligner noget
> fra readline library, men opføre sig ligesom ncurses med cbreak() og
> noecho(). Jeg ved ikke om du kender readline, hvis du ikke gør, så er
> det et interface som kan læse fra STDIN. Det kan altså få ens program
> til at opføre sig som en shell.

du kan godt bruge readline til dette. et meget hurtigt eksempel:

-- blub.c --
#include <readline/readline.h>

int _i = 0;

int do_b(int count, int key) {
_i++;
// call real rl_insert
return rl_insert(count, key);
}

int main(int argc, char *argv[]) {
char *tmp;

rl_bind_key('b', do_b);

tmp = readline("skriv noget med 'b' i? ");

printf("tmp = %s, _i = %d\n", tmp, _i);
}
--

tjek readline's dokumentation for at finde praecist hvad du skal bruge .


mvh,

--

school.soren.davidsenATturtleDOTmathDOTklteDOThu//math-institute/uni-debrecen
other..sorenATtaneshaDOTnet//oesterbro/denmark/www.tanesha.net

Kent Friis (17-02-2003)
Kommentar
Fra : Kent Friis


Dato : 17-02-03 18:56

Den Mon, 17 Feb 2003 14:54:05 +0100 skrev kosta:
>Kent Friis wrote:
>> Den Sun, 16 Feb 2003 15:23:25 +0100 skrev kosta:
>>
>>>Hej ng!
>>>
>>>   Jeg sidder og leger lidt med fjernstyring af xmms. Det jeg gerne vil er
>>>at når man trykker på en knap som f.eks. 'n' (uden at trykke enter) så
>>>vil min program udføre en eller anden handling og bogstavet 'n' vil
>>>blive slettet fra skermen. Derefter skulle man kunne trykke på en anden
>>>bogstav som f.eks. 'k', den nye bogstav skal så blive skrevet på samme
>>>sted hvor 'n' blev skrevet og programmet skal udføre endnu en handling.
>>>   Jeg har kikket lidt på ncurses og readline, men jeg kan ikke helt finde
>>>den rette løsning. Jeg håber at der er en der forstår hvad jeg mener og
>>>kan pege mig i den rigtige retning.
>>
>>
>> Med ncurses, skal du kalde cbread(); for at slippe for <enter>, og
>> noecho(); for at den ikke skriver bogstavet på skærmen. Begge dele
>> kaldes typisk lige efter initscr();
>>
>> Mvh
>> Kent
>
>   Tak for dit indslag men problemet med ncurses er at jeg bliver nødt til
>at lave en vindue i konsollen og dermed bliver det som var skrevet i
>konsollen før jeg startede programmet gemt indtil jeg afslutter
>programmet, og det vil jeg helt ikke have.

Ok

>   Med andre ord skal programmet have et interface der ligner noget fra
>readline library, men opføre sig ligesom ncurses med cbreak() og
>noecho(). Jeg ved ikke om du kender readline, hvis du ikke gør, så er
>det et interface som kan læse fra STDIN. Det kan altså få ens program
>til at opføre sig som en shell.

Er der noget specielt fra readline du er ude efter? Eller er det bare
en simpel indtastning?

(readline går primært ud på at man kan redigere i det man skriver, og
lave history, så man fx. med pil-op kan bladre tilbage til det man
skrev sidst).

Hvis det bare er en simpel indtastning, kan du køre det med stdio's
getchar, eller tilsvarende cin i c++. Du skal bare bruge noget i
retning af (utestet):

struct termios old, new;

tcgetattr(0, & old); /* gem gamle indstillinger */
tcgetattr(0, & new); /* hent nuværende indstillinger til at ændre i */
cfmakeraw(& new); /* raw-mode = ikke vente på ENTER */
new->c_lflag &= ~ECHO /* ikke ud på skærmen */
tcsetattr(0, TCSAFLUSH, & new);
/* ... dit program her ... */
tcsetattr(0, & old);

Mvh
Kent
--
Those who write "Optimized for Netscape" og "Best viewed with MSIE"
never figured out the difference between the WWW and a
Word Perfect 4.2 Document.

kosta (17-02-2003)
Kommentar
Fra : kosta


Dato : 17-02-03 21:15

Mange tak for jeres indlæg og den store hjælp som i gav mig
   Jeg fik programmet til at fungere efter hensigten ved hjælp af Kent
Friises anden indlæg.


Søg
Reklame
Statistik
Spørgsmål : 177491
Tips : 31966
Nyheder : 719565
Indlæg : 6408458
Brugere : 218886

Månedens bedste
Årets bedste
Sidste års bedste