Common Lisp editor/IDE with high expansibility


Lem is the editor/IDE well-tuned for Common Lisp.

Build Status Backers on Open Collective Sponsors on Open Collective

After installing lem, you can start developing in Common Lisp at once.

You can skip over writing tidy settings or installing many plugins as you do on Emacs.





Play with Lem in the Docker

You can try Lem by running it in a docker container:

docker run --rm -ti -v `pwd`:/app 40ants/lem:latest


Please install roswell at first.

Roswell Installation Guide

After that, please follow the steps bellow.

1. install lem by roswell
$ ros install lem-project/lem

2. add the PATH in the initialization file(such as ~/.bashrc)
export PATH=$PATH:~/.roswell/bin


$ ros update lem


$ lem <filename.lisp>

You can watch the screencast on Youtube.



Lem loads ~/.lem/init.lisp when starting up.

You can see an example here or here

fukamachi also published his init files on GitHub.

Extensions and modes

  • Pareto - A mode, complement to the Paredit. Makes Lisp code editing even more efficient!

Electron version (Experiment)

Electron version is in the experimental stage.

If you try, please follow below steps.

$ node -v  # check if your nodejs is 8.9.3LTS+.
$ npm -v
$ npm install -g cxxxr/lem   # install lem-electron
$ lem-electron               # Electron version will start


Lem on platforms without SBCL thread support (e.g. raspberry pi3)

If installation fails due to bordeaux-threads, there is no thread provided by SBCL on your PC.
You need to use Clozure Common Lisp (CCL) instead of SBCL.

$ ros install ccl-bin
$ ros use ccl-bin
$ ros install cxxxr/lem

And also need to specify frontend to ncurses-ccl. You can launch lem as follows:

$ lem --frontend ncurses-ccl

How to develop lisp


How to hack on lem itself


If you have a questions, join this Gitter chat.


This project exists thanks to all the people who contribute. [Contribute].


