<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7617521785419311079</id><updated>2011-07-07T17:29:55.056-07:00</updated><category term='chamo'/><title type='text'>News from Cameleon</title><subtitle type='html'>Here are some news about latest developments in &lt;a href="http://home.gna.org/cameleon/"&gt;Cameleon&lt;/a&gt;.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ocameleon.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7617521785419311079/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ocameleon.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Zoggy</name><uri>http://www.blogger.com/profile/13701015149417877687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>3</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7617521785419311079.post-8363377518756889909</id><published>2010-01-21T06:58:00.001-08:00</published><updated>2010-01-21T09:29:26.964-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='chamo'/><title type='text'>Playing with .annot files</title><content type='html'>New commands are available in the OCaml mode of Chamo. They use the &lt;span style="color: rgb(51, 102, 102);font-family:courier new;" &gt;.annot&lt;/span&gt; files generated by ocamlc. Here is a list of these commands. Default key bindings are shown between parenthesis.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255); font-weight: bold;font-family:courier new;" &gt;ocaml_display_type_annot (A-t)&lt;/span&gt; already existed to display the type of the expression under the cursor. Now &lt;span style="font-weight: bold; color: rgb(51, 102, 255);font-family:courier new;" &gt;ocaml_copy_type_annot (CA-t)&lt;/span&gt; does the same but also copies the type in the clipboard so that it can be easily pasted somewhere else, for example in a &lt;span style="color: rgb(51, 102, 102);font-family:courier new;" &gt;.mli&lt;/span&gt; file. This prevents from having to launch a &lt;span style="color: rgb(51, 102, 102);font-family:courier new;" &gt;ocamlc -i&lt;/span&gt; command to get the type.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255); font-weight: bold;font-family:courier new;" &gt;ocaml_display_ident_annot (A-i)&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt; displays the "ident" information, that is whether the identifier is local to the file or its fully qualified name if it is defined elsewhere. &lt;span style="font-weight: bold; color: rgb(51, 102, 255);font-family:courier new;" &gt;ocaml_jump_to_local_def (A-j)&lt;/span&gt; does the same but if the ident is defined in the file, the cursor is positioned on the identifier definition.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(51, 102, 255);font-family:courier new;" &gt;ocaml_display_call_annot (A-c)&lt;/span&gt; displays the "call" information, that is whether a function call is "tail" or "stack". &lt;span style="font-weight: bold; color: rgb(51, 102, 255);font-family:courier new;" &gt;ocaml_show_stack_calls (CA-c)&lt;/span&gt; highlights (or not) all the calls using the stack. This can be useful to check whether a function is tail-recursive. The screenshot below shows the result on the &lt;span style="color: rgb(51, 153, 153);font-family:courier new;" &gt;List&lt;/span&gt; module.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_RT8DPiBmxGY/S1hxkWOPSlI/AAAAAAAAAA8/ZuZjsQWDkJA/s1600-h/stack_calls.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 174px;" src="http://3.bp.blogspot.com/_RT8DPiBmxGY/S1hxkWOPSlI/AAAAAAAAAA8/ZuZjsQWDkJA/s200/stack_calls.png" alt="" id="BLOGGER_PHOTO_ID_5429214220049664594" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;At last, &lt;span style="font-weight: bold; color: rgb(51, 102, 255);font-family:courier new;" &gt;ocaml_expand_ext_idents (CA-x)&lt;/span&gt; prompts the user to replace each external identifier by its fully qualified identifier (except for idents from &lt;span style="font-family:courier new;"&gt;Pervasives&lt;/span&gt;). I personnally use the &lt;span style="color: rgb(51, 102, 102);font-family:courier new;" &gt;open&lt;/span&gt; directive only not to prefix record fields and constructors, but always use fully qualified identifiers. This command is useful when working on a code not written by me and full of &lt;span style="color: rgb(51, 102, 102);font-family:courier new;" &gt;open&lt;/span&gt;'s at the beginning of a file.&lt;br /&gt;&lt;br /&gt;All these commands are available from revision 745 of the repository and in the nightly snapshot.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7617521785419311079-8363377518756889909?l=ocameleon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocameleon.blogspot.com/feeds/8363377518756889909/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7617521785419311079&amp;postID=8363377518756889909' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7617521785419311079/posts/default/8363377518756889909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7617521785419311079/posts/default/8363377518756889909'/><link rel='alternate' type='text/html' href='http://ocameleon.blogspot.com/2010/01/playing-with-annot-files.html' title='Playing with .annot files'/><author><name>Zoggy</name><uri>http://www.blogger.com/profile/13701015149417877687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_RT8DPiBmxGY/S1hxkWOPSlI/AAAAAAAAAA8/ZuZjsQWDkJA/s72-c/stack_calls.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7617521785419311079.post-5487844073091399655</id><published>2008-05-06T07:37:00.000-07:00</published><updated>2008-11-15T07:47:32.966-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='chamo'/><title type='text'>R mode in Chamo</title><content type='html'>A R mode is now available for Chamo, as a &lt;a href="http://home.gna.org/cameleon/snippets.en.html"&gt;separate snippet&lt;/a&gt;. By now, this mode has only one key binding, to call the "r_eval" command. This command sends the contents of the active view to a background R process. The output of this process is displayed in the "outputs" window. Other commands can easily be defined the same way to interact with other programs (see &lt;a href="http://home.gna.org/cameleon/snippets/code_R_mode.html"&gt;the details&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;If some text is selected in the view, then only this text is sent to the R process. Closing the R output tab in the "outputs" window closes the R process. When the "r_eval" command is executed again, a new process is created. If the command is executed and the R process is still running, then it is used and no other process is launched.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_RT8DPiBmxGY/SCBvaxuVAVI/AAAAAAAAAAo/LOXoepGGYx8/s1600-h/r_mode.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_RT8DPiBmxGY/SCBvaxuVAVI/AAAAAAAAAAo/LOXoepGGYx8/s320/r_mode.png" alt="" id="BLOGGER_PHOTO_ID_5197276475800486226" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7617521785419311079-5487844073091399655?l=ocameleon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocameleon.blogspot.com/feeds/5487844073091399655/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7617521785419311079&amp;postID=5487844073091399655' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7617521785419311079/posts/default/5487844073091399655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7617521785419311079/posts/default/5487844073091399655'/><link rel='alternate' type='text/html' href='http://ocameleon.blogspot.com/2008/05/r-mode-in-chamo.html' title='R mode in Chamo'/><author><name>Zoggy</name><uri>http://www.blogger.com/profile/13701015149417877687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_RT8DPiBmxGY/SCBvaxuVAVI/AAAAAAAAAAo/LOXoepGGYx8/s72-c/r_mode.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7617521785419311079.post-5565781387118397054</id><published>2008-04-30T07:33:00.000-07:00</published><updated>2008-11-15T07:47:33.231-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='chamo'/><title type='text'>OCamlbuild support in Chamo</title><content type='html'>The Chamo editor now includes some ocamlbuild support through the internal command "ocaml_build": An ocamlbuild command is proposed to the user who can edit it and run it.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_RT8DPiBmxGY/SBiIKhuVATI/AAAAAAAAAAM/WBh5pChCVHw/s1600-h/ocamlbuild_asks.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_RT8DPiBmxGY/SBiIKhuVATI/AAAAAAAAAAM/WBh5pChCVHw/s320/ocamlbuild_asks.png" alt="" id="BLOGGER_PHOTO_ID_5195051884604621106" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The output of the command is displayed in a new "outputs" window, and is analyzed. In case of error (or warning considered as error), the editor displays, in the active view, the file where the error was found, and highlights the corresponding characters.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_RT8DPiBmxGY/SBiIcxuVAUI/AAAAAAAAAAU/Y6lbWsiazv4/s1600-h/ocamlbuild_error.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_RT8DPiBmxGY/SBiIcxuVAUI/AAAAAAAAAAU/Y6lbWsiazv4/s320/ocamlbuild_error.png" alt="" id="BLOGGER_PHOTO_ID_5195052198137233730" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The command used to compile is kept associated to the file, so that it is proposed the next time the internal command "ocaml_build" is launch on the file. These associations are even stored on disk to be kept between two sessions of Chamo launched in the same directory.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7617521785419311079-5565781387118397054?l=ocameleon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ocameleon.blogspot.com/feeds/5565781387118397054/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7617521785419311079&amp;postID=5565781387118397054' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7617521785419311079/posts/default/5565781387118397054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7617521785419311079/posts/default/5565781387118397054'/><link rel='alternate' type='text/html' href='http://ocameleon.blogspot.com/2008/04/ocamlbuild-support-in-chamo.html' title='OCamlbuild support in Chamo'/><author><name>Zoggy</name><uri>http://www.blogger.com/profile/13701015149417877687</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_RT8DPiBmxGY/SBiIKhuVATI/AAAAAAAAAAM/WBh5pChCVHw/s72-c/ocamlbuild_asks.png' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
