[cwn] Attn: Development Editor, Latest OCaml Weekly News

Alan Schmitt alan.schmitt at polytechnique.org
Tue Jun 25 02:19:50 PDT 2019


Hello

Here is the latest OCaml Weekly News, for the week of June 18 to 
25,
2019.

Table of Contents
─────────────────

PSA: ocaml/opam2 docker images updated to 4.08.0 release
Default key bindings for utop
Creating OCaml Platform
Other OCaml News
Old CWN


PSA: ocaml/opam2 docker images updated to 4.08.0 release
════════════════════════════════════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/psa-ocaml-opam2-docker-images-updated-to-4-08-0-release/3948/1>


Anil Madhavapeddy announced
───────────────────────────

  The Docker images hosted at [ocaml/opam2] have now been updated 
  to
  include the latest OCaml 4.08.0 release as well as the snapshots 
  of
  4.09 and 4.10.

  One sideeffect of this is that the `ocaml/opam2' default image 
  now has
  OCaml 4.08 as its default switch.  If you use it in CI, it may
  suddenly give you errors if your code has not yet been ported to 
  work
  with that new release.

  As a reminder, you can pin the OCaml version you use in CI 
  easily by:

  • running `opam switch 4.07' as the first command in the 
  Dockerfile
    after `FROM ocaml/opam2'.
  • using the `ocaml/opam2:4.07' image instead of the default one. 
  This
    image also includes several other 4.07.0 variants (such as 
    afl,
    flambda and so on), which you can list with `docker run
    ocaml/opam2:4.07 opam switch'.

  As always, please get in touch with me if you see any other 
  breakage
  from these image updates.


[ocaml/opam2] <https://hub.docker.com/r/ocaml/opam2>


Default key bindings for utop
═════════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/default-key-bindings-for-utop/3950/1>


Daniel Lim asked
────────────────

  Just getting into OCaml, and utop is really nice, but I can't 
  seem to
  find any of the default key bindings listed anywhere online.

  It took quite some time to find out `C-p' can be used to move to 
  the
  previous lines, which was really needed when coming across 
  multiline
  use cases like this:

  ┌────
  │ let ratio x y =
  │   Float.of_int x /. Float.of_int y
  │ ;;
  └────

  Is there anywhere that I can find the default key bindings for 
  the
  repl?


Vladimir Keleshev replied
─────────────────────────

  You can use `#utop_bindings;;' command in the prompt. Check out 
  other
  useful `#utop_*' commands as well.

  ┌────
  │ $ utop
  │ 
  ────────────────────────────────┬─────────────────────────────────────────────────────────────┬────────────────────────────────
  │                                 │ Welcome to utop version 
  2.3.0 (using OCaml version 4.07.0)! │
  │ 
  └─────────────────────────────────────────────────────────────┘
  │
  │ Type #utop_help for help about using utop.
  │
  │ # #utop_bindings;;
  │ enter       : accept                        -> accept the 
  current input.
  │ escape      : cancel-search                 -> cancel search 
  mode.
  │ tab         : complete                      -> complete 
  current input.
  │ up          : history-prev                  -> go to the 
  previous entry of the history.
  │ down        : history-next                  -> go to the next 
  entry of the history.
  │ left        : prev-char                     -> move the cursor 
  to the previous character.
  │ right       : next-char                     -> move the cursor 
  to the next character.
  │ home        : goto-bot                      -> move the cursor 
  to the beginning of the text.
  │ end         : goto-eot                      -> move the cursor 
  to the end of the text.
  │ insert      : switch-erase-mode             -> switch the 
  current erasing mode.
  │ delete      : delete-next-char              -> delete the 
  character after the cursor.
  │ backspace   : delete-prev-char              -> delete the 
  character before the cursor.
  │ M-enter     : newline                       -> insert a 
  newline character.
  │ M-tab       : complete-bar                  -> complete 
  current input using the completion bar.
  │ M-down      : complete-bar                  -> complete 
  current input using the completion bar.
  │ M-left      : complete-bar-prev             -> go to the 
  previous possible completion in the completion bar.
  │ M-right     : complete-bar-next             -> go to the next 
  possible completion in the completion bar.
  │ M-home      : complete-bar-first            -> go to the 
  beginning of the completion bar.
  │ M-end       : complete-bar-last             -> go to the end 
  of the completion bar.
  │ M-delete    : kill-prev-word                -> cut the word 
  behind the cursor.
  │ M-backspace : kill-prev-word                -> cut the word 
  behind the cursor.
  │ M-b         : prev-word                     -> move the cursor 
  to the beginning of the previous word.
  │ M-c         : capitalize-word               -> capitalize the 
  first word after the cursor.
  │ M-d         : kill-next-word                -> cut up until 
  the next non-word character.
  │ M-f         : next-word                     -> move the cursor 
  to the end of the next word.
  │ M-l         : lowercase-word                -> convert the 
  first word after the cursor to lowercase.
  │ M-n         : history-next                  -> go to the next 
  entry of the history.
  │ M-p         : history-prev                  -> go to the 
  previous entry of the history.
  │ M-u         : uppercase-word                -> convert the 
  first word after the cursor to uppercase.
  │ M-w         : copy                          -> copy the 
  current region to the clipboard.
  │ C-left      : prev-word                     -> move the cursor 
  to the beginning of the previous word.
  │ C-right     : next-word                     -> move the cursor 
  to the end of the next word.
  │ C-delete    : kill-next-word                -> cut up until 
  the next non-word character.
  │ C-space     : set-mark                      -> set the mark to 
  the current position.
  │ C-_         : undo                          -> revert the last 
  action.
  │ C-a         : goto-bol                      -> move the cursor 
  to the beginning of the current line.
  │ C-b         : prev-char                     -> move the cursor 
  to the previous character.
  │ C-c         : break                         -> cancel edition.
  │ C-d         : interrupt-or-delete-next-char -> interrupt if at 
  the beginning of an empty line, or delete the next character.
  │ C-e         : goto-eol                      -> move the cursor 
  to the end of the current line.
  │ C-f         : next-char                     -> move the cursor 
  to the next character.
  │ C-g         : cancel-macro                  -> cancel the 
  current macro.
  │ C-h         : delete-prev-char              -> delete the 
  character before the cursor.
  │ C-k         : kill-next-line                -> cut everything 
  until the end of the current line.
  │ C-l         : clear-screen                  -> clear the 
  screen.
  │ C-m         : accept                        -> accept the 
  current input.
  │ C-n         : next-line                     -> move the cursor 
  to the next line.
  │ C-p         : prev-line                     -> move the cursor 
  to the previous line.
  │ C-r         : prev-search                   -> search backward 
  in the history.
  │ C-s         : next-search                   -> search forward 
  in the history.
  │ C-u         : kill-prev-line                -> cut everything 
  until the beginning of the current line.
  │ C-w         : kill                          -> cut the current 
  region to the clipboard.
  │ C-x (       : start-macro                   -> start a new 
  macro.
  │ C-x )       : stop-macro                    -> end the current 
  macro.
  │ C-x e       : play-macro                    -> play the last 
  recorded macro.
  │ C-x C-e     : edit-with-external-editor     -> edit input with 
  external editor command.
  │ C-x C-k tab : insert-macro-counter          -> insert the 
  current value of the macro counter.
  │ C-x C-k C-a : add-macro-counter             -> adds a value to 
  the macro counter.
  │ C-x C-k C-c : set-macro-counter             -> sets the value 
  of the macro counter.
  │ C-y         : yank                          -> paste the 
  contents of the clipboard at current position.
  │ C-z         : suspend                       -> suspend 
  edition.
  │ #
  └────

  You can also override these in `~/.lambda-term-inputrc'. Here's 
  what I
  have:

  ┌────
  │ $ cat ~/.lambda-term-inputrc
  │ [read-line]
  │ C-p: complete-bar-prev
  │ C-n: complete-bar-next
  └────

  I overrode these to use Ctrl (`C') instead of Meta (`M') because 
  with
  my setup (Mac Terminal.app) the meta character (which I would 
  expect
  to be mapped to the Command key) doesn't seem to work.