Thank you to all our backers! 🙏 [Become a backer]


Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]



  • lem's icon

    lem's icon

    @cxxxr ご希望の通り、Shinmeraさんにアイコンの件を依頼しました。 英語に訳すので、希望を伝えてください。

    I asked Shinmera about the lem's icon to make your wish come true. Please tell him about your wish on this issue. I'll translate it into English.

    opened by t-cool 29
  • Workaround for long line display v2

    Workaround for long line display v2

    折り返し時に画面の高さを超えるような長い行を表示したときに、 うまく表示や編集ができない件に対応しようとしてみたものです。

    #446 と違って、画面全体をスクロールできるようになりました。

    previous/next-line (C-p/C-n) - 対応済み previous/next-page (M-v/C-v) - 対応済み scroll-up/down (C-Up/Down) - 対応済み

    n 行まとめてスクロールする関数を作成したので、大分速くなりましたが、 それでも、折り返しの数が多くなると遅くなります (n=1000 とか) 。。。

    opened by Hamayama 20
  • patch for MSYS2/MinGW-w64 (using PDCurses)

    patch for MSYS2/MinGW-w64 (using PDCurses)


    Lem エディタを MSYS2/MinGW-w64 環境で動かすパッチを作成してみました。


    (Common Lisp はあまり理解していません。 Scheme モードを実現したいと思っているのですが、先は長そうです。。。)

    P.S. tetris が分離されてしまい少し残念です。 デバッグ中はそれを動かすことが目標でした。 (新規ユーザのためには、こういう機能がデフォルトであるとうれしいと思いますが。。。)

    opened by Hamayama 17
  • can't run on SBCL

    can't run on SBCL

    I try to follow installation instruction.

    I can install using roswell, then move it to quicklisp local-project, load it with quickload successfully but get an eror when running (lem:lem)

    CL-USER> (lem:lem)
    The variable LEM.TERM::*COLORS* is unbound.
    Backtrace for: #<SB-THREAD:THREAD "editor" RUNNING {10041CBFD3}>
    0: (LEM.TERM::GET-COLOR-RGB 119 119 119)
    1: (LEM.TERM::GET-COLOR "#777777")
    2: (LEM.TERM:GET-COLOR-PAIR "#777777" "#bbbbbb")
    4: ((:METHOD LEM::INTERFACE-PRINT-MODELINE ((EQL :NCURSES) T T T T T)) #<unavailable argument> #S(LEM::NCURSES-VIEW :SCRWIN #.(SB-SYS:INT-SAP #X7FFFE40144F0) :MODELINE-SCRWIN #.(SB-SYS:INT-SAP #X7FFFE401D540) :X 0 :Y 11 :WIDTH 103 :HEIGHT 11) 0 0 "                                                                                                       " LEM:MODELINE-INACTIVE) [fast-method]
    12: (SB-KERNEL:INTERNAL-ERROR #.(SB-SYS:INT-SAP #X7FFFEF535D40) #<unavailable argument>)
    13: ("foreign function: call_into_lisp")
    14: ("foreign function: funcall2")
    15: ("foreign function: interrupt_internal_error")
    16: ("foreign function: handle_trap")
    17: ("foreign function: #x414773")
    18: (LEM.TERM::GET-COLOR-RGB 0 0 0)
    19: (LEM.TERM::GET-COLOR "black")
    20: (LEM.TERM:GET-COLOR-PAIR "black" "#bbbbbb")
    25: (LEM-BASE:RUN-HOOKS ((#<FUNCTION (LAMBDA NIL :IN "/home/myusername/quicklisp/local-projects/lem/lem-ncurses/ncurses.lisp") {22778E0B}> . 0)))
    34: (SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE #<SB-THREAD:THREAD "editor" RUNNING {10041CBFD3}> NIL #<CLOSURE (LAMBDA NIL :IN BORDEAUX-THREADS::BINDING-DEFAULT-SPECIALS) {10041CBF7B}> (#<SB-THREAD:THREAD "editor" RUNNING {10041CBFD3}> #<SB-THREAD:THREAD "repl-thread" RUNNING {100314FFA3}> #<SB-THREAD:THREAD "auto-flush-thread" RUNNING {100314FDA3}> #<SB-THREAD:THREAD "swank-indentation-cache-thread" RUNNING {1002FA8173}> #<SB-THREAD:THREAD "reader-thread" RUNNING {1002FA8063}> #<SB-THREAD:THREAD "control-thread" RUNNING {1002FA7663}> #<SB-THREAD:THREAD "Swank Sentinel" RUNNING {1002D1E543}> #<SB-THREAD:THREAD "main thread" RUNNING {1001E06C33}>) NIL NIL NIL NIL)
    35: ("foreign function: call_into_lisp")
    36: ("foreign function: new_thread_trampoline")

    SBCL 1.3.14.debian SLIME 2.20 Quicklisp 2016-02-22

    Update 27.11.2017 9:50 PM

    I can run it with

    • cd /home/myusername/.roswell/bin/
    • ./lem
    opened by azzamsa 17
  • Unable to install on MacOS

    Unable to install on MacOS

    I installed Roswell on my M1 Mac via Homebrew, then ran ros install lem-project/lem. When I do that, I receive the following error:

    Installing from github lem-project/lem To load "lem": Load 1 ASDF system: lem ; Loading "lem" ..............[1/3] System 'lem' found. Loading the system..Aborted during step [1/3]. Unhandled CFFI:LOAD-FOREIGN-LIBRARY-ERROR in thread #<SB-THREAD:THREAD "main thread" RUNNING {7005E4A903}>: Unable to load foreign library (ASYNC-PROCESS). Error opening shared object "/Users/jonathan.bennett/.roswell/lisp/quicklisp/dists/quicklisp/software/async-process-20210531-git/static/x86_64/Darwin/": dlopen(/Users/jonathan.bennett/.roswell/lisp/quicklisp/dists/quicklisp/software/async-process-20210531-git/static/x86_64/Darwin/, 0x000A): tried: '/Users/jonathan.bennett/.roswell/lisp/quicklisp/dists/quicklisp/software/async-process-20210531-git/static/x86_64/Darwin/' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e')).

    Backtrace for: #<SB-THREAD:THREAD "main thread" RUNNING {7005E4A903}> 0: (SB-DEBUG::DEBUGGER-DISABLED-HOOK #<CFFI:LOAD-FOREIGN-LIBRARY-ERROR "Unable to load foreign library (~A).~% ~A" {7008A21213}> # :QUIT T) 1: (SB-DEBUG::RUN-HOOK SB-EXT:INVOKE-DEBUGGER-HOOK #<CFFI:LOAD-FOREIGN-LIBRARY-ERROR "Unable to load foreign library (~A).~% ~A" {7008A21213}>) 2: (INVOKE-DEBUGGER #<CFFI:LOAD-FOREIGN-LIBRARY-ERROR "Unable to load foreign library (~A).~% ~A" {7008A21213}>) 3: (ERROR CFFI:LOAD-FOREIGN-LIBRARY-ERROR :FORMAT-CONTROL "Unable to load foreign library (~A).~% ~A" :FORMAT-ARGUMENTS (ASYNC-PROCESS #<(SIMPLE-BASE-STRING 561) Error opening shared object "/Users/jonathan.bennett/.roswell/lisp/quicklisp/dists/quicklisp/software/async-process-20210531-git/static/x86_64/Darwin/": dlopen(/Users/jonathan.benn... {7008A20FCF}>)) 4: (CFFI::FL-ERROR "Unable to load foreign library (~A).~% ~A" ASYNC-PROCESS #<(SIMPLE-BASE-STRING 561) Error opening shared object "/Users/jonathan.bennett/.roswell/lisp/quicklisp/dists/quicklisp/software/async-process-20210531-git/static/x86_64/Darwin/": dlopen(/Users/jonathan.benn... {7008A20FCF}>) 5: (CFFI::REPORT-SIMPLE-ERROR ASYNC-PROCESS #<SIMPLE-ERROR "Error opening ~:[runtime~;shared object ~:*~S~]: ~A." {7008A0F653}>) 6: ((FLET CFFI::%DO-LOAD :IN CFFI::%DO-LOAD-FOREIGN-LIBRARY) #<CFFI:FOREIGN-LIBRARY ASYNC-PROCESS> ASYNC-PROCESS "") 7: (CFFI:LOAD-FOREIGN-LIBRARY ASYNC-PROCESS :SEARCH-PATH NIL) 8: (SB-FASL::LOAD-FASL-GROUP #S(SB-FASL::FASL-INPUT :STREAM #<SB-SYS:FD-STREAM for "file /Users/jonathan.bennett/.cache/common-lisp/sbcl-2.2.2-macosx-arm64/Users/jonathan.bennett/.roswell/lisp/quicklisp/dists/quicklisp/software/async-process-20210531-git/src/async-process.fasl" {70089E5493}> :TABLE #(191 #<PACKAGE "SB-IMPL"> SB-IMPL::%DEFPACKAGE "ASYNC-PROCESS" #1="CL" (#1#) #2="DELETE-PROCESS" #3="PROCESS-SEND-INPUT" #4="PROCESS-RECEIVE-OUTPUT" #5="PROCESS-ALIVE-P" #6="CREATE-PROCESS" (#2# #3# #4# #5# #6#) ...) :STACK #(0 CFFI:LOAD-FOREIGN-LIBRARY ASYNC-PROCESS ((:UNIX "") #7=(:WINDOWS #8="libasyncprocess.dll")) #7# #8# NIL (SB-INT:SFUNCTION NIL NULL) #<SB-KERNEL:FDEFN UIOP/OS:FEATUREP> #<SB-KERNEL:FDEFN SB-IMPL::%INIT-STRING-OUTPUT-STREAM> #<SB-KERNEL:FDEFN WRITE-STRING> #<SB-KERNEL:FDEFN PRINC> ...) :NAME-BUFFER #("FEATUREP-EQUALE-PATHNAME" "LOAD-FOREIGN-LIBRARYRARYAMES*") :DEPRECATED-STUFF NIL :SKIP-UNTIL NIL) NIL) 9: (SB-FASL::LOAD-AS-FASL #<SB-SYS:FD-STREAM for "file /Users/jonathan.bennett/.cache/common-lisp/sbcl-2.2.2-macosx-arm64/Users/jonathan.bennett/.roswell/lisp/quicklisp/dists/quicklisp/software/async-process-20210531-git/src/async-process.fasl" {70089E5493}> NIL NIL) 10: ((LABELS SB-FASL::LOAD-STREAM-1 :IN LOAD) #<SB-SYS:FD-STREAM for "file /Users/jonathan.bennett/.cache/common-lisp/sbcl-2.2.2-macosx-arm64/Users/jonathan.bennett/.roswell/lisp/quicklisp/dists/quicklisp/software/async-process-20210531-git/src/async-process.fasl" {70089E5493}> T) 11: (SB-FASL::CALL-WITH-LOAD-BINDINGS #<FUNCTION (LABELS SB-FASL::LOAD-STREAM-1 :IN LOAD) {104522AAB}> #<SB-SYS:FD-STREAM for "file /Users/jonathan.bennett/.cache/common-lisp/sbcl-2.2.2-macosx-arm64/Users/jonathan.bennett/.roswell/lisp/quicklisp/dists/quicklisp/software/async-process-20210531-git/src/async-process.fasl" {70089E5493}> T #<SB-SYS:FD-STREAM for "file /Users/jonathan.bennett/.cache/common-lisp/sbcl-2.2.2-macosx-arm64/Users/jonathan.bennett/.roswell/lisp/quicklisp/dists/quicklisp/software/async-process-20210531-git/src/async-process.fasl" {70089E5493}>) 12: (LOAD #P"/Users/jonathan.bennett/.cache/common-lisp/sbcl-2.2.2-macosx-arm64/Users/jonathan.bennett/.roswell/lisp/quicklisp/dists/quicklisp/software/async-process-20210531-git/src/async-process.fasl" :VERBOSE NIL :PRINT NIL :IF-DOES-NOT-EXIST T :EXTERNAL-FORMAT :DEFAULT) 13: (UIOP/UTILITY:CALL-WITH-MUFFLED-CONDITIONS #<FUNCTION (LAMBDA NIL :IN UIOP/LISP-BUILD:LOAD*) {70089E4B5B}> ("Overwriting already existing readtable ~S." #(#:FINALIZERS-OFF-WARNING :ASDF-FINALIZERS))) 14: ((SB-PCL::EMF ASDF/ACTION:PERFORM) # # #<ASDF/LISP-ACTION:LOAD-OP > #<ASDF/LISP-ACTION:CL-SOURCE-FILE "async-process" "async-process">) 15: ((LAMBDA NIL :IN ASDF/ACTION:CALL-WHILE-VISITING-ACTION)) 16: ((:METHOD ASDF/ACTION:PERFORM-WITH-RESTARTS (ASDF/LISP-ACTION:LOAD-OP ASDF/LISP-ACTION:CL-SOURCE-FILE)) #<ASDF/LISP-ACTION:LOAD-OP > #<ASDF/LISP-ACTION:CL-SOURCE-FILE "async-process" "async-process">) [fast-method] 17: ((:METHOD ASDF/ACTION:PERFORM-WITH-RESTARTS :AROUND (T T)) #<ASDF/LISP-ACTION:LOAD-OP > #<ASDF/LISP-ACTION:CL-SOURCE-FILE "async-process" "async-process">) [fast-method] 18: ((:METHOD ASDF/PLAN:PERFORM-PLAN (T)) #<ASDF/PLAN:SEQUENTIAL-PLAN {70052A2F93}>) [fast-method] 19: ((FLET SB-C::WITH-IT :IN SB-C::%WITH-COMPILATION-UNIT)) 20: ((:METHOD ASDF/PLAN:PERFORM-PLAN :AROUND (T)) #<ASDF/PLAN:SEQUENTIAL-PLAN {70052A2F93}>) [fast-method] 21: ((:METHOD ASDF/OPERATE:OPERATE (ASDF/OPERATION:OPERATION ASDF/COMPONENT:COMPONENT)) #<ASDF/LISP-ACTION:LOAD-OP > #<ASDF/SYSTEM:SYSTEM "lem"> :PLAN-CLASS NIL :PLAN-OPTIONS NIL) [fast-method] 22: ((SB-PCL::EMF ASDF/OPERATE:OPERATE) # # #<ASDF/LISP-ACTION:LOAD-OP > #<ASDF/SYSTEM:SYSTEM "lem"> :VERBOSE NIL) 23: ((LAMBDA NIL :IN ASDF/OPERATE:OPERATE)) 24: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (T T)) #<ASDF/LISP-ACTION:LOAD-OP > #<ASDF/SYSTEM:SYSTEM "lem"> :VERBOSE NIL) [fast-method] 25: ((SB-PCL::EMF ASDF/OPERATE:OPERATE) # # ASDF/LISP-ACTION:LOAD-OP "lem" :VERBOSE NIL) 26: ((LAMBDA NIL :IN ASDF/OPERATE:OPERATE)) 27: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (T T)) ASDF/LISP-ACTION:LOAD-OP "lem" :VERBOSE NIL) [fast-method] 28: (ASDF/SESSION:CALL-WITH-ASDF-SESSION #<FUNCTION (LAMBDA NIL :IN ASDF/OPERATE:OPERATE) {70052A2D8B}> :OVERRIDE T :KEY NIL :OVERRIDE-CACHE T :OVERRIDE-FORCING NIL) 29: ((LAMBDA NIL :IN ASDF/OPERATE:OPERATE)) 30: (ASDF/SESSION:CALL-WITH-ASDF-SESSION #<FUNCTION (LAMBDA NIL :IN ASDF/OPERATE:OPERATE) {70052A2C7B}> :OVERRIDE NIL :KEY NIL :OVERRIDE-CACHE NIL :OVERRIDE-FORCING NIL) 31: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (T T)) ASDF/LISP-ACTION:LOAD-OP "lem" :VERBOSE NIL) [fast-method] 32: (ASDF/OPERATE:LOAD-SYSTEM "lem" :VERBOSE NIL) 33: (QUICKLISP-CLIENT::CALL-WITH-MACROEXPAND-PROGRESS #<FUNCTION (LAMBDA NIL :IN QUICKLISP-CLIENT::APPLY-LOAD-STRATEGY) {70052A2AEB}>) 34: (QUICKLISP-CLIENT::AUTOLOAD-SYSTEM-AND-DEPENDENCIES "lem" :PROMPT NIL) 35: ((:METHOD QL-IMPL-UTIL::%CALL-WITH-QUIET-COMPILATION (T T)) # #<FUNCTION (FLET QUICKLISP-CLIENT::QL :IN QUICKLISP-CLIENT:QUICKLOAD) {70052A298B}>) [fast-method] 36: ((:METHOD QL-IMPL-UTIL::%CALL-WITH-QUIET-COMPILATION :AROUND (QL-IMPL:SBCL T)) #<QL-IMPL:SBCL {70052A29F3}> #<FUNCTION (FLET QUICKLISP-CLIENT::QL :IN QUICKLISP-CLIENT:QUICKLOAD) {70052A298B}>) [fast-method] 37: ((:METHOD QUICKLISP-CLIENT:QUICKLOAD (T)) "lem" :PROMPT NIL :SILENT NIL :VERBOSE NIL) [fast-method] 38: (QL-DIST::CALL-WITH-CONSISTENT-DISTS #<FUNCTION (LAMBDA NIL :IN QUICKLISP-CLIENT:QUICKLOAD) {70052A295B}>) 39: (ROSWELL.INSTALL:INSTALL-SYSTEM-SCRIPT "lem") 40: (ROSWELL.INSTALL:INSTALL-SYSTEM-IF-PROBED "lem") 41: (ROSWELL.INSTALL:INSTALL NIL) 42: (SB-INT:SIMPLE-EVAL-IN-LEXENV (APPLY (QUOTE ROS.SCRIPT.INSTALL.3671936092::MAIN) ROSWELL:ARGV) #) 43: (SB-INT:SIMPLE-EVAL-IN-LEXENV (ROSWELL:QUIT (APPLY (QUOTE ROS.SCRIPT.INSTALL.3671936092::MAIN) ROSWELL:ARGV)) #) 44: (SB-EXT:EVAL-TLF (ROSWELL:QUIT (APPLY (QUOTE ROS.SCRIPT.INSTALL.3671936092::MAIN) ROSWELL:ARGV)) NIL NIL) 45: ((LABELS SB-FASL::EVAL-FORM :IN SB-INT:LOAD-AS-SOURCE) (ROSWELL:QUIT (APPLY (QUOTE ROS.SCRIPT.INSTALL.3671936092::MAIN) ROSWELL:ARGV)) NIL) 46: (SB-INT:LOAD-AS-SOURCE #<CONCATENATED-STREAM :STREAMS NIL {70052A2533}> :VERBOSE NIL :PRINT NIL :CONTEXT "loading") 47: ((LABELS SB-FASL::LOAD-STREAM-1 :IN LOAD) #<CONCATENATED-STREAM :STREAMS NIL {70052A2533}> NIL) 48: (SB-FASL::CALL-WITH-LOAD-BINDINGS #<FUNCTION (LABELS SB-FASL::LOAD-STREAM-1 :IN LOAD) {104520A7B}> #<CONCATENATED-STREAM :STREAMS NIL {70052A2533}> NIL #<CONCATENATED-STREAM :STREAMS NIL {70052A2533}>) 49: (LOAD #<CONCATENATED-STREAM :STREAMS NIL {70052A2533}> :VERBOSE NIL :PRINT NIL :IF-DOES-NOT-EXIST T :EXTERNAL-FORMAT :DEFAULT) 50: ((FLET ROSWELL::BODY :IN ROSWELL:SCRIPT) #<SB-SYS:FD-STREAM for "file /opt/homebrew/Cellar/roswell/" {70052A2183}>) 51: (ROSWELL:SCRIPT "/opt/homebrew/Cellar/roswell/" "lem-project/lem") 52: (ROSWELL:RUN ((:EVAL "(ros:quicklisp)") (:SCRIPT "/opt/homebrew/Cellar/roswell/" "lem-project/lem") (:QUIT NIL))) 53: (SB-INT:SIMPLE-EVAL-IN-LEXENV (ROSWELL:RUN (QUOTE ((:EVAL "(ros:quicklisp)") (:SCRIPT "/opt/homebrew/Cellar/roswell/" "lem-project/lem") (:QUIT NIL)))) #) 54: (EVAL (ROSWELL:RUN (QUOTE ((:EVAL "(ros:quicklisp)") (:SCRIPT "/opt/homebrew/Cellar/roswell/" "lem-project/lem") (:QUIT NIL))))) 55: (SB-IMPL::PROCESS-EVAL/LOAD-OPTIONS ((:EVAL . "(progn #-ros.init(cl:load "/opt/homebrew/Cellar/roswell/"))") (:EVAL . "(ros:run '((:eval"(ros:quicklisp)")(:script "/opt/homebrew/Cellar/roswell/""lem-project/lem")(:quit ())))"))) 56: (SB-IMPL::TOPLEVEL-INIT) 57: ((FLET SB-UNIX::BODY :IN SB-IMPL::START-LISP)) 58: ((FLET "WITHOUT-INTERRUPTS-BODY-3" :IN SB-IMPL::START-LISP)) 59: (SB-IMPL::START-LISP)

    unhandled condition in --disable-debugger mode, quitting ; ; compilation unit aborted ; caught 1 fatal ERROR condition

    opened by jonathanabennett 15
  • [vi-mode] Not implemented / unexpected keybinds

    [vi-mode] Not implemented / unexpected keybinds

    • [x] :qa がない
    • [x] H M L (ウィンドウ内カーソル移動)
    • [x] e と b の移動の範囲が広い
      • → hoge/fuga/piyo の行頭にいるときに e 押したら hoge/ の位置場所に移動してほしい
    • [x] c ç³» (削除してINSERTモードに入るやつ) がない
      • ex) cc / cj / c$ / C
    • [x] VISUALモードのときに v 押したらVISUALモードから抜けてほしい
    • [x] VISUALモードで y (yank) がきかない
    • [x] VISUALモードで d はできるけど、成功してもVISUALモードを抜けてくれない
    • [x] COMMANDモードで == でカレント行インデント修正ができない (INSERTに入ってTAB押すしかない)
    • [x] :e でファイル名が補完されない (C-x C-f では補完される)
    • [x] :%s/old/new が全体置換でなくカーソル行置換になっている
    • [x] ↑で置換したあと、 : M-p で履歴に :%s ... が出ない
    • [x] zz (recenter) がない
    • [x] f F (行一文字検索) がない
    • [x] Multi line deletion with dj and d2j
    • [ ] daw caw: Delete a word at the cursor
    • [x] Shell command exection with :!
    • [x] gk gj: Moves to displayed above/bottom line
    • [x] Multi line indentation with like =%, =j and like that
    • [x] Fix indentation (=) in visual mode
    • [x] Line deletion (dd) at the last line
    • [x] Evil's yank-pop / yank-pop-next with C-p and C-n
    • [x] :wqa :wqa!
    • [x] gJ for joining lines without spaces
    • [x] t T (行一文字検索 手前) がない
    • [x] Backspace deletes a character even in COMMAND mode
    • [x] Wrong region of deletion by de & dw at EOL or BOL.
    • [x] s for deleting the cursor char and change to insert mode (like xi).
    • [ ] C-o to move to the previous cursor position.
    • [ ] q: Keyboard macro
    • [ ] I and A in rectangle visual mode.
    • [x] g_
    • [ ] The point to move with b B is not compatible with e W
    opened by fukamachi 12
  • opening a LISP file or trying to load a (major) mode freezes editor

    opening a LISP file or trying to load a (major) mode freezes editor

    Whenever i try to load a lisp file, or start a mode (slime or lisp-mode), the editor freezes completely and i can only close the terminal window.

    Working on Arch Linux /w XTerm, SBCL 1.4.16 ... any hints ?

    Best, N

    opened by the-drunk-coder 11
  • lisp-compile-defun does not work for connection to CCL when there is active

    lisp-compile-defun does not work for connection to CCL when there is active "self connection"

    I'm using Lem from 7fb9c99d9f465efa31de4fcb1fb7615f937de541 commit (latest for today).

    The problem is that when I'm connecting from the LEM to a separate Lisp process, C-c C-c evals code in a wrong connection.

    NOTE: This problem is not possible to reproduce, if outer process is SBCL. Bug exists only on CCL.

    To reproduce this issue

    Start a separate CCL lisp process with a swank server

    (here I'm starting latest 1.12 build because 1.11 does not work on a recent OSX)

    rlwrap ./dx86cl64 -e '(load "/Users/art/quicklisp/setup.lisp")' -e '(ql:quickload :swank)'
    (swank:create-server :port 5009  :style :spawn :dont-close t)

    Start the Lem

    And connect to the 5009 port using a slime-connect command.

    Then call slime-self-connect.

    Switch back to ccl-bin

    Call lisp-connection-list, select the second line with CCL interpreter and hit Return (Enter).

      hostname  port  pid   name version                                    command
    * 51499 SELF  sbcl 1.5.8                                      NIL 5009  52489 ccl  Version 1.12-dev (v1.12-dev.5) DarwinX8664 NIL

    Create a foo.lisp

    With following content:

    (defparameter *foo* "bar")

    Eval the line

    Hit C-c C-c on this line.

    Check the variable in the REPL

    Switch back to the REPL and enter:


    You should receive a

    Unbound variable: *FOO*
    opened by svetlyak40wt 10
  • fix M-x crash problem for frontend based on electron.

    fix M-x crash problem for frontend based on electron.

    Tested on macOS™. On the os, key sequence Alt-option + X generates M-≈ but not M-x by default. that causes lem-rpc crashed. There're few resorts we can take to resolve this issue on the application layer, or accurately a browser context. Nevertheless remapping the code to the value is a way.

    opened by picospuch 10
  • Ctrl-k(kill line)の動作が遅い

    Ctrl-k(kill line)の動作が遅い

    こんにちは。 以下の環境でのlemのCtrl-Kを押した時の行が削除されるまでの時間が他のエディタに比べて遅いです。

    | OS | macOS | | -|-| | Verison | 010a480 |




    opened by tani 9
  • [バグ] scratchバッファで何度かC-jするとハングする

    [バグ] scratchバッファで何度かC-jするとハングする



    1. lemを立ち上げる
    2. 1と入力する
    3. C-jを8回繰り返す


    • sbcl 1.2.15
    • lem 28e292a518f891aac2ca2c2f661e91714c023fe9
    • Mac Darwin 14.5.0 Darwin Kernel Version 14.5.0: Wed Jul 29 02:26:53 PDT 2015; root:xnu-2782.40.9~1/RELEASE_X86_64 x86_64
    opened by KeenS 9
  • Improper resizing of Electron window with tiling window manager

    Improper resizing of Electron window with tiling window manager

    When I load lem-electron while using a tiling window manager, the lem-electron window will constantly attempt to resize itself. I suspect that the problem arises from lem-electron being unable to display fractional columns or rows (and not having margins when the chosen window size does not correspond to an exact column/row size).

    The constant resizing results in flashing visual artifacts that make the electron frontend unusable, unless I disable the tiling window manager.

    lem using ncurses in a terminal does not suffer from the same issue.

    opened by kjinho 0
  • v1.9.2(Dec 3, 2021)

    • When trying to open files that could not be recognized as text files, abort and show message.
    • define-command changed
      • Users have to change their own lem configuration to fit for this version. define-command arg-descriptor doesn’t have compatibility with old versions.
      • Generate class when defining commands. advice-classes can be added because of it.
      • When you redefine the same name command with a different form, an error will occur.
    • syntax-highlight for lisp-mode changed. Now you can get proper highlighting for define-xxxx . Before this version, it was only highlighted until define-.
    • slime command becomes non-blocking. While connecting swank-server animation on mode-line would be shown.
    • Fix if a key is already bound; attempting to override that binding produces an error. (by Gordon Brown )
    • Add C-M-y (kill-around-form)
    • Rename editor variable truncate-lines to line-wrap.
    • Transparency can be dealt with by overlay. When you mark region, you can see the foreground attribute still be seen. You can see the difference when you use directory-mode’s underlined line.
    • Optimize for less redrawing.
    • Refactoring and adding tests and a lot of fix bugs.

    • バイナリファイルを開こうとしたときに失敗した場合メッセージを出してabortするようにした。
    • define-commandの変更
      • arg-descriptorの変更によって過去との互換性が無くなった。
      • classを定義するようになった。結果としてadvice-classesを追加できるようになった(selection-mode/selection-mode.lisp参照)
      • 同名のコマンドを再定義するときに内容が違っているとリスタートエラーを出すようになった。
    • lisp-modeのシンタックスハイライトでdefine-xxxxのdefine-までしか色がつかなかかったのを修正。
    • slimeコマンド中にブロックしないようになった。ロード中にモードラインにアニメーションが表示されるようになった。
    • define-keyで単一のキーの定義の後に単一キーで始まる複数キー定義をした際にエラーが出ていたのを修正し上書きする挙動に直した。
    • C-M-y (kill-around-form) を追加
    • エディタ変数truncate-linesをline-wrapに変更
    • オーバーレイを透過させるようになった。(範囲選択をした際や、directory-modeの下線のバックグラウンドカラーが維持されるようになった。)
    • 再描画の最適化
    • 沢山のリファクタリングとテストの追加そしてバグの修正。
    Source code(tar.gz)
    Source code(zip)
    lem-1.9.2-darwin-arm64.tar.bz2(15.78 MB)
    lem-1.9.2-darwin-x86_64.tar.bz2(19.74 MB)
    lem-1.9.2-linux-x86_64.tar.bz2(20.24 MB)
  • v1.9.1(Jul 22, 2021)

    • Add source location info for define-attribute.
    • Show more keys for M-x describe-bindings
    • [vi-mode] improve goto-line
    • Add get-prompt-input-string interface.
    • improve C-x space to get in to rectangle-mode then C-t to rectangle-string are implemented.
    • Fix bug 'M-x isearch' highlights. the last candidate tend not to highlight.
    • Fix bug for example 'M-x isearch' find 'some' then F2(or `M-x isearch-replace-highlight') and put 'somesome' in the replace dialog to get into infinite loop.
    • improve prompt for 'M-x query-replace'.
    Source code(tar.gz)
    Source code(zip)
  • v1.5(Nov 11, 2018)

    • Added rust-mode
    • Improve paredit-mode
    • Improve vi-mode
    • Added support for input method to electron-frontend
    • Added support for escape sequence to repl of lisp
    • Added encoding
    • Added calc-mode
    • Added indent of xml-mode and js-mode
    • Added support for jsx
    • Added html-mode
    • Added “peace of paper” like symbolics
    • Added relative indication for line-numbers
    • Added nim-mode
    • Addes ncurses support for windows
    • Change directory structure
    • Added support for asynchronous process
    • Added lsp-mode (experimental)
    • Added scheme-mode
    • Added diff-mode
    • Added file name completion for repl of lisp
    • Added repl of python-mode and scheme-mode
    • Added support EastAsianWidth 11.0.0 fullwidth characters
    Source code(tar.gz)
    Source code(zip)
    lem-ncurses-darwin-x86-64(15.70 MB)
    lem-ncurses-linux-x86-64(66.70 MB)
  • v1.4(Aug 14, 2018)

    • vi-mode slightly improved.
    • Added css-mode.
    • Auto-save-mode not only backup file but save file automatically.
    • Implement error resistant file encoding.
    • Implement js-mode indentation.
    • Partial implementation of paredit.
    Source code(tar.gz)
    Source code(zip)
  • v1.2(Feb 14, 2018)

    • Added xml-mode
    • Rewrite dired and rename it to directory-mode
    • Added windows support for backend
    • Added hooks for syntax highlighting
    • Added roswell script support at C-c C-l (lisp-load-file)
    • Added site-init
    • Added load-library command
    • Added commands of vi-mode
    • Added fbar to contrib
    • Added some frontend
    • Added lispworks support
    • Imporved frontend and backend interfaces
    • Fixed some bugs
    Source code(tar.gz)
    Source code(zip)
  • v1.1(Dec 13, 2017)

    • Change universal-argument to minor-mode
    • Added electron frontend
    • Added vi-mode
    • Improved expression of key bind
    • Change to distinguish between escape key and alt key
    Source code(tar.gz)
    Source code(zip)
Clio is an embryonic experiment in UI for Common Lisp programs.

Clio Clio is an embryonic experiment in UI for Common Lisp programs. Building and running Clio Make sure you have the prerequisites: Visual Studio 201

mikel evins 0 Feb 26, 2022
Simple text editor in C++ - Simple editor built upon kilo editor.

GUMBO editor Simple editor built upon kilo editor. Still big work in progress although this is just fun side project to learn more C/C++. From 0.0.2->

Filip Ivanušec 3 Sep 15, 2021
A light lisp written in C++

wisp A light lisp written in C++ Why write a lisp? Lisp is one of those niche, beautiful languages that people only really use to either Write a lisp

adam mcdaniel 162 Jul 17, 2022
tree-sitter grammar for emacs lisp

Tree-sitter Grammar for Emacs Lisp A simple tree-sitter grammar for elisp. Syntax supported: Atoms (integers, floats, strings, characters, symbols) Li

Wilfred Hughes 20 Jun 17, 2022
aLisp - a custom Lisp in C

aLisp aims to become a hackable, embeddable, reasonably fast interpreted custom Lisp implemented in portable C.

Andreas Nilsson 7 Jan 10, 2022
CAAR is an attempt at writing a modern Lisp machine.

CAAR - The modern lisp machine CAAR is an attempt at writing a modern Lisp machine. The goal of this project is to be able to run a somewhat functiona

Abbix 10 Jun 19, 2022
A Fingerprint Door Lock using a microprocessor named Arduino UNO and programming through Arduino IDE

INSTRUCTIONS - The codes for the Fingerprint Door lock are present in the Code For Fingerprint Door Lock folder The instructions of how to operate the

Akhil Sahukaru 15 Mar 3, 2022
Some sketches for the VL53L5CX ranging camera for use with the Arduino IDE

VL53L5CX Some examples for the ST's VL53L5CX 8 x 8 pixel ranging camera using Simon Levy's Arduino library and Seth Bonn's multi-byte I2C read and wri

Kris Winer 17 May 4, 2022
a work in progress try to make an IDE with the CSFML

EatSleepCode A work in progress for educational purpose. To help better understanding the CSFML lib. Installation clone this repo and do make Use case

Saverio 2 Jul 9, 2022
Tactile-Arcade-Games - Wrote a C program comprised of four separate games that run in a loop using the PSoC 5LP board and Cypress IDE.

Tactile-Arcade-Games - Wrote a C program comprised of four separate games that run in a loop using the PSoC 5LP board and Cypress IDE. Used two potentiometers, two ADCs to convert their voltages to digital values, a PWM to drive two servos, an 8x8 RGB LED matrix, 40 digital output pins and 8 power MOSFETS to control the matrix, and a character LCD display.

null 2 Dec 24, 2021
A lightweight & cross-platform IDE supporting the most recent C++ standards

This project has moved to juCi++ a lightweight, platform independent C++-IDE with support for C++11, C++14 and C++17

cppit (zippit) 891 Jul 28, 2022
Lightweight, cross-platform & full-featured shader IDE

SHADERed is a lightweight tool for writing and debugging shaders. It is easy to use, open source, cross-platform (runs on Windows, Linux & Web).

dfranx 3.6k Aug 4, 2022
Bluetooth LE Keyboard library for the ESP32 (Arduino IDE compatible)

ESP32 BLE Keyboard library This library allows you to make the ESP32 act as a Bluetooth Keyboard and control what it does. You might also be intereste

null 1.3k Aug 6, 2022
ESP-32 CAM implementation of a Bird classifier using Arduino IDE

Bird-Classifier ESP-32 CAM implementation of a Bird classifier using Arduino IDE For the file server to run, you also need to have the ESP32 SD File M

null 3 Mar 28, 2022
An AI for playing NES Tetris at a high level. Based primarily on search & heuristic, with high quality board evaluation through value iteration.

StackRabbit An AI that plays NES Tetris at a high level. Primarily based on search & heuristic, with high-quality board eval through value iteration.

Greg Cannon 212 Jul 27, 2022
An eventing framework for building high performance and high scalability systems in C.

NOTE: THIS PROJECT HAS BEEN DEPRECATED AND IS NO LONGER ACTIVELY MAINTAINED As of 2019-03-08, this project will no longer be maintained and will be ar

Meta Archive 1.7k Jul 28, 2022
Common Sensor API for the BMA2 family of sensors

BMA2 Sensor API Sensor overview The BMA2 is a triaxial, low-g acceleration sensor with digital output. An ASIC in the sensor converts the output of a

Bosch Sensortec 9 Sep 12, 2021
Common Device Source For Xiaomi Redmi Note 5 Pro (whyred)

The Redmi Note 5 Pro (codenamed "whyred") are high-end mid-range smartphones from Xiaomi announced and released in February 2018. Device specification

Yash Biyani 0 Dec 22, 2021
A repository that includes common helper functions for writing applications in the DPDK. I will be using this for my future projects in the DPDK.

The DPDK Common (WIP) Description This project includes helpful functions and global variables for developing applications using the DPDK. I am using

Christian Deacon 11 May 31, 2022