|
| 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.
| |
|
|