Chamo is a source code editor, even if it can be used to edit any text file. A system of "views" allows to edit some kinds of files in specific views.
Each window can be splitted vertically or horizontally (à la emacs) or using tabs (à la gedit) in different views. Navigating from one view to another is easy with commands boundable to combinations of keys. One can also store the position and layout of the windows and the list of open files, so that, the next time Chamo is launched, everything is restored at the same position.
A "minibuffer" à la emacs with automatic completion is used to launch commands and indicate arguments for commands (when opening a file, doing some query/replace in a buffer, ...).
The text editing view uses GtkSourceView 2.X and so provides the following functionalities: support of internationalisation (UTF-8), syntax highlighting (with colors, fonts, ...) depending on the language (OCaml, C, C++, Makefile, ... or your own language description), undo/redo management, clipboard management, incremental forward/backward search, query/replace, history of pastable text ("kill-ring"), ...
A system of association of code to commands and of evaluation of commands
(in a form similar to shell commands
command arg1 arg2 ...)
allows to add one's own functionalities. It is also possible to add and modify
all key bindings, even specifically for each kind of view.
In the bytecode version of Chamo, the command "eval" takes in argument some OCaml code which is interpreted and allows to modify everything in the editor: adding modes, redefining commands, ..., the same way as with Lisp in Emacs. The command "eval_file" interprets all the OCaml code present in a file given in argument.
(* 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)]
The native version of Chamo can not interpret OCaml code
to modify its behaviour. However, it is possible to create your own
native version of Chamo including personal modifications.
This is the purpose of the tool
mk-chamo. This script allows to compile a Chamo including additional modules
to extend and customize Chamo's behaviour while keeping the advantages
of the native code.
Here is the synopsis of this script:
mk-chamo -o outfile [options] module1 [module2 [module3 ...]]For example, the following command creates a native code executable
~/bin/mychamo.xwhich includes the default configuration module
mk-chamo -o ~/bin/mychamo.x ~/.chamo/chamo_init.ml
The script launches a compilation command using the OCaml compiler
generating native code (ocamlopt). All options of this compiler can
be used in the parameters of