Gli utenti di Linux: note sul desktop


Le note qui descritte, WNotas sono utili per i tempi che si desidera un notebook seduto tranquillamente in un angolo del desktop X Window System. Un wNOTE è fondamentalmente una semplice finestra che consente di scrivere, l'importazione, l'esportazione, tagliare e incollare bit utili di testo da e verso altri WNotas e programmi.

Ogni wNOTE è completamente autonomo. Installazione e utilizzo WNotas richiede l'installazione di programmi che utilizzano le librerie Xlib e libXpm, si può già avere perché i programmi di grafica che utilizzano la maggior parte. WNotas Una volta installato, gestito dalla shell come finestre normali.




A differenza dei programmi di GNOME conosciuti come post-it o Stickies di Apple, non WNotas utilizzare un database dedicato per la memorizzazione di note. Invece, utilizzare le opzioni WNotas linea di comando, selezionare X e file regolari per qualsiasi nota di testo per mantenere.

WNotas sono progettati per essere semplici e flessibili. Sono compatibili con la finestra di gestione desktop GNOME Nautilus, e offrono opzioni che permettono loro di coesistere con qualsiasi programma di desktop per Linux.

WNotas per installare, copiare i due file di origine di sotto, "main.cpp" e "notewindow.cpp," in un editor di testo, e poi costruiscono con il seguente comando.

$ G ++ main.cpp -o notewindow.cpp wNOTE -lXpm -lX11

Supponendo di aver installato il file per le librerie del sistema X Window, che è tutto per esso include. Quindi copiare il file eseguibile "wNOTE" un posto utile, come "/ usr/local/bin," se si dispone dei privilegi di superutente.

Scrivendo "-h wNOTE," Stampa di un elenco di opzioni sulla riga di comando. È possibile selezionare il tipo di carattere, la posizione iniziale della nota e le dimensioni, se si è al di sopra o al di sotto altre finestre, i colori delle note, un file di output per salvare il testo, e la capacità di scrivere configurazione nota come comando di shell.

Facendo clic sulla casella di chiusura nella parte superiore sinistra della nota chiude la nota e le uscite. Cliccando sulla barra lungo il bordo superiore si muove la nota e fare clic sulla scheda in basso a sinistra del ridimensionamento della nota.

Fare doppio clic su una nota fa rimanere in cima ad altre finestre. Di nuovo doppio clic per mettere la nota che segue altre finestre, almeno window manager con un modello di finestra di sfondo. Perché non tutti i window manager fanno questo, in particolare window manager che utilizzano le icone del desktop, la "-a" e "z", le opzioni della riga di comando consentono di mantenere le note visibili sul desktop, senza preoccuparsi troppo di un programma di configurazione del desktop specifico.

Per tagliare e incollare il testo utilizzando la selezione X, fate clic sul testo della nota e spostare il cursore alla fine del testo che si desidera selezionare. Poi vai alla finestra che si desidera incollare il testo e fare clic sul pulsante centrale del mouse o ai lati pulsanti sinistro e destro, se si dispone di un mouse a due pulsanti. Per incollare il testo in una nota, evidenziare il testo nella finestra in cui la vostra posizione, spostare il mouse sopra la finestra della nota, e, ancora una volta, fare clic sul pulsante centrale del mouse. Per farla semplice WNotas programma utilizzano la selezione piuttosto che note, quando il testo viene copiato in "Control-C" e colpito con "Ctrl-V", perché la maggior parte dei programmi di sostegno X tagliare e incollare utilizzando la selezione .

Anche in questo caso, le note non utilizzare un database per memorizzare le informazioni. Essi sono progettati per essere semplici e flessibili, in modo da utilizzare solo il testo scritto sulla nota stessa o forniti sulla riga di comando con l'opzione "-t". Quando si chiude una nota, il testo è stampato su schermo in modo da poter reindirizzare a un file. L'opzione "-o" ha lo stesso effetto. Pertanto, al fine di salvare il testo di una nota, è possibile utilizzare uno dei seguenti comandi.

$ WNOTE> this_note.txt -o $ wNOTE this_note.txt

Quando si apre una nota, è possibile inserire il testo con l'opzione "-t".

$ WNOTE -t "Questo è il testo della nota."

Ricorda che si dovrebbe scrivere il testo tra virgolette se contiene spazi o ritorni a capo.

Insieme, il "-t", "-o" e le opzioni "-c" consentono di utilizzare i comandi di shell per salvare nota di testo, e "uscite opzione -c", non solo il testo della nota ma anche il comando e le opzioni per riaprire la nota con lo stesso testo, il colore, e la posizione del guscio. Ad esempio, per prendere nota persistente è possibile utilizzare diversi comandi come questi.

