Chamo
Qu'est-ce que Chamo ?

Chamo est un éditeur de code source, même s'il peut être utilisé pour éditer n'importe quel fichier texte. Un système de "vues" permet d'éditer certains fichiers dans des "vues" spécialisées.

Chamo a une section dans la FAQ et une page de trucs et astuces.

Chaque fenêtre peut être, selon les besoins, découpée verticalement ou horizontalement (à la emacs) ou bien en utilisant des onglets (à la gedit). La navigation entre les vues et les onglets est facilitée par des commandes associables à des combinaisons de touches. Il est possible de sauvegarder la disposition et le découpage des fenêtres ainsi que le fichiers ouverts, de façon à retrouver la même disposition lors du prochain lancement de l'éditeur.

Un "minibuffer" à la emacs avec la complétion est utilisé pour lancer les commandes nécessitant des arguments (ouverture de fichier, recherche/remplacement, ...).

La vue d'édition de texte utilise GtkSourceView 2.X, et offre les fonctionnalités suivantes: support de l'internationalisation (UTF-8), accentuation de la syntaxe (par les couleurs, la fonte, ...) selon le langage (OCaml, C, C++, Makefile, ..., ou votre propre description de langage), gestion des Undo/Redo, gestion du presse-papier, recherche incrémentale avant/arrière, recherche/remplacement, gestion de l'historique des parties supprimées ("kill-ring"), ....

Un système d'association de code à des commandes et d'évaluation de commandes (sous une forme similaire aux commandes shell command arg1 arg2 ...) permet d'ajouter ses propres fonctionnalités. Il est possible d'ajouter et modifier tous les raccourcis clavier, et ceci spécifiquement pour chaque type de vue.

Dans la version bytecode de Chamo, la commande "eval" prend en argument du code OCaml qui est interprété et permet de faire toutes les modifications que l'on souhaite dans l'éditeur: ajout de modes, redéfinition de commandes, ... de la même façon qu'en Lisp dans Emacs. La commande "eval_file" évalue tout le code présent dans un fichier en argument.

Un mémo des raccourcis clavier par défaut est disponible ici.

A compléter...

Captures d'écran et aperçu
Chamo, an emacs-like file editor based on Gtk2Il est possible de découper les fenêtres pour afficher plusieurs vues, à la emacs. Des commandes associables à des raccourcis clavier permettent de manipuler le découpage des vues: "split_horizontally" ("C-h" ou "C-x 2" par défaut), "split_vertically" ("C-v" ou "C-x 3" par défaut), "destroy_active_view" ("C-x 0" par défaut).
Using tabsUne autre manière de partager une fenêtre est d'utiliser des onglets, comme dans GEdit. Les commandes "cycle_tab" ("C-Tab" par défaut) et "new_tab" ("C-x C-t" par défaut) permettent respectivement de changer d'onglet et de créer un nouvel onglet.
Using tabs and splitsBien sûr, il est possible de mélanger ces deux façons pour arranger les vues comme on le souhaite. La disposition des fenêtres et des vues dans les fenêtres est sauvegardable à la demande par la commande "store_layout". Lorsque plus tard l'éditeur est lancé dans le même répertoire, la disposition des fenêtres et des vues est restituée.
The odoc viewA chaque type de fichier (pour l'instant une expression régulière sur le nom) peut être associé une vue pour l'éditer. Plusieurs vues sont disponibles. La vue "odoc" permet de voir le contenu d'un fichier de dump d'OCamldoc. Un double-clic sur un élément provoque l'ouverture du fichier à l'endroit où l'élément est défini. Le bouton droit permet de choisir si on souhaite ouvrir les fichiers d'interface (".mli") ou d'implémentation (".ml") qui ont servis à produire ce dump. C'est une façon aisée de parcourir le code de son projet.
The todo list viewLa vue "tdl" permet d'éditer des fichiers "todo list", au format utilisé par la bibliothèque Tdl incluse dans Cameleon.
Sourceviews in actionLa vue "sourceview" est basée sur GtkSourceView. Elle offre la colorisation syntaxique associée à chaque type de fichier (pour l'instant une expression régulière sur le nom du fichier). Il est également possible de définir des modes comme dans emacs pour, selon les fichiers, offrir des commandes, raccourcis clavier, menus et indentation adaptés. Un fichier peut être ouvert par plusieurs vues "sourceview" simultanément. Les commandes classiques sont disponibles dans cette vue: recherche incrémentale avant/arrière, recherche/replacement, inversion de lignes/mots/caractères, copier/coller, "kill-ring" à la emacs, ...
Minibuffers with completionUn minibuffer semblable à celui d'emacs est utilisé pour les arguments des commandes (ouverture de fichier, changement de buffer, recherche, ...) et effectue la complétion automatique.
Divers fichiers permettent de configurer les raccourcis clavier. Ici il s'agit du fichier de configuration des fenêtres en général. Les raccourcis clavier pour les fenêtres sont complétés par ceux de la vue active, paramétrables eux aussi.Fichier ~/.cameleon2/chamo.gui:
(* The size of histories in minibuffer *)
minibuffer_history_size = 50
(* The key combination to use to reset the key stroke state *)
abort_binding = "C-g"
(* Common key bindings for windows *)
window_key_bindings =
  [(["C-x"; "C-c"], close_active_window); (["C-n"], new_window);
   (["C-x"; "C-s"], save_active_view); (["C-x"; "C-w"], save_active_view_as);
   (["C-x"; "C-f"], open_file); (["C-b"], cycle_view);
   (["C-Tab"], cycle_tab); (["SC-Tab"], rev_cycle_tab);
   (["C-x"; "C-t"], new_tab); (["C-v"], split_vertically);
   (["C-x"; "S-3"], split_vertically); (["C-h"], split_horizontally);
   (["C-x"; "S-2"], split_horizontally);
   (["C-x"; "S-0"], destroy_active_view);
   (["C-x"; "C-x"; l], print_key_bindings); (["C-y"], paste);
   (["C-c"], copy); (["C-w"], cut); (["A-x"], prompt_command)]
Créer son propre Chamo en code natif

La version native de Chamo ne permet pas d'interpréter du code OCaml et donc de modifier au vol son comportement. Il est cependant possible de créer sa propre version native de Chamo incluant des modifications personnelles. L'outil make_my_chamo est fait pour ça. Ce script permet de compiler une version de chamo en incluant des modules supplémentaires de façon à étendre ou personnaliser le comportement de Chamo tout en gardant le bénéfice du code natif.

L'utilisation est la suivante:

make_my_chamo -o outfile [options] module1 [module2 [module3 ...]]

Par exemple, la commande suivante crée un exécutable natif ~/bin/mychamo.x incluant le module de configuration par défaut ~/.cameleon2/chamo_init.ml:

make_my_chamo -o ~/bin/mychamo.x ~/.cameleon2/chamo_init.ml

Le script lance une commande de compilation utilisant le compilateur OCaml générant du code natif (ocamlopt). Toutes les options de ce compilateur sont utilisables dans les paramètres de make_my_chamo.