Creating OCaml Platform
═══════════════════════

  Archive: 
  <https://discuss.ocaml.org/t/creating-ocaml-platform/3971/1>


Anton Kochkov said
──────────────────

  Everyone knows there is a [Haskell Platform] and [Stack]. And 
  Rust is
  [working] with a similar concepts for a few years already. Maybe 
  it
  makes sense to start working towards this goal in OCamlverse as 
  well?
  The relevant thing is [Duniverse] by @avsm, but the platform 
  concept
  should go further, helping to download the bundle at once, 
  instead of
  installing hundreds of packages manually. I see there is 
  actually a
  [site page] for the OCaml Platform, but it is basically empty.

  It even makes sense to include Visual Studio Code with OCaml 
  plugins
  installed.


[Haskell Platform] <https://www.haskell.org/platform/>

[Stack] <https://docs.haskellstack.org/en/stable/README/>

[working] 
<https://aturon.github.io/blog/2016/07/27/rust-platform/>

[Duniverse] <https://github.com/avsm/duniverse>

[site page] <http://ocaml.org/platform/>


Vasile Rotaru replied
─────────────────────

  As I understand it, is not there yet. See this [talk] by Anil
  Madhavapeddy (@avsm)


[talk] <https://www.youtube.com/watch?v=oyeKLAYPmQQ>


Other OCaml News
════════════════

From the ocamlcore planet blog
──────────────────────────────

  Here are links from many OCaml blogs aggregated at [OCaml 
  Planet].

  • [Frama-C 19.0 (Potassium) is out. Download ithere.]


[OCaml Planet] <http://ocaml.org/community/planet/>

[Frama-C 19.0 (Potassium) is out. Download ithere.]
<http://frama-c.com/index.html>


Old CWN
═══════

  If you happen to miss a CWN, you can [send me a message] and 
  I'll mail
  it to you, or go take a look at [the archive] or the [RSS feed 
  of the
  archives].

  If you also wish to receive it every week by mail, you may 
  subscribe
  [online].

  [Alan Schmitt]


[send me a message] <mailto:alan.schmitt at polytechnique.org>

[the archive] <http://alan.petitepomme.net/cwn/>

[RSS feed of the archives] 
<http://alan.petitepomme.net/cwn/cwn.rss>

[online] <http://lists.idyll.org/listinfo/caml-news-weekly/>

[Alan Schmitt] <http://alan.petitepomme.net/>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.idyll.org/pipermail/caml-news-weekly/attachments/20190625/109900e2/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 487 bytes
Desc: not available
URL: <http://lists.idyll.org/pipermail/caml-news-weekly/attachments/20190625/109900e2/attachment-0001.pgp>


More information about the caml-news-weekly mailing list