Blu -a $ wNOTE -bg -g 200x200 + 10 + 10 -c> note.out Sh $ -c "note.out`` gatto '

Il testo della riga di comando per aprire la nota è ancora in "note.out" dopo aver lasciato la nota. Quando riapre, è necessario utilizzare sia le virgolette doppie e backticks per espandere il testo integrale del provvedimento e le opzioni della nota precedente.

Insieme, queste opzioni permettono molti usi possibili, mantenendo i WNotas più semplice possibile programma. WNotas non sono mini processore, comunque, in tutti i casi, dal momento che in questa versione che forniscono funzionalità per la modifica del testo unico di base, ma il programma offre molte possibilità di espansione, come la scoperta di nuovi usi per esso.


Scarica WNotas

  • Clicca qui per scaricare le ultime WNotas aggiornamento.

main.cpp

/ * Questo file è parte di WNotas. Questo programma è software libero; si può ridistribuire e/o modificarlo secondo i termini della GNU General Public License come pubblicato dalla Free Software Foundation; o la versione 2 della licenza, o (a propria scelta) una versione successiva. Questo programma è distribuito nella speranza che sarà essere utile, ma SENZA ALCUNA GARANZIA; anche senza la garanzia implicita di COMMERCIABILITÀ o IDONEITÀ PER UN PARTICOLARE SCOPO. Vedere la GNU General Public License per maggiori dettagli. Dovreste aver ricevuto una copia della GNU General Public License insieme a questo programma; anzi, il, 59 Tempio Free Software Foundation, Inc. Place, Suite 330, Boston, MA 02111-1307 USA * / #include #include #include #include #include #include #include using namespace std; // Gettato se l'utente preme Ctrl-C. #define SIGINT 2 Aiuto vuoto (void); parse_args int (int, char **); App_exit Empty (int); BG_Color char statico [255] = ""; fg_color char statico [255] = ""; wd_color char statico [255] = ""; geometria char statico [255] = ""; carattere statico char [255] = ""; WRITE_CMD static Bool = False; static char n [FILENAME_MAX] = ""; carbone testo statico [8192] = ""; APP_NAME char statico [255]; Display * d; Root Window; typedef enum { stay_default, stay_on_top, stay_on_bottom FloatState}; Float_opt FloatState; initialize_notewindows vuoto extern (* Visualizza finestra); delete_note vuoto extern (void); remove_note vuoto extern (void); note_event_loop void (void); extern char * note_text (void); extern char * note_output (void); Handle_ctrl_c Empty (int segno) {app_exit (0); } int main (int argc, char ** argv) { if ((d = XOpenDisplay (getenv ("DISPLAY"))) == NULL) { cout << argv [0] << "L'esposizione potrebbe non essere aperto." << Endl; exit (1); } Radice RootWindow = (d, DefaultScreen (d)); float_opt = stay_default; parse_args (argc, argv); Signal (SIGINT, handle_ctrl_c); Signal (SIGTERM, handle_ctrl_c); initialize_notewindows (d, radice); note_event_loop (); app_exit (0); return 0; } char * fg_color_opt (void) {Return * fg_color? fg_color: NULL;} char * bg_color_opt (void) {Return * BG_Color? BG_Color: NULL;} char * wd_color_opt (void) {Return * wd_color? wd_color: NULL;} char * fn_opt (void) Ritorno * {font? fonte: NULL;} char * geometry_opt (void) {Geometry Return *? Geometria: NULL;} char * text_opt (void) {Return * testo? Testo: NULL; } FloatState stay_opt (void) Float_opt Torna {;} Bool Write_cmd_opt (void) WRITE_CMD Torna {;} char * get_app_name (void) {Indietro APP_NAME; } char * get_ofn (void) {Return * ofn? ofn: NULL; } #define ARGCHECK ((i notewindow.cpp #include #include #include #include #include #include #include #include using namespace std; Profundidad #define (d) \ DefaultDepth (d, DefaultScreen (d)) #define DEFAULT_BG "giallo" DEFAULT_FG #define "nero" DEFAULT_BOX #define "Darkslategray" #define DEFAULT_FONT \ "- * - Helvetica-medio-r - * - * - 12 - * - * - * - * - * - * - *" #define riempimento 1 #define BOX_SIDE 5 MAXTEXT #define 8192 #define POINT_WIDTH 2 // End of the Line di Linux è un singolo carattere. #define LINE_END '\ x0d' // Definizioni per decorazioni delle finestre. #define N_RESIZE_POINTS 11 resize_tab static XPoint [N_RESIZE_POINTS] = { {-10, 0}, {-9, -1}, {-8, -2}, {-7, -3}, {-6, -4}, {-5, -5}, {-4, -6}, {-3, -7}, {-2, -8}, {-1, -9}, {0, -10}}; confezione antistatica XRectangle [1] = {{Fill, Fill, BOX_SIDE, BOX_SIDE}}; Linee statiche XSegment [2] = { {Fill, Fill, Fill + BOX_SIDE, RIEMPIMENTO BOX_SIDE +}, {Fill, Fill + BOX_SIDE, IMBOTTITURA + BOX_SIDE, FILLER}}; #define move_mask_width 6 #define move_mask_height 6 statici move_mask_bits unsigned char [] = { 0x2a, 0x15, 0x2A, 0x15, 0x2A, 0x15}; // Come facciamo a sapere se siamo inchiodati o // In altre finestre. typedef enum { stay_default, stay_on_top, stay_on_bottom FloatState}; // Funzioni C sono convenienti per le chiamate // Altri file e per l'utilizzo nei costruttori. App_exit Empty (int); char * fg_color_opt (void); char * bg_color_opt (void); char * wd_color_opt (void); char * geometry_opt (void); char * fn_opt (void); char * text_opt (void); FloatState stay_opt (void); Bool Write_cmd_opt (void); char * get_app_name (void); char * get_ofn (void); color_to_pix lungo unsigned (Display *, char *); shifted_keysym int (int); note_form vuoto (* Mostra, punto mappa, vista mappa, GC, unsigned long, unsigned long, unsigned long, XRectangle * * XRectangle, int, int); Gnome_ws Window (Schermata * Finestra int *); // Un CharBox contiene un carattere digitato e // La dimensione del carattere e lo schermo coordinate. Class CharBox { pubblico: CharBox (int, int, int, int, int, int); Add_to_list Empty (CharBox *, CharBox *); Insert_after Empty (CharBox *, CharBox *); get_x int (void) {return x;} get_y int (void) {return y;} get_insert_x int (void) {return insert_x;} get_insert_y int (void) {return insert_y;} get_width int (void) {width return;} get_height int (void) {height return;} get_keysym int (void) {return keysym;} vuoto set_x (int x_point) {x = x_point; } Set_y Empty (y_point int, int Pascent) {Y = y_point - Pascent; } Set_insert_x Empty (int x_point) = {x_point insert_x;} Set_insert_y Empty (int y_point) = {y_point insert_y;} CharBox Get_Next * (void) {return questo;} CharBox get_prev * (void) {return prev;} Remove_from_list CharBox * (CharBox *); Privato: int keysym, x, y, larghezza, altezza, insert_x, insert_y; CharBox * successiva * precedente; }; CharBox :: CharBox (pkeysym int, int x_point, y_point int, int pwidth, Pascent int, int pdescent) { keysym = pkeysym; x = x_point; y = y_point - Pascent; width = pwidth; height = + pdescent Pascent; insert_x = x_point; insert_y = y_point; next = prev = NULL; } CharBox vuoto :: add_to_list (CharBox * list_end, CharBox C *) { list_end -> next = c; c -> prev = list_end; list_end = c; } CharBox vuoto :: insert_after (CharBox * insert_point, CharBox C *) { if (insert_point -> next) { insert_point -> next -> prev = c; c -> next = insert_point -> next; } c -> prev = insert_point; insert_point -> next = c; } CharBox * CharBox :: remove_from_list (CharBox * t) { if (t -> prev) t -> prev -> next = t -> next; if (t -> next) t -> next -> prev = t -> prev; ritorno t; } NoteWindow class { pubblico: NoteWindow (Display *, finestra); NoteWindow ~ (void); event_loop void (void); Bool Point_is_in_note (int, int, bool); Bool Point_is_in_closebox (int, int, bool); Bool Point_is_in_movebar (int, int, bool); Bool Point_is_in_resizetab (int, int, bool); char * dump_text (void); char * dump_command (void); char * dump_selection (void); draw_point_cursor void (void); erase_point_cursor void (void); vuoto reflow_text (void); redraw_reflow void (void); pulizia (void) sotto vuoto; Display * (void) {return d;} CharBox find_point_char * (int, int); Import_text Empty (char *); selection_text_color void (void); normal_text_color void (void); Send_selection Empty (Xevent); insert_selection void (void); annullare meno (void); Privato: Display * d; Finestra Root, note_win; Note_fg mappa vista, move_mask; Win_gc GC, fg_gc; Xevent e_send; fg_pixel unsigned long, bg_pixel, box_pixel; F Fonte; XFontStruct * font_struct; int x, y, larghezza, altezza; Movebar XRectangle, CloseBox; int insert_x, insert_y, line_height, line_space; CharBox * textbuf, * Text_end, * punto, * S_select, * E_select; int point_height; Marcos cursore freccia; Vivere FloatState; int have_gnome_ws; Finestra Desktop_win; }; NoteWindow * n; NoteWindow :: NoteWindow (Display * d_arg, Finestra Root_arg) { XGCValues ​​GCV; XSetWindowAttributes set_attrs; char colori * * geometria, * Fonte; d = d_arg; root = root_arg; x = y = width = height = 100; rimangono stay_opt = (); punto text_end textbuf = = = NULL; s_select e_select = = NULL; if ((geometria = geometry_opt ())! = null) { XParseGeometry (Geometria, ed x, y, e, (Unsigned int *) e la larghezza, (Unsigned int *) e altezza); } desktop_win = gnome_ws (D, radice, e have_gnome_ws); if ((colore wd_color_opt = ())! = NULL) box_pixel color_to_pix = (d, colore); altro box_pixel color_to_pix = (d, DEFAULT_BOX); if ((colore bg_color_opt = ())! = NULL) bg_pixel color_to_pix = (d, colore); altro bg_pixel color_to_pix = (d, DEFAULT_BG); if ((colore fg_color_opt = ())! = NULL) fg_pixel color_to_pix = (d, colore); altro fg_pixel color_to_pix = (d, DEFAULT_FG); set_attrs.override_redirect = True; set_attrs.background_pixel = bg_pixel; note_win = XCreateWindow (D, radice, x, y, larghezza, altezza, 0, profondità (D), CopyFromParent, CopyFromParent, CWOverrideRedirect | CWBackPixel, e Set_attrs); note_fg = XCreatePixmap (d, note_win, larghezza, altezza, profondità (d)); if ((move_mask = XCreatePixmapFromBitmapData (D, radice, (char *) move_mask_bits, move_mask_width, move_mask_height, box_pixel, bg_pixel, 1)) == 0) cout max_bounds.descent; insert_x = 0; insert_y = movebar.height + line_height; e_send.type = Esporre; e_send.xexpose.send_event = True; e_send.xexpose.window = note_win; point_height = (Int) font_struct -> max_bounds.ascent * 0.8; } NoteWindow :: ~ NoteWindow (void) {} NoteWindow vuoto :: cleanup (void) { CharBox * c * t; if ((c = textbuf)! = NULL) do { t = c-> Get_Next (); c Rimuovere; c = t; } Mentre (c); XUnloadFont (d, f); XFreeGC (d, win_gc); XFreeGC (d, fg_gc); XFreePixmap (d, note_fg); XFreePixmap (d, move_mask); XDestroyWindow (d, note_win); } NoteWindow Bool :: point_is_in_note (int px, py int, Win_rel bool) { if (win_rel!) { if ((px> = x && py> = y) && (Px <= (x + larghezza) && py = 0 && p> = 0) && (Px <= larghezza && p <= altezza)) return true; altro return false; } } NoteWindow Bool :: point_is_in_resizetab (Int px, py Int, Bool win_rel) { int i; if (win_rel!) { for (i = 0; i = (y + closebox.y)) && (Px <= (x + + closebox.x closebox.width) && closebox.x && py = py> = closebox.y) && (Px <= (+ closebox.x closebox.width) && p = (x + movebar.x) && py> = (y + movebar.y)) && (Px <= (x + + movebar.x movebar.width) && movebar.x && py = py> = movebar.y) && (Px <= (+ movebar.x movebar.width) && Get_Next py ()) { if ((c == insert_x -> get_insert_x ()) && (C == Insert_y -> get_insert_y ())) in_selection = True; if (c == e_select) break; } if (in_selection) n -> selection_text_color (); altro XSetForeground (d, fg_gc, box_pixel); } Else { XSetForeground (d, fg_gc, box_pixel); } XFillRectangle (d, note_fg, fg_gc, insert_x? insert_x: 1 insert_y - point_height, POINT_WIDTH, point_height); XSendEvent (d, note_win, Finto, ExposureMask e e_send); } :: Erase_point_cursor NoteWindow vuoto (void) { XGCValues ​​GCV; gcv.foreground = bg_pixel; XChangeGC (d, fg_gc, GCForeground e GCV); XFillRectangle (d, note_fg, fg_gc, insert_x? insert_x: 1 insert_y - point_height, POINT_WIDTH, point_height); gcv.foreground = fg_pixel; XChangeGC (d, fg_gc, GCForeground e GCV); XSendEvent (d, note_win, Finto, ExposureMask e e_send); } :: Reflow_text NoteWindow vuoto (void) { CharBox * t; int keysym; insert_x = 0; insert_y = movebar.height + line_height; for (t = textbuf; t; t = t -> Get_Next ()) { keysym = t -> get_keysym (); t -> set_insert_x (insert_x); t -> set_insert_y (insert_y); t -> set_x (insert_x); t -> set_y (Insert_y, ((Keysym == LINE_END) 0?: font_struct-> per_char [keysym] .ascent)); if ((+ insert_x font_struct-> per_char [keysym] .width > Width) || (Keysym == LINE_END)) { insert_x = 0; insert_y + = + line_height line_space; } if ((t == s_select) && e_select) n -> selection_text_color (); if (t == e_select) n -> normal_text_color (); if (keysym! = LINE_END) { XDrawString (d, note_fg, fg_gc, insert_x, insert_y, (Const char *) e keysym, 1); insert_x + = t -> get_width (); } } if (voce && (articolo! = text_end)) { insert_x = punto -> get_insert_x () + Point -> get_width (); insert_y = punto -> get_insert_y (); } } :: Redraw_reflow NoteWindow vuoto (void) { XFreePixmap (d, note_fg); note_fg = XCreatePixmap (d, note_win, larghezza, altezza, profondità (d)); note_form (d, note_fg, move_mask, fg_gc, fg_pixel, bg_pixel, box_pixel, E Movebar e CloseBox, larghezza, altezza); questo -> reflow_text (); } char * NoteWindow :: dump_text (void) { CharBox * t; int i; char buf static [MAXTEXT] = ""; for (t = textbuf, i = 0; il Get_Next (), i ++) { if (t!) rompere; buf [i] = t -> get_keysym (); if (buf [i] == LINE_END) sprintf (e buf [i], "\ n"); buf [i + 1] = '\ 0'; } ritorno * buf? buf: NULL; } char * NoteWindow :: dump_command (void) { char buf static [0xffff] cbuf [0xFF], * c; XWindowAttributes w; XGetWindowAttributes (d, note_win, & w); sprintf (buf, "% s -c -g% dx% d + +% d% d", get_app_name () w.width, w.height, w.x, w.y); se (== rimanere stay_on_top) strcat (buf, "-a"); se (== rimanere stay_on_bottom) strcat (buf, "z"); if ((c = bg_color_opt ())! = null) { sprintf (cbuf "-BG% s", c); strcat (buf, cbuf); } if ((c = fg_color_opt ())! = null) { sprintf (cbuf "-fg% s", c); strcat (buf, cbuf); } if ((c = wd_color_opt ())! = null) { sprintf (cbuf "-wd% s", c); strcat (buf, cbuf); } if ((c = get_ofn ())! = null) { sprintf (cbuf "-o% s", c); strcat (buf, cbuf); } if ((c = n -> dump_text ()) = NULL) { strcat (buf, "-t "); strcat (buf, c); strcat (buf, ""); } ritorno buf; } char * NoteWindow :: dump_selection (void) { CharBox * t; int i; static char buf [MAXTEXT]; if (s_select && e_select) { for (t = s_select, i = 0; il Get_Next (), i ++) { buf [i] = t -> get_keysym (); if (buf [i] == LINE_END) sprintf (e buf [i], "\ n"); buf [i + 1] = '\ 0'; if (t == e_select) break; } } Else { * Buf = '\ 0'; } ritorno buf; } * :: Find_point_char CharBox NoteWindow (px int, int p) { CharBox * c *, c_prev; if (textbuf) { per (c = textbuf; c = c -> Get_Next ()) { if ((px> = c -> get_x () && py> = c -> get_y ()) && (Px get_x () + c -> get_width ()) && get_y p () + c -> get_height ()))) ritorno c; if (c == text_end) break; } // Se il cursore si trova oltre l'ultimo visibile // De caratteri su una linea. per (c = textbuf; c = c -> Get_Next ()) { if (c -> Get_Next () && (C -> Get_insert_y (=) c -> Get_Next () -> get_insert_y ())) { if ((px> = (c -> get_x () + c -> get_width ())) && (Py> = (c -> get_y () - line_space) && get_y p () + line_height))) { if (c -> get_keysym () == LINE_END) c ri -> get_prev (); altro ritorno c; } } if (c == text_end) break; } } ritorno NULL; } NoteWindow vuoto :: import_text (char * text) { int i; CharBox * c; = New textbuf CharBox (Testo [0], insert_x, insert_y, font_struct-> per_char [Testo [0]]. larghezza, font_struct-> per_char [Testo [0]]. promozione, font_struct-> per_char [Testo [0]] discesa).; text_end = textbuf; for (i = 1; text [i]; i ++) { c = new CharBox (Testo [i], insert_x, insert_y, font_struct-> per_char [Testo [i]]. larghezza, font_struct-> per_char [Testo [i]]. promozione, font_struct-> per_char [Testo [i]] discesa).; textbuf -> add_to_list (text_end, c); text_end = c; } punto = text_end; n -> redraw_reflow (); } :: Selection_text_color NoteWindow vuoto (void) { XSetForeground (D, fg_gc, (Fg_pixel == WhitePixel (D, DefaultScreen (d))? BlackPixel (D, DefaultScreen (d)): WhitePixel (D, DefaultScreen (d)))); } :: Normal_text_color NoteWindow vuoto (void) { XSetForeground (d, fg_gc, fg_pixel); } NoteWindow vuoto :: send_selection (Xevent e) { Xevent esso; colloqui buf [MAXTEXT]; strcpy (buf, n -> dump_selection ()); XChangeProperty (D, e.xselectionrequest.requestor, e.xselectionrequest.property, XA_STRING, 8, PropModeReplace, (Unsigned char *) buf, strlen (buf)); ne.xselection.property = e.xselectionrequest.property; ne.xselection.type = SelectionNotify; ne.xselection.display = e.xselectionrequest.display; ne.xselection.requestor = e.xselectionrequest.requestor; ne.xselection.selection = e.xselectionrequest.selection; ne.xselection.target = e.xselectionrequest.target; ne.xselection.time = e.xselectionrequest.time; XSendEvent (d, e.xselectionrequest.requestor, 0, 0 e I); XFlush (d); } :: Insert_selection NoteWindow vuoto (void) { Finestra proprietario; int risultato, fmt_return, i; nitems unsigned long, bytes_left, manichino; unsigned dati char *; Type_return Atom; CharBox inserto *, * c; if ((owner = XGetSelectionOwner (d, XA_PRIMARY)) ! = None) { XConvertSelection (d, XA_PRIMARY, XA_STRING, None, proprietario CurrentTime); XFlush (d); XGetWindowProperty (D, proprietario XA_STRING, 0, 0, False, AnyPropertyType e type_return, E Fmt_return e nitems e bytes_left, E i dati); if (bytes_left) { if (! XGetWindowProperty (D, proprietario XA_STRING, 0, bytes_left, 0, AnyPropertyType, E Type_return e fmt_return, e nitems e fittizi, e dati)) { inserire = punto? Articolo: text_end; for (i = 0; i dati per_char [[i]] ampie. font_struct-> per_char [dati [i]]. promozione, font_struct-> per_char [data [i]] discesa).; if (! inserto) { textbuf text_end = = c; } Else { if (inserto == text_end) { textbuf -> add_to_list (text_end, c); } Else { textbuf -> insert_after (insert, c); } } inserire = c; } n -> redraw_reflow (); n -> draw_point_cursor (); } } } } // Utilizzato con window manager Nautilus finora. Gnome_ws Window (Display * d, finestra radice, int * have_gnome_ws) { Atom NAUTILUS_DESKTOP_WINDOW_ID, actual_type; * Finestra w = (Finestra *) 0; int actual_format; nitems unsigned long, bytesafter; NAUTILUS_DESKTOP_WINDOW_ID = XInternAtom (D, "NAUTILUS_DESKTOP_WINDOW_ID", false); if ((XGetWindowProperty (D, radice, NAUTILUS_DESKTOP_WINDOW_ID, 0, 1, False, XA_WINDOW e actual_type, E Actual_format e nitems e bytesafter, (Unsigned char **) & w) == Success) && w) { * Have_gnome_ws = True; ritorno * w; } Else { * Have_gnome_ws = False; ritorno (finestra) 0; } } NoteWindow vuoto :: inferiore (void) { se (have_gnome_ws) { // Questo è un modo semplice per // La nota su una scrivania // Sappiamo Jobs // Il Nautilus .... // La tabella solo al momento. Stack Finestra [2]; impilare [0] = note_win; batteria [1] = gnome_ws (d, radice, e have_gnome_ws); XRestackWindows (d, batteria, 2); } Else { XLowerWindow (d, note_win); } } :: Event_loop NoteWindow vuoto (void) { Finestra r, c; int px, py, PWX, Pwy; int grab_result; int keysym, c_wd, c_asc, C_DES; int unsigned maschera; Char * testo; Xevent e warp_start, prev_click; Deformazioni Bool = false; Bool resize = False; ButtonDown Bool = false; Cambiare Bool = False; if ((testo = text_opt ())! = NULL) n -> import_text (testo); XSelectInput (d, note_win, ExposureMask | \ ButtonPressMask | \ ButtonReleaseMask | \ PointerMotionMask | \ EnterWindowMask | \ LeaveWindowMask | \ KeyPressMask | \ KeyReleaseMask | \ EnterWindowMask | \ LeaveWindowMask | \ FocusChangeMask); XMapWindow (d, note_win); n -> draw_point_cursor (); while (1) { XQueryPointer (d, radice, e R, ecc, E px e py, e PWX e Pwy e maschera); if ((c == note_win) && n -> point_is_in_note (px, py, False)) else { XDefineCursor (d, note_win freccia); } if (XPending (d)) { XNextEvent (d, e); interruttore (e.type) { Se ButtonPress: se (== e.xbutton.window note_win) { if ((prev_click.xbutton.x == e.xbutton.x) && (Prev_click.xbutton.y == e.xbutton.y) && (E.xbutton.time - prev_click.xbutton.time giù (); break; Se stay_on_bottom: Se stay_default: XRaiseWindow (d, note_win); = Soggiorno stay_on_top; break; } } Else { se (== e.xbutton.button Button2) { n -> insert_selection (); } Else { if (point_is_in_closebox (E.xbutton.x, e.xbutton.y, True)) { app_exit (0); } Else { if (point_is_in_movebar (E.xbutton.x, e.xbutton.y, True)) { Deformazioni = true; warp_start = e; } Else { Deformazioni = False; if (point_is_in_resizetab (E.xbutton.x, e.xbutton.y, True)) { ridimensionare = True; } Else { ridimensionare = False; if ((punto n = -> find_point_char (E.xbutton.x, e.xbutton.y)) == NULL) { punto = text_end; } n -> redraw_reflow (); n -> draw_point_cursor (); buttonDown = True; prev_click = e; s_select = find_point_char (e.xbutton.x, e.xbutton.y); e_select = NULL; } } } } } prev_click = e; } break; Se ButtonRelease: if (orditura || ridimensionamento) { while (XCheckTypedWindowEvent (D, note_win, MotionNotify, ed e)) ; if (orditura) deformazione = False; if (downsizing) scale = False; } if (buttonDown) buttonDown = False; break; Se MotionNotify: while (XCheckTypedWindowEvent (D, note_win, MotionNotify, ed e)) ; if (orditura) { se (== e.xmotion.window note_win) { x + = (e.xmotion.x_root - warp_start.xmotion.x_root); e + = (e.xmotion.y_root - warp_start.xmotion.y_root); XMoveWindow (d, note_win, x, y); warp_start.xmotion.x_root = e.xmotion.x_root; warp_start.xmotion.y_root = e.xmotion.y_root; } } if (ridimensionamento) { se (== e.xmotion.window note_win) { width = e.xmotion.x; height = e.xmotion.y; XResizeWindow (d, note_win, larghezza, altezza); n -> redraw_reflow (); n -> draw_point_cursor (); } } if (buttonDown && == E.xmotion.window note_win) { if (s_select) { CharBox * new_e_select; if (((= new_e_select find_point_char (E.xmotion.x, e.xmotion.y)) ! = NULL) || ((= New_e_select find_point_char (E.xmotion.x, e.xmotion.y + (Int) line_height/2)) ! = NULL) || ((= New_e_select find_point_char (e.xmotion.x, e.xmotion.y + line_height)) ! = NULL)) { e_select = new_e_select; CharBox * c; n -> erase_point_cursor (); n -> selection_text_color (); per (c = s_select ;; c = c -> Get_Next ()) { keysym int = c -> get_keysym (); XDrawString (D, note_fg, fg_gc, c -> get_insert_x (), c -> get_insert_y (), (Const char *) e keysym, 1); if (c == e_select) break; } n -> normal_text_color (); } } XSetSelectionOwner (D, XA_PRIMARY, note_win, OraCorrente); XFlush (d); XSendEvent (d, note_win, Finto, ExposureMask e e_send); } break; KeyPress: s_select e_select = = NULL; interruttore (keysym = XKeycodeToKeysym (D, e.xkey.keycode, 0)) { Se XK_Shift_L: Se XK_Shift_R: mossa = True; break; Se XK_BackSpace: if (textbuf) { CharBox * t; n -> erase_point_cursor (); if ((t = punto a puntosmile text_end) ! = Null) { punto = punto -> get_prev ()? Point -> get_prev (): textbuf; if (t == text_end) text_end = text_end -> get_prev (); textbuf -> remove_from_list (t); if (t == textbuf) punto text_end textbuf = = = NULL; n -> redraw_reflow (); n -> draw_point_cursor (); eliminare t; } } break; Se XK_Return: n -> erase_point_cursor (); if (NULL == textbuf) { cout redraw_reflow (); } Else { textbuf -> add_to_list (text_end, c); text_end = c; } } insert_x = 0; insert_y + = + line_height line_space; n -> draw_point_cursor (); break; predefinito: n -> erase_point_cursor (); if (keysym max_char_or_byte2) { if (cambiamento) keysym = shifted_keysym (keysym); c_wd = font_struct -> Per_char [keysym] .width; c_asc = font_struct -> Per_char [keysym] .ascent; C_DES = font_struct -> Per_char [keysym] .descent; if (NULL == textbuf) { textbuf = nuovo CharBox (Keysym, insert_x, insert_y, c_wd, c_asc, C_DES); nota = = text_end textbuf; XDrawString (d, note_fg, fg_gc, insert_x, insert_y, (Const char *) e keysym, 1); XSendEvent (d, note_win, Finto, ExposureMask e e_send); insert_x + = c_wd; n -> draw_point_cursor (); } Else { CharBox * c = new CharBox (Keysym, insert_x, insert_y, c_wd, c_asc, C_DES); if (insert_x + c_wd> larghezza) { insert_x = 0; insert_y + = + line_height line_space; } se (voce == text_end) { textbuf -> add_to_list (text_end, c); punto text_end = = c; XDrawString (d, note_fg, fg_gc, insert_x, insert_y, (Const char *) e keysym, 1); XSendEvent (d, note_win, Finto, ExposureMask e e_send); insert_x + = c_wd; n -> draw_point_cursor (); } Else { textbuf -> insert_after (punto c); nota = c; n -> redraw_reflow (); n -> draw_point_cursor (); } } } break; } break; Se si rilascia il pulsante: interruttore (keysym = XKeycodeToKeysym (D, e.xkey.keycode, 0)) { Se XK_Shift_R: Se XK_Shift_L: if (shift) Offset = False; break; } break; Se EnterNotify: grab_result = XGrabKeyboard (D, note_win, True, GrabModeAsync, GrabModeAsync, CurrentTime); if (stanza! = stay_on_bottom) XRaiseWindow (d, note_win); break; Se LeaveNotify: XUngrabKeyboard (d, OraCorrente); XQueryPointer (d, radice, E R, ecc, E px e py, e PWX e Pwy e maschera); if (c && (stare! stay_on_top =)) n -> inferiore (); break; focusIn evento: focusOut evento: XSendEvent (d, note_win, Finto, ExposureMask e e_send); break; Se SelectionRequest: n -> send_selection (s); break; Se l'esposizione: XCopyArea (D, note_fg, note_win, win_gc, 0, 0, larghezza, altezza, 0, 0); predefinito: break; } } Else { usleep (10000L); } } } Note_form vuoti (Display * d, p Pixmap vista maschera mappa, GC gc, fg_pixel unsigned long, bg_pixel unsigned long, box_pixel unsigned long, XRectangle * movebar, XRectangle * CloseBox, width int, int altezza) GCForeground e GCV); XDrawLine (d, p, gc, larghezza + resize_tab [0] .x, altezza + resize_tab [0] .e, width + resize_tab [N_RESIZE_POINTS-1] .x, altezza + resize_tab [N_RESIZE_POINTS-1] .e); Initialize_notewindows vuoti (Display * d, finestra root) {N = new NoteWindow (d, root);} remove_note vuoto (void) {n -> cleanup ();} char * note_text (void) {return n -> dump_text ();} char * note_output (void) { if (wr

(0)
(0)

Commenti - 0

Non ci sono commenti

Aggiungi un commento

smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile
Caratteri rimanenti: 3000
captcha