janvier
2010
Bonjour !
Je vous ai parlé, dans le précédent billet, de l’intégration du widget GtkSourceView 2.0 dans la bibliothèque LablGTK. Voyons ici ce qui change par rapport à l’ancien widget.
Voici ci-dessous un petit code qui permet de voir quelques-unes des nouveautés de GtkSourceView 2.0, entre autres les thèmes (GtkStyleScheme) et la matérialisation des espaces. Un thème est choisi aléatoirement au lancement de l’application (évidemment, plus vous en avez et plus il y aura de visuels possibles…). Pour tester, placez le code suivant dans un fichier test.ml, puis compilez avec :
Si vous voulez utiliser un nom différent, n’oubliez pas de modifier la fonction read dans le code source !
let window = GMain.init (); let wnd = GWindow.window ~title:"GtkSourceView 2.0 Demo" ~position:`CENTER ~resizable:false ~width:800 ~height:600 () in wnd#connect#destroy GMain.quit; wnd let ocaml = let manager = GSourceView2.source_language_manager ~default:true in match manager#language "objective-caml" with | None -> failwith "La coloration syntaxique pour OCaml n'est pas disponible !" | some -> some let manager = GSourceView2.source_style_scheme_manager ~default:true let schemes = Array.of_list manager#style_scheme_ids let get_random_style_scheme () = Random.self_init (); match manager#style_scheme schemes.(Random.int (Array.length schemes)) with | None -> assert false | some -> some let scroll = GBin.scrolled_window ~hpolicy:`ALWAYS ~vpolicy:`ALWAYS ~packing:window#add () let source = let src = GSourceView2.source_view ~draw_spaces:[`NEWLINE; `SPACE] (* Matérialisation des espaces. *) ~auto_indent:true ~indent_on_tab:true (* Quelques étiquettes ont été renommées *) ~indent_width:2 ~insert_spaces_instead_of_tabs:true ~right_margin_position:80 ~show_line_numbers:true ~show_right_margin:true ~packing:scroll#add () in src#misc#modify_font_by_name "Monospace 10"; let buf = src#source_buffer in buf#set_language ocaml; buf#set_highlight_syntax true; buf#set_style_scheme (get_random_style_scheme ()); src let read () = let ich = open_in "test.ml" in let len = in_channel_length ich in let str = String.create len in really_input ich str 0 len; close_in ich; Glib.Convert.locale_to_utf8 str let _ = source#source_buffer#set_text (read ()); window#show (); GMain.main ()
Ce code nous donne quelque chose comme ça :
Le nouveau widget bénéficie d’une interface plus agréable à utiliser, avec des étiquettes plus parlantes qu’auparavant. Il ne lui manque plus que la factorisation du code (code folding) et l’auto-complétion, qui sont sans doute les deux fonctionnalités les plus attendues pour les prochaines versions.
À bientôt,
Cacophrène
Bonjour,
Et merci pour ta réponse.
Le paquet c’est pour installer GSourceView2 qui n’est pas installé en standard sous Puppy Linux où l’éditeur Geany est lié statiquement à GSourceView2. Donc je dois installer les paquets gtksourceview-2.4.2-pup4.pet et gtksourceview_DEV-2.4.2-pup4.pet, pas d’autre solution. Après vérification mon GTK installé est 2.24.8 donc pas très éloigné du tien. Mais pas d’autocomplétion pour moi. Il n’y a pas de dépôts officiels OCaml et LablGTK2 pour Puppy Linux, je les installe à partir de la source
Bonjour,
Je viens de faire un essai. Le code compile tel quel avec OCaml 4.00.1 et Lablgtk2 2.16 (avec GTK 2.24.13 installé sur la machine). Et ici un lien vers l’ajout de l’autocompletion dans GSourceView2. Petite question bête : pourquoi passer par les paquets ? C’est l’assurance d’une certaine homogénéité de ce qui est installé sur la machine, certes, mais on installe généralement sans difficulté les dernières versions d’ocaml, findlib et lablgtk2 à partir des sources. Si lablgtk2 2.16 n’apporte pas de révolution, OCaml 4.00 apporte beaucoup plus (la version des dépôts est la 3.12 non ?).
Bonsoir,
Si tu regardes le changelog de lablgtk 2.16, tu verras que les modifications apportées ne sont pas vraiment révolutionnaires… cela dit, il y a tout de même quelques ajouts intéressants. Par exemple, il y a maintenant de quoi faire de l’autocompletion avec GSourceView2. Je projette de faire un petit billet sur ça prochainement, histoire de redonner vie à ce blog qui sommeille faute de temps…
Je présume que ce bout de code compile donc toujours tel quel avec la version 2.16, mais je ne l’ai pas testé. Je vais le faire prochainement. Je te tiens au courant.
À bientôt,
Cacophrène
La version 2.4.2 est la plus récente du paquet GtkSourceView pour Racy Puppy Linux.
Du coup je ne peux pas installer LablGtk 2.16 mais seulement LablGtk 2.14.2
J’ai deux petites questions :
• ton code compile toujours tel quel avec LablGtk 2.16 ?
• à part les extensions / mises à jour de GtkSourceView2 y-a-t-il des apports significatifs entre LablGtk 2.16 et LablGtk 2.14.2 ?
Je précise que ma version installée est GTK 2.28
Merci pour la mise à jour du code.
Merci aussi pour la commande ocamldoc.
Merci pour m’avoir signalé ces problèmes. C’est le problème quand on travaille sur un système qui est déjà en UTF8… Pour les deux changements avec le type option, c’est une modification récente de LablGTK, postérieure à ce billet. J’applique les changements pour garder le code à jour.
Pour la documentation, j’utilise avec plus ou moins de succès quelque chose comme ceci :
ocamldoc -I +lablgtk2 -d lablgtk-doc-html -html -t « LablGTK » -sort -colorize-code -stars *.ml *.mli
Parfois il y a des erreurs, c’est pénible. Au besoin modifier cette ligne de commande en ajoutant des répertoires avec -I, mais je crois que celle-ci donne déjà un bon résultat.
Astuce : se placer directement dans le répertoire src de l’installation de LablGTK, après avoir compilé la bibliothèque, mais avant le nettoyage.
@+
Cacophrène
Désolé, encore un petit peu de maintenance pour ton code.
L’exécutable déclenche une exception, il faut convertir la chaîne à l’aide de Glib.Convert.locale_to_utf8.
J’ai réussi à installer LablGtk avec GtkSourceView 2.0.
C’était pas bien difficile il suffisait de ne pas se décourager au premier obstacle.
Ton exemple compile bien après ces modifications :
buf#set_language (Some ocaml); <br />
buf#set_highlight_syntax true; <br />
buf#set_style_scheme (Some (get_random_style_scheme ())); <br />
Je ne suis pas un habitué de ocamldoc, tu utilises quoi exactement comme ligne de commande pour générer la doc html de LablGtk ?