From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Original-To: caml-list@sympa.inria.fr Delivered-To: caml-list@sympa.inria.fr Received: from mail1-relais-roc.national.inria.fr (mail1-relais-roc.national.inria.fr [192.134.164.82]) by sympa.inria.fr (Postfix) with ESMTPS id CAA827ED34 for ; Wed, 4 Jul 2012 19:06:37 +0200 (CEST) Received-SPF: None (mail1-smtp-roc.national.inria.fr: no sender authenticity information available from domain of aaron678@gmail.com) identity=pra; client-ip=209.85.160.182; receiver=mail1-smtp-roc.national.inria.fr; envelope-from="aaron678@gmail.com"; x-sender="aaron678@gmail.com"; x-conformance=sidf_compatible Received-SPF: Pass (mail1-smtp-roc.national.inria.fr: domain of aaron678@gmail.com designates 209.85.160.182 as permitted sender) identity=mailfrom; client-ip=209.85.160.182; receiver=mail1-smtp-roc.national.inria.fr; envelope-from="aaron678@gmail.com"; x-sender="aaron678@gmail.com"; x-conformance=sidf_compatible; x-record-type="v=spf1" Received-SPF: None (mail1-smtp-roc.national.inria.fr: no sender authenticity information available from domain of postmaster@mail-gh0-f182.google.com) identity=helo; client-ip=209.85.160.182; receiver=mail1-smtp-roc.national.inria.fr; envelope-from="aaron678@gmail.com"; x-sender="postmaster@mail-gh0-f182.google.com"; x-conformance=sidf_compatible X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AmUBAFl39E/RVaC2kGdsb2JhbABFpiuQewgiAQEBAQkJDQcUBCOCMQIsATkDDQUQPSASAQUBIjWHWwMLmQaCYQkDjxSFZycNSoh+AQUMkWQDjkmGbo4mPoFUgkY X-IronPort-AV: E=Sophos;i="4.77,524,1336341600"; d="scan'208";a="165609228" Received: from mail-gh0-f182.google.com ([209.85.160.182]) by mail1-smtp-roc.national.inria.fr with ESMTP/TLS/RC4-SHA; 04 Jul 2012 19:06:37 +0200 Received: by ghbz22 with SMTP id z22so9882314ghb.27 for ; Wed, 04 Jul 2012 10:06:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:from:date:x-google-sender-auth:message-id :subject:to:content-type; bh=CC+hpi9+/y5WONn4tbHc+pW45ejUXUabq/wd2Ze+FHM=; b=M7yApj6t3bO+TKHVAUc+4pIIZxZBmZ8FuwW0Za/2tLy5ox1ldKrVgF+r/RgxkiZDcu MJ6WdxxSWTNmU3xLBmix9hDKSkIWgD4al4Hoq7/VZA0DggJAZIQ6uJfD3MmCxvPSfaTE t4KaMjf7D5FnnlM1pgC6ZREWuX7PgZTad+M4UdrpxWOV7P/B6u5jCU5vjjH53DBjxSka tWHHqhlP21z2bOk2I0qLv1ZC6UeBuNxCfywZVVgKMagik0PRJta3rTr0pK8tby9wY8It 3ZcLpa4omP1ivcjsR/yPU78XXFUJ2KvslE8CHRhwlIk0xckaT7kHIHcW6hpmQuf1pTyt WVjw== Received: by 10.60.27.168 with SMTP id u8mr23487036oeg.58.1341421596265; Wed, 04 Jul 2012 10:06:36 -0700 (PDT) MIME-Version: 1.0 Sender: aaron678@gmail.com Received: by 10.76.114.133 with HTTP; Wed, 4 Jul 2012 10:06:15 -0700 (PDT) From: Aaron Bohannon Date: Wed, 4 Jul 2012 13:06:15 -0400 X-Google-Sender-Auth: qP7Tn8fLfB_vLmNSw_tIOtuP9no Message-ID: To: OCaml List Content-Type: multipart/mixed; boundary=e89a8fb20532bd4b2c04c4040daa Subject: [Caml-list] ocaml top-level line editing script --e89a8fb20532bd4b2c04c4040daa Content-Type: text/plain; charset=ISO-8859-1 Hi, One thing that is missing from the OCaml top level loop is line editing features. I used to use a wrapper program called "ledit" that added readline support, but I never seem to have it installed on my machine when I need it, and moreover, I have started to get used to the more flexible line editing of zsh. After some poking around, I found that it's fairly straightforward to wrap any REPL with a zsh script and get zsh line editing capabilities, which includes multi-line support (e.g., so you can fix a typo you made three lines back). I'm attaching the script I hacked together, in case it is useful to anyone else. It works great for me, but it was not written to be generic and robust, so YMMV. You must use ctrl-D to exit cleanly -- I didn't bother adding support for "#quit". I'm sure someone could make many improvements to it if they had more patience for zsh scripting than I do. - Aaron --e89a8fb20532bd4b2c04c4040daa Content-Type: application/octet-stream; name=zcaml Content-Disposition: attachment; filename=zcaml Content-Transfer-Encoding: base64 X-Attachment-Id: f_h48nq9h50 IyEvdXNyL2Jpbi9lbnYgenNoCgojIFNpbXBsZSB3cmFwcGVyIGZ1bmN0aW9u IGZvciAib2NhbWwiIHRoYXQgYWRkcyB6c2ggbGluZSBlZGl0aW5nIGNhcGFi aWxpdGllcy4KIyBCYXNlZCBvbiB0aGUgIm5zbG9va3VwIiBleGFtcGxlIGRp c3RyaWJ1dGVkIHdpdGggenNoLgoKc2V0b3B0IGxvY2Fsb3B0aW9ucyBsb2Nh bHRyYXBzCgpsb2NhbCBpbnB1dCBvdXRwdXQKCnptb2Rsb2FkIC1lIHpzaC96 cHR5IHx8IHptb2Rsb2FkIC1pIHpzaC96cHR5Cgp0cmFwICdyZXR1cm4gMTMw JyBJTlQKdHJhcCAnenB0eSAtZCBvY2FtbCcgRVhJVAoKenB0eSBvY2FtbCBj b21tYW5kIG9jYW1sCgp6cHR5IC1yIG9jYW1sIG91dHB1dCAnKgojICcKcHJp bnRmICIlcyIgIiRvdXRwdXQiCgpiaW5ka2V5IC1OIHZpaW5zLWNvcHkgdmlp bnMKYmluZGtleSAtTiB2aWNtZC1jb3B5IHZpY21kCgojIHNvbWUgbWFwcGlu Z3MgdGhhdCBJIGxpa2UKYmluZGtleSAtTSB2aWlucy1jb3B5ICJeQSIgdmkt YmVnaW5uaW5nLW9mLWxpbmUKYmluZGtleSAtTSB2aWlucy1jb3B5ICJeRSIg dmktZW5kLW9mLWxpbmUKYmluZGtleSAtTSB2aWlucy1jb3B5ICJeUCIgaGlz dG9yeS1iZWdpbm5pbmctc2VhcmNoLWJhY2t3YXJkCmJpbmRrZXkgLU0gdmlp bnMtY29weSAiXk4iIGhpc3RvcnktYmVnaW5uaW5nLXNlYXJjaC1mb3J3YXJk CgojIHVzZSBjdHJsLVwgdG8gZW50ZXIgYSBuZXdsaW5lIC0tIGFmdGVyd2Fy ZCwgeW91IGNhbiBzdGlsbCBlZGl0IHByZXZpb3VzIGxpbmVzCmJpbmRrZXkg LU0gdmlpbnMtY29weSAtcyAiXlxcIiAiXlZeSiIKCndoaWxlIGlucHV0PScn OyB2YXJlZCAtaGUgLXAgJyMgJyAtTSB2aWlucy1jb3B5IC1tIHZpY21kLWNv cHkgaW5wdXQ7IGRvCiAgIyBhZGQgbGluZSB0byB6c2ggaGlzdG9yeQogIHBy aW50IC1zICIkaW5wdXQiCiAgIyBicmVhayBvbiBjdHJsLUQgKEkgdGhpbms/ KQogIFtbICIkaW5wdXQiID0gRVhJVCBdXSAmJiBicmVhawogICMgIjs7IiBp cyBhZGRlZCBiZWNhdXNlIHRoaXMgbG9vcCB3aWxsIGhhbmcgaWYgd2UgZG9u J3QgZ2V0IGJhY2sgdG8gYSBwcm9tcHQKICB6cHR5IC13IG9jYW1sICIkaW5w dXQ7OyIKICB6cHR5IC1yIG9jYW1sIG91dHB1dCAnKHwqCikjICcKICBwcmlu dGYgIiVzIiAiJG91dHB1dCIKZG9uZQoKenB0eSAtdyBvY2FtbCAnI3F1aXQ7 OycK --e89a8fb20532bd4b2c04c4040daa--