{"id":33237099,"url":"https://github.com/HiTECNOLOGYs/cl-charms","last_synced_at":"2025-12-16T02:01:52.774Z","repository":{"id":13883661,"uuid":"16581794","full_name":"HiTECNOLOGYs/cl-charms","owner":"HiTECNOLOGYs","description":"More up-to-date version of cl-charms. Forked it because it was, apparently, abandoned by author and I couldn't contact him.","archived":false,"fork":false,"pushed_at":"2024-12-30T15:39:29.000Z","size":154,"stargazers_count":172,"open_issues_count":19,"forks_count":29,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-10-27T08:59:09.039Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://gitorious.org/cl-charms","language":"Common Lisp","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/HiTECNOLOGYs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2014-02-06T14:31:10.000Z","updated_at":"2025-10-09T07:19:20.000Z","dependencies_parsed_at":"2024-01-31T12:05:02.417Z","dependency_job_id":"9c188eb6-0348-4dad-9d55-8b1a042e16bb","html_url":"https://github.com/HiTECNOLOGYs/cl-charms","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/HiTECNOLOGYs/cl-charms","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HiTECNOLOGYs%2Fcl-charms","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HiTECNOLOGYs%2Fcl-charms/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HiTECNOLOGYs%2Fcl-charms/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HiTECNOLOGYs%2Fcl-charms/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HiTECNOLOGYs","download_url":"https://codeload.github.com/HiTECNOLOGYs/cl-charms/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HiTECNOLOGYs%2Fcl-charms/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27758422,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-16T02:00:10.477Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-11-16T19:00:28.321Z","updated_at":"2025-12-16T02:01:52.769Z","avatar_url":"https://github.com/HiTECNOLOGYs.png","language":"Common Lisp","funding_links":[],"categories":["Interfaces to other package managers"],"sub_categories":["Third-party APIs"],"readme":"[![Build Status](https://travis-ci.org/HiTECNOLOGYs/cl-charms.svg?branch=master)](https://travis-ci.org/HiTECNOLOGYs/cl-charms)\n\nIntroduction\n============\n\n`cl-charms` is an interface to `libcurses` in Common Lisp. It provides\nboth a raw, low-level interface to `libcurses` via CFFI, and a more\nhigher-level lispier interface.\n\nIt is intended to succeed `cl-ncurses`, which used the less portable\nUFFI instead of CFFI for foreign bindings. Indeed, `cl-charms`\nincludes portions of code from `cl-ncurses`, and is largely a direct\ntranslation of the latter's UFFI definitions to CFFI.\n\nCurrently, the low-level interface (the package `charms/ll`) is\nprobably feature-equivalent to `cl-ncurses` and compatible with client\ncode. In the future, however, `cl-charms` may break compatibility with\n`cl-ncurses`.\n\n`cl-charms` has been developed by its original author, Abhishek Reddy\n(abhishek@abhishek.geek.nz), since beginning of October 2010 for quite\nsome time, then abandoned for unknown reason. After that, in 2014,\nMark Fedurin (hitecnologys@gmail.com) took responsibility for keeping\nthe library in working state. Robert Smith (quad@symbo1ics.com) began\nto fix up the CFFI bindings and provide a friendlier interface.\n\nThe software is released under an MIT-style license. See the file\n`COPYING` for details.\n\n\u003e    The imitator dooms himself to hopeless mediocrity. The\n\u003e    inventor did it because it was natural to him, and so in him\n\u003e    it has a charm. In the imitator something else is natural, and\n\u003e    he bereaves himself of his own beauty, to come short of\n\u003e    another man's.\n          -- R.W. Emerson on originality.\n\nVersion\n=======\n\nVersioning roughly follows the scheme described in\n[Semantic Versioning](http://semver.org/). Only \"releases\" will be\nversioned.\n\nSince we are still pre-`1.0.0`, the minor version will indicate API\nbreakage. Despite being pre-`1.0.0`, what exists in the low-level\ninterface as of now is quite usable for ASCII usage. We consider this\n\"beta\" quality. The high-level functionality is considered \"alpha\"\nquality.\n\n\nPortability\n===========\n\n`cl-charms` has been tested to work to a reasonable extent (e.g.,\nexample code runs) on the following platforms:\n\n* SBCL 2.3.2 on Debian 11 x86-64\n* SBCL 2.3.2 on Ubuntu 22.04.2 LTS (jammy jellyfish) x86-64\n* SBCL 1.1.8--1.2.9 on Gentoo Linux (3.13.6-hardened-r3--3.15.6-hardened) x86-64\n* SBCL 1.2.3.15-4704124 on OS X 10.10 (Yosemite) x86-64\n* SBCL 1.1.14.debian on Ubuntu 14.04.2 LTS (trusty) x86\n* SBCL 1.2.11 on Windows 8.1 amd64\n* CCL 1.9-r15769M on Gentoo Linux (3.13.6-hardened-r3) x86-64\n* CCL 1.9-r15759 (64-bit) on OS X 10.10 (Yosemite) x86-64\n* LispWorks 6.1.1 (64-bit) on OS X 10.10 (Yosemite) x86-64\n* Lispworks 7.0.0 (32-bit) on OS X 10.10 (Yosemite) x86-64\n\nIt may work on other implementations and system but there's no\nguarantee. More testing is really appreciated.\n\n`cl-charms` ought to function on other implementations of Common Lisp\nand `libcurses` on various distributions of UNIX and UNIX-like\nsystems. See the section on Bugs and Contributing below for how to\nhelp test and realize this.\n\n`cl-charms` is supposed to be only bindings along with a separate,\nno-frills interface atop: nothing more, nothing less. For\nfull-featured TUI see: https://github.com/naryl/cl-tui\n\n\nWindows\n-------\n\n`cl-charms` works on Windows with some limitations. Currently colours are not\nsupported and some other features like bold might not work correctly. In order\nto use `cl-charms` on Windows, you'll need PDCurses library that is available\nat http://pdcurses.sourceforge.net/. If you want to use GDI instead of console\nhttp://www.projectpluto.com/win32a.htm would be a good option.\n\nWhile the original PDCurses project offers prebuilt binaries, using project\npluto requires you to compile your own binaries.\n\nUsage is as simple as placing the `pdcurses.dll` (optionally renaming\nit `libcurses.dll`) either in `PATH` or in the directory where you're\nrunning your `cl-charms` program. Project pluto will require\nadditional dependencies, namely `libgcc_s_dw2-1.dll` and `SDL.dll`.\n\n\nInstallation\n============\n\nIf you're Quicklisp user, then simple\n```lisp\n(ql:quickload :cl-charms)\n```\nwould suffice, as `cl-charms` is in Quicklisp.\n\nIf you're not, then install Quicklisp and follow to the previous\nparagraph.\n\n\nUsage\n=====\n\nThe low-level library is contained within the package\n`cl-charms/low-level`, nicknamed `charms/ll`. This is mostly a\none-to-one equivalent to standard curses functions.\n\nThe high-level library is contained within the package `cl-charms`,\nnicknamed `charms`.\n\nExamples and Tutorials\n======================\n\nThere are currently two examples included with the source code, all of which you can find in the [examples](examples/) directory.\n\nYou might also want to check out the following applications written\nusing `cl-charms`:\n\n* CHARMLIFE, a viewer for Conway's [Game of Life](https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life), exponentially accelerated with the HASHLIFE algorithm ([video](https://youtu.be/YO3KIHjcrrs), [source](https://bitbucket.org/tarballs_are_good/lisp-random/src/master/hashlife/))\n* The game \"Snake\" ([video](https://www.youtube.com/watch?v=Gpm1K1jtwuA), [source](https://bitbucket.org/tarballs_are_good/lisp-random/src/master/snake.lisp))\n* Steve Losh's Lisp Game Jam entry [silt2](https://github.com/sjl/silt2), [itch](https://itch.io/jam/august-2016-lisp-game-jam/rate/79461), ([blog post](http://stevelosh.com/blog/2016/08/lisp-jam-postmortem))\n\nDaniel Kochmanski has written a nice tutorial about CL-CHARMS [here](http://turtleware.eu/posts/cl-charms-crash-course.html).\n\nTimer\n-----\n\n![](timer.png)\n\nA minimal, simple timer/stopwatch program.\n\n```lisp\n* (ql:quickload :cl-charms-timer)\n* (charms-timer:main)\n```\n\nPaint\n-----\n\n![](paint.png)\n\nA simple ASCII art drawing program.\n\n```lisp\n* (ql:quickload :cl-charms-paint)\n* (charms-paint:main)\n```\n\nMarquee\n-------\n\n![](marquee.png)\n\nA program that horizontally scrolls text across the screen.\n\n```lisp\n* (ql:quickload :cl-charms-marquee)\n* (charms-marquee:main)\n```\n\nTesting\n=======\n\nAs a minimum, it would be appreciated if the library was compiled and\nloaded on various Lisp systems on a variety of operating systems.\n\n[TODO]\n\nNote about SLIME\n================\n\nThe `libcurses` library handles terminal, and emacs is not a terminal\nit can handle. So if you run lisp from SLIME (inside emacs),\n`libcurses` functions won't work properly.\n\nIf you want to use SLIME, a possible way (to e.g. run the timer\nexample) is:\n\n1. run lisp from terminal\n2. `(ql:quickload '(:swank) :silent t)` ;; from terminal\n3. `(swank:create-server :port 5555 :dont-close t)` ;; from terminal, too\n4. `(loop (sleep 1))` ;; from terminal, prevents read-line in console REPL\n5. go to emacs and M-x slime-connect RET localhost RET 5555 RET\n6. `(ql:quickload :cl-charms-timer)` ;; from emacs repl\n7. `(charms-timer:main)` ;; from emacs repl\n\nNow you should see timer running on terminal.\n\nStep 1. ~ 3. can be done as a one-liner:\n\n- for SBCL: `sbcl --eval \"(ql:quickload '(:swank) :silent t)\" --eval \"(swank:create-server :port 5555 :dont-close t)\"`\n- for CCL: `ccl -e \"(ql:quickload '(:swank) :silent t)\" -e \"(swank:create-server :port 5555 :dont-close t)\"` ;; maybe ccl64 instead of ccl\n- for [Roswell](https://github.com/roswell/roswell): `ros run -e \"(ql:quickload '(:swank) :silent t)\" -e \"(swank:create-server :port 5555 :dont-close t)\"`\n\nBugs and Contributing\n=====================\n\nYou can use GitHub project's (which is located here:\nhttps://github.com/HiTECNOLOGYs/cl-charms) issues tracker or wiki to contribute\nbug reports/patches/etc. or just send an email to one of the maintainers.\n\nMajor areas of work to be done:\n\n* Add bindings for all the functions from ncurses\n* Do more testing on different OS and architectures\n* Try it with non-libncurses libraries.\n* Test cases and sample applications.\n* Finally write documentation\n\nCurrent Maintainers\n===================\n\n* [Robert Smith](https://github.com/tarballs-are-good) (quad@symbo1ics.com)\n* [Mark Fedurin](https://github.com/HiTECNOLOGYs) (me@hitecnologys.org)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FHiTECNOLOGYs%2Fcl-charms","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FHiTECNOLOGYs%2Fcl-charms","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FHiTECNOLOGYs%2Fcl-charms/lists"}