Giter Site home page Giter Site logo

lem-project / lem Goto Github PK

View Code? Open in Web Editor NEW
2.1K 67.0 152.0 94.87 MB

Common Lisp editor/IDE with high expansibility

Home Page: http://lem-project.github.io/

License: MIT License

Common Lisp 99.93% NewLisp 0.01% Makefile 0.03% Shell 0.02% Dockerfile 0.01%
common-lisp editor text-editor

lem's Introduction

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

Build Status Backers on Open Collective Sponsors on Open Collective GitHub Sponsors

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.

Lem supports other programming languages thanks to its built-in LSP client. You can choose between an Emacs and a Vim mode.

Other Lem features include:

  • a project explorer tree view
  • project-aware commands
  • interactive grep and git interfaces
  • multiple cursors
  • tetris
  • and more…

Install

With Docker (ncurses version):

$ docker run --rm -it ghcr.io/lem-project/lem:latest

Lem-ncurses

Lem-sdl2

Screenshots

Terminal  

Sdl2  

Contributors

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

Backers

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

Sponsors

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

License

MIT

lem's People

Contributors

cxxxr avatar frejanordsiek avatar fukamachi avatar garlic0x1 avatar github-actions[bot] avatar gos-k avatar hamayama avatar homo-carbonis avatar ilya-fiveisky avatar jcs090218 avatar jessymilare avatar kchanqvq avatar kenoss avatar koji-kojiro avatar myaosato avatar mychris avatar nz-tcoder avatar picospuch avatar resttime avatar sasanidas avatar seanfarley avatar sgr avatar sgr-aoba avatar snmsts avatar stacksmith avatar svetlyak40wt avatar t-cool avatar t-sin avatar theangelperalta avatar vindarel avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

lem's Issues

c-mode

I should assign it to me.

自分でやれ…って奴です…

Floating windows redraws; cleanup after closing

Anomalies:

  • Floating windows do not redraw last column (is it intentional? Drop shadow?)
  • redraw after a floating window is canceled does not refresh the modeline!

To reproduce:

  • start lem-xcb
  • key in <M-x>slim<TAB>
  • The completion menu pops up. Note that the view is 20 glyphs wide; after clear-eol only 19 characters are written! Note the black hole on the modeline at the last position (19).
  • key in <Esc> to cancel.
    The modeline is not updated:
xcb: delete-view #<TEXTVIEW {1005238503}> 
xcb: interface-clear-eol view #<TEXTVIEW {100415B123}> x: 0 y 1
xcb: interface-redraw after: view #<TEXTVIEW {100415B123}> : NIL
xcb: interface-clear-eol view #<TEXTVIEW {10042D8C43}> x: 0 y 0
xcb: interface-print #<TEXTVIEW {10042D8C43}> (0 0) |M-x | attr:MINIBUFFER-PROMPT-ATTRIBUTE 
xcb: interface-print #<TEXTVIEW {10042D8C43}> (4 0) |slim| attr:NIL 
xcb: interface-print #<TEXTVIEW {10042D8C43}> (8 0) | | attr:CURSOR 
xcb: interface-redraw after: view #<TEXTVIEW {10042D8C43}> : T
xcb: interface-redraw-display: 
xcb: interface-clear-eol view #<TEXTVIEW {100415B123}> x: 0 y 1
xcb: interface-redraw after: view #<TEXTVIEW {100415B123}> : NIL
xcb: interface-clear-eol view #<TEXTVIEW {10042D8C43}> x: 0 y 0
xcb: interface-print #<TEXTVIEW {10042D8C43}> (0 0) |Key not found: Escape| attr:NIL 
xcb: interface-print #<TEXTVIEW {10042D8C43}> (21 0) | | attr:CURSOR 
xcb: interface-redraw after: view #<TEXTVIEW {10042D8C43}> : T
xcb: interface-redraw-display: 
xcb: interface-clear-eol view #<TEXTVIEW {100415B123}> x: 0 y 1
xcb: interface-redraw after: view #<TEXTVIEW {100415B123}> : NIL
xcb: interface-clear-eol view #<TEXTVIEW {10042D8C43}> x: 0 y 0
xcb: interface-print #<TEXTVIEW {10042D8C43}> (0 0) |M-x | attr:MINIBUFFER-PROMPT-ATTRIBUTE 
xcb: interface-print #<TEXTVIEW {10042D8C43}> (4 0) |slim| attr:NIL 
xcb: interface-print #<TEXTVIEW {10042D8C43}> (8 0) | | attr:CURSOR 
xcb: interface-redraw after: view #<TEXTVIEW {10042D8C43}> : T
xcb: interface-redraw-display: 
xcb: interface-clear-eol view #<TEXTVIEW {100415B123}> x: 0 y 1
xcb: interface-redraw after: view #<TEXTVIEW {100415B123}> : NIL
xcb: interface-clear-eol view #<TEXTVIEW {10042D8C43}> x: 0 y 0
xcb: interface-print #<TEXTVIEW {10042D8C43}> (0 0) |M-x | attr:MINIBUFFER-PROMPT-ATTRIBUTE 
xcb: interface-print #<TEXTVIEW {10042D8C43}> (4 0) |slim| attr:NIL 
xcb: interface-print #<TEXTVIEW {10042D8C43}> (8 0) | | attr:CURSOR 
xcb: interface-redraw after: view #<TEXTVIEW {10042D8C43}> : T
xcb: interface-redraw-display: 
xcb: interface-clear-eol view #<TEXTVIEW {100415B123}> x: 0 y 1
xcb: interface-redraw after: view #<TEXTVIEW {100415B123}> : NIL
xcb: interface-clear-eol view #<TEXTVIEW {10042D8C43}> x: 0 y 0
xcb: interface-print #<TEXTVIEW {10042D8C43}> (0 0) |M-x | attr:MINIBUFFER-PROMPT-ATTRIBUTE 
xcb: interface-print #<TEXTVIEW {10042D8C43}> (4 0) |slim| attr:NIL 
xcb: interface-print #<TEXTVIEW {10042D8C43}> (8 0) | | attr:CURSOR 
xcb: interface-redraw after: view #<TEXTVIEW {10042D8C43}> : T
xcb: interface-redraw-display: 

Doesn't work on chromebook(armv7l)

HI,
I' tried to use lem on my chromebook flip(C100PA), but it failed...

Stack trace:

Unhandled BORDEAUX-THREADS::BORDEAUX-MP-CONDITION:
                                                    There is no thread support in this instance.

               Backtrace for: #<SB-THREAD:THREAD "main thread" RUNNING {5261E001}>
 0: (SB-DEBUG::DEBUGGER-DISABLED-HOOK #<BORDEAUX-THREADS::BORDEAUX-MP-CONDITION {52850561}> #<unavailable argument>)
                                   1: (SB-DEBUG::RUN-HOOK SB-EXT:*INVOKE-DEBUGGER-HOOK* #<BORDEAUX-THREADS::BORDEAUX-MP-CONDITION {52850561}>)
                                                             2: (INVOKE-DEBUGGER #<BORDEAUX-THREADS::BORDEAUX-MP-CONDITION {52850561}>)
                                                      3: (ERROR #<BORDEAUX-THREADS::BORDEAUX-MP-CONDITION {52850561}>)
                                     4: (BORDEAUX-THREADS::%MAKE-THREAD #<unavailable argument> #<unavailable argument>)
                                       5: ((:METHOD LEM::INTERFACE-INVOKE ((EQL :NCURSES) T)) #<unavailable argument> #<CLOSURE (LAMBDA (&OPTIONAL LEM::INPUT-THREAD) :IN LEM:LEM) {526ACA6D}>) [fast-method]
                                           6: (SB-INT:SIMPLE-EVAL-IN-LEXENV (APPLY (QUOTE MAIN) ROSWELL:*ARGV*) #<NULL-LEXENV>)
                                              7: (SB-INT:SIMPLE-EVAL-IN-LEXENV (ROSWELL:QUIT (APPLY (QUOTE MAIN) ROSWELL:*ARGV*)) #<NULL-LEXENV>)
                                                                8: (SB-EXT:EVAL-TLF (ROSWELL:QUIT (APPLY (QUOTE MAIN) ROSWELL:*ARGV*)) NIL NIL)
                                                              9: ((LABELS SB-FASL::EVAL-FORM :IN SB-INT:LOAD-AS-SOURCE) (ROSWELL:QUIT (APPLY (QUOTE MAIN) ROSWELL:*ARGV*)) NIL)
             10: (SB-INT:LOAD-AS-SOURCE #<CONCATENATED-STREAM :STREAMS NIL {526268F9}> :VERBOSE NIL :PRINT NIL :CONTEXT "loading")
                                                 11: ((FLET SB-FASL::LOAD-STREAM :IN LOAD) #<CONCATENATED-STREAM :STREAMS NIL {526268F9}> NIL)
                                                             12: (LOAD #<CONCATENATED-STREAM :STREAMS NIL {526268F9}> :VERBOSE NIL :PRINT NIL :IF-DOES-NOT-EXIST T :EXTERNAL-FORMAT :DEFAULT)
                           13: ((FLET ROSWELL::BODY :IN ROSWELL:SCRIPT) #<SB-SYS:Sun Sep 17 16:02:42 JST 2017

Versions:

$ ros version
roswell 17.8.9.81(a8c9c50)
build with gcc (GCC) 4.9.4
libcurl=7.55.1
Quicklisp=2017-03-06
Dist=2017-08-30
lispdir='/usr/local/etc/roswell/'
homedir='/home/chronos/user/.roswell/'

Thanks.

Installation Issue on lem-frontend-electron

I cannot install lem-frontend-electron using npm.

$ node -v
v8.9.3
$ npm -v
5.5.1
$ npm install -g cxxxr/lem
npm ERR! code ENOPACKAGEJSON
npm ERR! package.json Non-registry package missing package.json: github:cxxxr/lem.
npm ERR! package.json npm can't find a package.json file in your current directory.

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/t-cool/.npm/_logs/2018-03-10T00_43_59_903Z-debug.log

2018-03-10T00_43_59_903Z-debug.log

0 info it worked if it ends with ok
1 verbose cli [ '/Users/t-cool/.nvm/versions/node/v8.9.3/bin/node',
1 verbose cli   '/Users/t-cool/.nvm/versions/node/v8.9.3/bin/npm',
1 verbose cli   'install',
1 verbose cli   '-g',
1 verbose cli   'cxxxr/lem' ]
2 info using [email protected]
3 info using [email protected]
4 verbose npm-session fdb11761c3557680
5 silly install loadCurrentTree
6 silly install readGlobalPackageData
7 silly fetchPackageMetaData error for github:cxxxr/lem Non-registry package missing package.json: github:cxxxr/lem.
8 verbose stack Error: Non-registry package missing package.json: github:cxxxr/lem.
8 verbose stack     at BB.join (/Users/t-cool/.nvm/versions/node/v8.9.3/lib/node_modules/npm/node_modules/pacote/lib/finalize-manifest.js:160:23)
8 verbose stack     at tryCatcher (/Users/t-cool/.nvm/versions/node/v8.9.3/lib/node_modules/npm/node_modules/bluebird/js/release/util.js:16:23)
8 verbose stack     at Holder$5._callFunction (eval at generateHolderClass (/Users/t-cool/.nvm/versions/node/v8.9.3/lib/node_modules/npm/node_modules/bluebird/js/release/join.js:92:16), <anonymous>:14:44)
8 verbose stack     at Holder$5.checkFulfillment (eval at generateHolderClass (/Users/t-cool/.nvm/versions/node/v8.9.3/lib/node_modules/npm/node_modules/bluebird/js/release/join.js:92:16), <anonymous>:29:30)
8 verbose stack     at Promise.eval (eval at thenCallback (/Users/t-cool/.nvm/versions/node/v8.9.3/lib/node_modules/npm/node_modules/bluebird/js/release/join.js:14:16), <anonymous>:6:20)
8 verbose stack     at Promise._settlePromise (/Users/t-cool/.nvm/versions/node/v8.9.3/lib/node_modules/npm/node_modules/bluebird/js/release/promise.js:566:21)
8 verbose stack     at Promise._settlePromise0 (/Users/t-cool/.nvm/versions/node/v8.9.3/lib/node_modules/npm/node_modules/bluebird/js/release/promise.js:614:10)
8 verbose stack     at Promise._settlePromises (/Users/t-cool/.nvm/versions/node/v8.9.3/lib/node_modules/npm/node_modules/bluebird/js/release/promise.js:693:18)
8 verbose stack     at Async._drainQueue (/Users/t-cool/.nvm/versions/node/v8.9.3/lib/node_modules/npm/node_modules/bluebird/js/release/async.js:133:16)
8 verbose stack     at Async._drainQueues (/Users/t-cool/.nvm/versions/node/v8.9.3/lib/node_modules/npm/node_modules/bluebird/js/release/async.js:143:10)
8 verbose stack     at Immediate.Async.drainQueues (/Users/t-cool/.nvm/versions/node/v8.9.3/lib/node_modules/npm/node_modules/bluebird/js/release/async.js:17:14)
8 verbose stack     at runCallback (timers.js:789:20)
8 verbose stack     at tryOnImmediate (timers.js:751:5)
8 verbose stack     at processImmediate [as _immediateCallback] (timers.js:722:5)
9 verbose cwd /Users/t-cool
10 verbose Darwin 17.4.0
11 verbose argv "/Users/t-cool/.nvm/versions/node/v8.9.3/bin/node" "/Users/t-cool/.nvm/versions/node/v8.9.3/bin/npm" "install" "-g" "cxxxr/lem"
12 verbose node v8.9.3
13 verbose npm  v5.5.1
14 error code ENOPACKAGEJSON
15 error package.json Non-registry package missing package.json: github:cxxxr/lem.
16 error package.json npm can't find a package.json file in your current directory.
17 verbose exit [ 1, true ]

Github pages for lem

@hiroki802 @cxxxr

What if we make github pages for lem, we can add bunch of lem information there.

  • goals.
  • todo.
  • screnshot.
  • instalation guide.
  • what makes lem special.
  • more.

Thanks.

LEM fails to redraw some modelines after a vertical split

To duplicate: start lem-xcb, and split the window vertically <C-x 2>.

Force the window to go stale and update - I switch to a different workspace and back in my window manager.

The redraw is incomplete - the bottom view's modeline is not drawn.

Calling (redraw-display t) redraws everything except the modeline. Even when the view is active!

swankのエラー

; server
(ql:quickload :swank)
(swank:create-server :port 12345 :dont-close t)

; client
(ql:quickload :swank-client)
(defun send (x)
  (swank-client:with-slime-connection (c "localhost" 12345)
    (swank-client:slime-eval x c)))
(send '(defstruct foo x))
(send '(make-foo))

debugger invoked on a SB-INT:SIMPLE-READER-ERROR in thread #<THREAD "swank dispatcher for localhost/12345" RUNNING {B4C3F29}>: COMMON-LISP-USER::FOO is not a defined structure type.Line: 1, Column: 45, File-Position: 45Stream: #<SB-IMPL::STRING-INPUT-STREAM {B4C56A9}>

lemだとここで落ちるのをなんとかする

3 redraws for every keystroke - Please clarify redraw strategy

Hello, I am the implementor of the XCB frontend. In order to clean up my code, I would like to understand the redraw strategy. Right now, typing in a single character in an empty buffer causes 3 redraws of the entire buffer view. Below is a log of interface activity after hitting 'a'. I marked up the 3 occurences <<<WITH A MARK LIKE THIS>>>:

<<<1>>>
xcb: interface-redraw after: view #<TEXTVIEW {1007C8A853}> : NIL
xcb: interface-print #<TEXTVIEW {1007C8A533}> (0 0) |1 | attr:#<ATTRIBUTE {10023150D3}> 
xcb: interface-clear-eol view #<TEXTVIEW {1007C8A533}> x: 2 y 0
xcb: interface-print #<TEXTVIEW {1007C8A533}> (2 0) |a| attr:NIL 
xcb: interface-print #<TEXTVIEW {1007C8A533}> (3 0) | | attr:CURSOR 
xcb: interface-clear-eol view #<TEXTVIEW {1007C8A533}> x: 0 y 1
xcb: interface-print-modeline: view #<TEXTVIEW {1007C8A533}> x: 0 y 0 |                                                                                | MODELINE
xcb: interface-print-modeline: view #<TEXTVIEW {1007C8A533}> x: 0 y 0 | * | MODELINE
xcb: interface-print-modeline: view #<TEXTVIEW {1007C8A533}> x: 3 y 0 |*tmp*| MODELINE
xcb: interface-print-modeline: view #<TEXTVIEW {1007C8A533}> x: 8 y 0 | (fundamental) | MODELINE
xcb: interface-print-modeline: view #<TEXTVIEW {1007C8A533}> x: 23 y 0 |(1, 1)| MODELINE
xcb: interface-print-modeline: view #<TEXTVIEW {1007C8A533}> x: 75 y 0 |All  | MODELINE
xcb: interface-redraw after: view #<TEXTVIEW {1007C8A533}> : T
xcb: interface-redraw-display: 
<<<2>>>
xcb: interface-redraw after: view #<TEXTVIEW {1007C8A853}> : NIL
xcb: interface-print #<TEXTVIEW {1007C8A533}> (0 0) |1 | attr:#<ATTRIBUTE {10023150D3}> 
xcb: interface-clear-eol view #<TEXTVIEW {1007C8A533}> x: 2 y 0
xcb: interface-print #<TEXTVIEW {1007C8A533}> (2 0) |a| attr:NIL 
xcb: interface-print #<TEXTVIEW {1007C8A533}> (3 0) | | attr:CURSOR 
xcb: interface-clear-eol view #<TEXTVIEW {1007C8A533}> x: 0 y 1
xcb: interface-redraw after: view #<TEXTVIEW {1007C8A533}> : T
xcb: interface-redraw-display: 
<<<3>>>
xcb: interface-redraw after: view #<TEXTVIEW {1007C8A853}> : NIL
xcb: interface-print #<TEXTVIEW {1007C8A533}> (0 0) |1 | attr:#<ATTRIBUTE {10023150D3}> 
xcb: interface-clear-eol view #<TEXTVIEW {1007C8A533}> x: 2 y 0
xcb: interface-print #<TEXTVIEW {1007C8A533}> (2 0) |a| attr:NIL 
xcb: interface-print #<TEXTVIEW {1007C8A533}> (3 0) | | attr:CURSOR 
xcb: interface-clear-eol view #<TEXTVIEW {1007C8A533}> x: 0 y 1
xcb: interface-redraw after: view #<TEXTVIEW {1007C8A533}> : T
xcb: interface-redraw-display: 

Is this normal?

Need clarification

In reference to fbar pull request #117, and generally:

Could you please explain:

  • How to resolve a mouse position to a view/buffer position and move the cursor accordingly;
  • How to set a background color for an entire floating window;
  • How to preserve state of a view/window/buffer/point, perform some actions (display a floating window, edit another window, etc) and restore state to exactly the same position;
  • How to switch focus to a different view;
  • How to scroll the entire view, not a single line in a view;
  • The meaning of the different point objects: %window-point , buffer-point, window-view point, etc.
  • Are all points correct after the text is modified?

I have made some guesses, but I suspect there are better ways.

Thank you

Error installing lem-electron: ASDF/INTERFACE::OPERATION-FORCED is undefined

with npm:

$ npm i cxxxr/lem                                                              
npm WARN rm not removing /home/vince/projects/front/node_modules/espree/node_modules/.bin/acorn as it wasn't installed by /home/vince/projects/front/node_modules/espree/node_modules/acorn

> [email protected] preinstall /home/vince/projects/front/node_modules/lem
> ros install cxxxr/lem

install from github cxxxr/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 UNDEFINED-FUNCTION in thread #<SB-THREAD:THREAD "main thread" RUNNING
                                          {100295F8B3}>:
  The function ASDF/INTERFACE::OPERATION-FORCED is undefined.

Backtrace for: #<SB-THREAD:THREAD "main thread" RUNNING {100295F8B3}>
0: ("undefined function")
1: ((:METHOD ASDF/ACTION:PERFORM (ASDF/LISP-ACTION:LOAD-OP SWANK-LOADER::SWANK-LOADER-FILE)) #<ASDF/LISP-ACTION:LOAD-OP > #<SWANK-LOADER::SWANK-LOADER-FILE "swank" "swank-loader">) [fast-method]
2: ((SB-PCL::EMF ASDF/ACTION:PERFORM) #<unavailable argument> #<unavailable argument> #<ASDF/LISP-ACTION:LOAD-OP > #<SWANK-LOADER::SWANK-LOADER-FILE "swank" "swank-loader">)
3: ((:METHOD ASDF/ACTION:PERFORM-WITH-RESTARTS (ASDF/LISP-ACTION:LOAD-OP ASDF/LISP-ACTION:CL-SOURCE-FILE)) #<ASDF/LISP-ACTION:LOAD-OP > #<SWANK-LOADER::SWANK-LOADER-FILE "swank" "swank-loader">) [fast-method]
4: ((:METHOD ASDF/ACTION:PERFORM-WITH-RESTARTS :AROUND (T T)) #<ASDF/LISP-ACTION:LOAD-OP > #<SWANK-LOADER::SWANK-LOADER-FILE "swank" "swank-loader">) [fast-method]
5: ((:METHOD ASDF/PLAN:PERFORM-PLAN (LIST)) ((#1=#<ASDF/LISP-ACTION:PREPARE-OP > . #<ASDF/SYSTEM:SYSTEM #2="alexandria">) (#1# . #3=#<ASDF/COMPONENT:STATIC-FILE #2# "LICENCE">) (#4=#<ASDF/LISP-ACTION:COMPILE-OP > . #3#) (#5=#<ASDF/LISP-ACTION:LOAD-OP > . #3#) (#1# . #6=#<ASDF/COMPONENT:STATIC-FILE #2# "tests.lisp">) (#4# . #6#) (#5# . #6#) (#1# . #7=#<ASDF/LISP-ACTION:CL-SOURCE-FILE #2# "package">) (#5# . #7#) (#1# . #8=#<ASDF/LISP-ACTION:CL-SOURCE-FILE #2# "definitions">) (#5# . #8#) (#1# . #<ASDF/LISP-ACTION:CL-SOURCE-FILE #2# "binding">) ...) :FORCE NIL) [fast-method]
6: ((FLET SB-C::WITH-IT :IN SB-C::%WITH-COMPILATION-UNIT))
7: ((:METHOD ASDF/PLAN:PERFORM-PLAN :AROUND (T)) ((#1=#<ASDF/LISP-ACTION:PREPARE-OP > . #<ASDF/SYSTEM:SYSTEM #2="alexandria">) (#1# . #3=#<ASDF/COMPONENT:STATIC-FILE #2# "LICENCE">) (#4=#<ASDF/LISP-ACTION:COMPILE-OP > . #3#) (#5=#<ASDF/LISP-ACTION:LOAD-OP > . #3#) (#1# . #6=#<ASDF/COMPONENT:STATIC-FILE #2# "tests.lisp">) (#4# . #6#) (#5# . #6#) (#1# . #7=#<ASDF/LISP-ACTION:CL-SOURCE-FILE #2# "package">) (#5# . #7#) (#1# . #8=#<ASDF/LISP-ACTION:CL-SOURCE-FILE #2# "definitions">) (#5# . #8#) (#1# . #<ASDF/LISP-ACTION:CL-SOURCE-FILE #2# "binding">) ...) :VERBOSE NIL) [fast-method]
8: ((FLET SB-C::WITH-IT :IN SB-C::%WITH-COMPILATION-UNIT))
9: ((:METHOD ASDF/PLAN:PERFORM-PLAN :AROUND (T)) #<ASDF/PLAN:SEQUENTIAL-PLAN {10041AB043}> :VERBOSE NIL) [fast-method]
10: ((:METHOD ASDF/OPERATE:OPERATE (ASDF/OPERATION:OPERATION ASDF/COMPONENT:COMPONENT)) #<ASDF/LISP-ACTION:LOAD-OP > #<ASDF/SYSTEM:SYSTEM "lem"> :VERBOSE NIL) [fast-method]
11: ((SB-PCL::EMF ASDF/OPERATE:OPERATE) #<unused argument> #<unused argument> #<ASDF/LISP-ACTION:LOAD-OP > #<ASDF/SYSTEM:SYSTEM "lem"> :VERBOSE NIL)
12: ((LAMBDA NIL :IN ASDF/OPERATE:OPERATE))
13: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (T T)) #<ASDF/LISP-ACTION:LOAD-OP > #<ASDF/SYSTEM:SYSTEM "lem"> :VERBOSE NIL) [fast-method]
14: ((SB-PCL::EMF ASDF/OPERATE:OPERATE) #<unused argument> #<unused argument> ASDF/LISP-ACTION:LOAD-OP "lem" :VERBOSE NIL)
15: ((LAMBDA NIL :IN ASDF/OPERATE:OPERATE))
16: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (T T)) ASDF/LISP-ACTION:LOAD-OP "lem" :VERBOSE NIL) [fast-method]
17: ((LAMBDA NIL :IN ASDF/OPERATE:OPERATE))
18: (ASDF/CACHE:CALL-WITH-ASDF-CACHE #<CLOSURE (LAMBDA NIL :IN ASDF/OPERATE:OPERATE) {100409381B}> :OVERRIDE NIL :KEY NIL)
19: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (T T)) ASDF/LISP-ACTION:LOAD-OP "lem" :VERBOSE NIL) [fast-method]
20: (ASDF/OPERATE:LOAD-SYSTEM "lem" :VERBOSE NIL)
21: (QUICKLISP-CLIENT::CALL-WITH-MACROEXPAND-PROGRESS #<CLOSURE (LAMBDA NIL :IN QUICKLISP-CLIENT::APPLY-LOAD-STRATEGY) {100409377B}>)
22: (QUICKLISP-CLIENT::AUTOLOAD-SYSTEM-AND-DEPENDENCIES "lem" :PROMPT NIL)
23: ((:METHOD QL-IMPL-UTIL::%CALL-WITH-QUIET-COMPILATION (T T)) #<unavailable argument> #<CLOSURE (FLET QUICKLISP-CLIENT::QL :IN QUICKLISP-CLIENT:QUICKLOAD) {10040830BB}>) [fast-method]
24: ((:METHOD QL-IMPL-UTIL::%CALL-WITH-QUIET-COMPILATION :AROUND (QL-IMPL:SBCL T)) #<QL-IMPL:SBCL {100321F233}> #<CLOSURE (FLET QUICKLISP-CLIENT::QL :IN QUICKLISP-CLIENT:QUICKLOAD) {10040830BB}>) [fast-method]
25: ((:METHOD QUICKLISP-CLIENT:QUICKLOAD (T)) #<unavailable argument> :PROMPT NIL :SILENT NIL :VERBOSE NIL) [fast-method]
26: (QL-DIST::CALL-WITH-CONSISTENT-DISTS #<CLOSURE (LAMBDA NIL :IN QUICKLISP-CLIENT:QUICKLOAD) {1004066D7B}>)
27: (INSTALL-SYSTEM-SCRIPT "lem")
28: (INSTALL-SYSTEM-IF-PROBED "lem")
29: (INSTALL #<unavailable argument>)
30: (SB-INT:SIMPLE-EVAL-IN-LEXENV (APPLY (QUOTE MAIN) ROSWELL:*ARGV*) #<NULL-LEXENV>)
31: (SB-INT:SIMPLE-EVAL-IN-LEXENV (ROSWELL:QUIT (APPLY (QUOTE MAIN) ROSWELL:*ARGV*)) #<NULL-LEXENV>)
32: (SB-EXT:EVAL-TLF (ROSWELL:QUIT (APPLY (QUOTE MAIN) ROSWELL:*ARGV*)) NIL NIL)
33: ((LABELS SB-FASL::EVAL-FORM :IN SB-INT:LOAD-AS-SOURCE) (ROSWELL:QUIT (APPLY (QUOTE MAIN) ROSWELL:*ARGV*)) NIL)
34: (SB-INT:LOAD-AS-SOURCE #<CONCATENATED-STREAM :STREAMS NIL {1003959423}> :VERBOSE NIL :PRINT NIL :CONTEXT "loading")
35: ((FLET SB-FASL::LOAD-STREAM :IN LOAD) #<CONCATENATED-STREAM :STREAMS NIL {1003959423}> NIL)
36: (LOAD #<CONCATENATED-STREAM :STREAMS NIL {1003959423}> :VERBOSE NIL :PRINT NIL :IF-DOES-NOT-EXIST T :EXTERNAL-FORMAT :DEFAULT)
37: ((FLET ROSWELL::BODY :IN ROSWELL:SCRIPT) #<SB-SYS:FD-STREAM for "file /home/vince/.linuxbrew/Cellar/roswell/17.6.9.79/etc/roswell/install.ros" {1003953EF3}>)
38: (ROSWELL:SCRIPT "/home/vince/.linuxbrew/Cellar/roswell/17.6.9.79/etc/roswell/install.ros" "cxxxr/lem")
39: (ROSWELL:RUN ((:EVAL "(ros:quicklisp)") (:SCRIPT "/home/vince/.linuxbrew/Cellar/roswell/17.6.9.79/etc/roswell/install.ros" "cxxxr/lem") (:QUIT NIL)))
40: (SB-INT:SIMPLE-EVAL-IN-LEXENV (ROSWELL:RUN (QUOTE ((:EVAL "(ros:quicklisp)") (:SCRIPT "/home/vince/.linuxbrew/Cellar/roswell/17.6.9.79/etc/roswell/install.ros" "cxxxr/lem") (:QUIT NIL)))) #<NULL-LEXENV>)
41: (EVAL (ROSWELL:RUN (QUOTE ((:EVAL "(ros:quicklisp)") (:SCRIPT "/home/vince/.linuxbrew/Cellar/roswell/17.6.9.79/etc/roswell/install.ros" "cxxxr/lem") (:QUIT NIL)))))
42: (SB-IMPL::PROCESS-EVAL/LOAD-OPTIONS ((:EVAL . "(progn #-ros.init(cl:load \"/home/vince/.linuxbrew/Cellar/roswell/17.6.9.79/etc/roswell/init.lisp\"))") (:EVAL . "(ros:run '((:eval\"(ros:quicklisp)\")(:script \"/home/vince/.linuxbrew/Cellar/roswell/17.6.9.79/etc/roswell/install.ros\"\"cxxxr/lem\")(:quit ())))")))
43: (SB-IMPL::TOPLEVEL-INIT)
44: ((FLET #:WITHOUT-INTERRUPTS-BODY-82 :IN SB-EXT:SAVE-LISP-AND-DIE))
45: ((LABELS SB-IMPL::RESTART-LISP :IN SB-EXT:SAVE-LISP-AND-DIE))

unhandled condition in --disable-debugger mode, quitting
; 
; compilation unit aborted
;   caught 2 fatal ERROR conditions
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] preinstall: `ros install cxxxr/lem`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the [email protected] preinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/vince/.npm/_logs/2017-12-14T18_33_45_594Z-debug.log

same result when I run ros install directly.

SBCL 1.3.19

Roswell

$ ros version                                                 *[master] 
roswell 17.6.9.79
build with gcc-4.9 (Debian 4.9.2-10) 4.9.2
libcurl=7.54.1
Quicklisp=2016-02-22
Dist=2017-10-23

thanks ! Looking forward to trying Lem.

btw I couldn't install lem with npm -g, had to do it locally.

$ sudo npm install -g cxxxr/lem                                                       
npm ERR! code 128
npm ERR! Command failed: /usr/bin/git clone -q git://github.com/cxxxr/lem.git /root/.npm/_cacache/tmp/git-clone-d99cbe4f
npm ERR! fatal: impossible de créer les répertoires de premier niveau dans '/root/.npm/_cacache/tmp/git-clone-d99cbe4f': Permission non accordée

Node 6.11. I tried giving permission of various ways, or moving the local directory to my home. But that would be for another time.

ミニバッファでのキーバインド

ミニバッファでキーがバインドされていないようです。キーバインドがあると便利ですね。

因みにEmacsはmini-buffer-modeを作ってキーバインドを割り当てているようです。

表示可能桁数を越える入力があった時の表示がおかしい

表示可能桁数を越える文字数がある行は溢れた文字が端の方に隠れる仕様のようですが、端の方の文字を表示させようと横スクロールに相当することをしようとした時に、その行しかスクロールされず他の行はそのまま表示されてしまうようです。

例えば表示可能桁数が80の時にバッファの内容が

aaa
bbb........100 times ....bbb

だと、表示上は

aaa
bbb...79 times...bb$

となります。1桁目から80桁目までを表示しています。
この時2行目にカーソルを合わせ、 C-e するとカーソルが100桁目にいくので表示されるのは21桁目から100桁目までの筈です。しかし実際には

aaa
$bb...79 times...bbb

と、1桁目から3桁目にあるaaaが表示されてしまいます。恐らくカーソルが合わさっている行しか横スクロールしていないのだと思います。

scratchで#p"test"が"test"と評価される

本来は #p"test" と評価される筈。 リードマクロの扱い難しいですし仕様かもしれませんが。

再現手順

  1. lemを起動
  2. #p"test" と入力する
  3. C-j

Floating windows do not move or resize

An open floating window, such as a menu, is not properly moved/resized during UI window resizing, often making it unusable.

To reproduce:

Open lem in either XCB or NCURSES mode. Enter <M-x>li<TAB> to force a completion menu. Now, make the window smaller vertically.

The bottom part of the menu window will be clipped and no redraws take place. Scrolling around the clipped part of the menu is not visible, which is confusing and error-prone.

Possible solutions:

  • Cancel floating windows/menus on resize
  • Resize floating windows as needed. Ideally, this requires knowing how the window was invoked: a bubble should follow the invocation; a minibuffer menu should stick to minibuffer position, etc.

I do not yet understand the details of window management enough to do a pull request.

Thank you.

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

6~8回でハングします。

再現手順

  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

バッファの位置の表し方について

テキストは古くからあるエディタでよく使われている行単位双方向連結リストで管理していて、
N行目を得る方法はバッファの先頭、後尾、最後に得た行から一番近い位置から辿っていく。
最後に得た行はキャッシュしているので局所的な行の取得は、
大体O(1)で済むようにはなってる。(でも関数コールが深くなるからあまり速くは無いかもしれない)

このテキストの位置を表す方法が色々あって整理されていないので、ここをどうにかしないといけない。
lemでは位置は(cons 行番号 先頭行からのオフセット)で表すのを一番よく使っていて
この形で使う場合と行番号だけを指定する場合、バッファの先頭からのオフセットの場合、マーカの場合が
あるのでとてもややこしい。

(cons 行番号 先頭行からのオフセット)で位置を表すと
emacsの整数を使う方法では気にしなくてもよかった問題が出てくる。
位置を一つずらす関数は、整数を一つ足すだけでは駄目で、バッファ毎に行数は違うし
どの行も同じ文字数とは限らないので、バッファとその位置の二つを知っている必要がある。

zmacsやhemlock、climacsで使われているDrei、lispworks editorではマーカを
引数にしてテキストの編集と位置の移動の関数を実装していて
これを参考にするのはどうかと思っている。

全部マーカにまとめると位置だけの情報はマーカに統合されることになる。
これでバッファと位置を二つ指定する関数が一つにまとめられるし
位置が違うバッファを差してたということが無くなる。

バッファのテキストの管理方法にも依存しないはずなので
あとで別の実装に変えやすいのも良い点。

それと現在マーカは行番号と先頭行からのオフセットで位置を指してるが
行構造体を直接指せば一々バッファの行番号を指定して
とってこなくても良くなるのと、
バッファのある行に文字を挿入してその行のマーカがずれるときに
計算がその行だけになるのでここは変更したい。
これをやると構文走査が遅くならないために生のlineを扱っている箇所がmarkerでまとめられるので
コードがまとまって綺麗になるのも良い点。

バッファを操作する関数の仕様がマーカを指定する形に変わるので
互換性の無い変更は多そうだけど、バッファを操作するときは常に
現在の位置を操作したい場合がほとんどなので、
マーカを指定する関数をラップした現在のマーカ(バッファのカーソル位置)に
対して操作する関数をつければうまくいくはず。
(edi weitz氏のlw-add-addonsではchar-beforeなどのemacsと互換性がある、現在位置に何かをする関数がいくつか定義されている)

lem crashs when kill at *lisp-repl* buffer

I describe what I've done to crush lem.

M-x start-lisp-repl

then eval 1 at *lisp-repl* buffer then the result would be

CL-USER> 1
1
CL-USER> 

then select last 2 line as region

1
CL-USER> 

then

C-w

I got

The value
  NIL
is not of type
  LEM-BASE::LINE
Backtrace for: #<SB-THREAD:THREAD "editor" RUNNING {10053B70D3}>
0: ((LAMBDA (LEM-BASE::LINE LEM-BASE::START LEM-BASE::END) :IN LEM-BASE:MAP-REGION) NIL 0 NIL)
1: (LEM-BASE::%MAP-REGION #<POINT 0 "CL-USER> 1" {10038641C3}> #<POINT 9 NIL {1003861503}> #<CLOSURE (LAMBDA (LEM-BASE::LINE LEM-BASE::START LEM-BASE::END) :IN LEM-BASE:MAP-REGION) {10048C5D1B}>)
2: (LEM::WINDOW-WRAPPING-OFFSET #<LEM::WINDOW {10038615A3}>)
3: (LEM::WINDOW-CURSOR-Y #<LEM::WINDOW {10038615A3}>)
4: (LEM::WINDOW-OFFSET-VIEW #<LEM::WINDOW {10038615A3}>)
5: (LEM:WINDOW-SEE #<LEM::WINDOW {10038615A3}> T)
6: ((FLET LEM-INTERFACE:REDRAW-DISPLAY-WINDOW :IN "/home/snmsts/work/lem/lem-core/ncurses.lisp") #<LEM::WINDOW {10038615A3}> NIL)
7: (LEM:REDRAW-DISPLAY NIL)
8: (LEM::COMMAND-LOOP)
9: (LEM::TOPLEVEL-COMMAND-LOOP #<CLOSURE (LAMBDA NIL :IN LEM:LEM) {10053B703B}>)
10: ((LAMBDA NIL :IN LEM::LEM-INTERNAL))
11: ((LAMBDA NIL :IN BORDEAUX-THREADS::BINDING-DEFAULT-SPECIALS))
12: ((FLET #:WITHOUT-INTERRUPTS-BODY-1138 :IN SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE))
13: ((FLET SB-THREAD::WITH-MUTEX-THUNK :IN SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE))
14: ((FLET #:WITHOUT-INTERRUPTS-BODY-358 :IN SB-THREAD::CALL-WITH-MUTEX))
15: (SB-THREAD::CALL-WITH-MUTEX #<CLOSURE (FLET SB-THREAD::WITH-MUTEX-THUNK :IN SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE) {7FFFF5B76CDB}> #<SB-THREAD:MUTEX "thread result lock" owner: #<SB-THREAD:THREAD "editor" RUNNING {10053B70D3}>> NIL T NIL)
16: (SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE #<SB-THREAD:THREAD "editor" RUNNING {10053B70D3}> NIL #<CLOSURE (LAMBDA NIL :IN BORDEAUX-THREADS::BINDING-DEFAULT-SPECIALS) {10053B707B}> (#<SB-THREAD:THREAD "editor" RUNNING {10053B70D3}> #<SB-THREAD:THREAD "Swank 4005" RUNNING {1004FE2543}> #<SB-THREAD:THREAD "Swank Sentinel" RUNNING {1004FE2213}> #<SB-THREAD:THREAD "main thread" RUNNING {100345F3E3}>) NIL NIL NIL NIL)
17: ("foreign function: call_into_lisp")
18: ("foreign function: new_thread_trampoline")

killに失敗した時にバッファの構造が壊れていく雰囲気ですね…

lem doesn't work without clipboard.

lem C-w and C-y works with trivial-clipboard now. trivial-clipboard uses clipboard provided by the desktop environments which isn't operation system. it's means that we cannot uses these functions in the system which doesn't have it. I propose you that lem has two clipboards. One is trivial-clipboard and another is global variables of editor.

M-x describe-bindings crashes

To reproduce: open lem (ncurses) and type in M-x describe-bindings. Crashes, showing the following in a split window:

The value
  NIL
is not of type
  LEM:KEYMAP
Backtrace for: #<SB-THREAD:THREAD "editor" RUNNING {1002FF2643}>
0: (LEM::KEYMAP-FLATTEN-MAP NIL #<CLOSURE (LAMBDA (LEM::KEYS LEM::COMMAND) :IN L
1: (LEM::DESCRIBE-BINDINGS-INTERNAL #<LEM:BUFFER-OUTPUT-STREAM {10049B4513}> "Ma
2: ((LAMBDA (LEM::S) :IN LEM:DESCRIBE-BINDINGS) #<LEM:BUFFER-OUTPUT-STREAM {1004
3: ((LAMBDA NIL :IN LEM:POP-UP-TYPEOUT-WINDOW))
4: (LEM-BASE::INVOKE-SAVE-EXCURSION #<CLOSURE (LAMBDA NIL :IN LEM:POP-UP-TYPEOUT
...

Horizontal window splits need rethinking

Side-by-side window split layout logic assumes the separator is 1-glyph wide.

The separator is not explicitly redrawn.

Frontend makes a guess about the separator presence by checking that the view simultaneously (1) has a modeline and (2) is not at left edge; in this case, it explicitly draws a vertical line at x-1 column (see frontend-ncurses)

Not high priority, but this needs to be cleaned up at some point in main logic.

Ideally, the separator should not be explicit or relate to the grid in any way. Main logic should not account for separator width; frontends should figure out the position, and draw an appropriate separator. Ncurses, for instance, can add an extra character, while X can add a single-pixel line separator.

info-popupの挙動?

M-x descr [tab]bi [tab] [C-m] の際_bindings_バッファがカーソル移動で瞬殺されてしまいます。
_Completion_バッファを閉じるためのフラグか何かが
影響しているように見えますがいかがでしょうか。

Resizing crashes or silently kills windows

Unmodified windows disappear silently!

  1. Start lem in ncurses or xcb and split the window a few times.
  2. Resize UI window using the mouse to a smaller size, until some windows are obscured;
  3. Resize UI window back to former size. Some windows are gone!

Modified windows cause a crash!

  1. Start lem in ncurses or xcb and split the window a few times.
  2. Go to the rightmost window, load a file, and modify text;
  3. Resize UI until rightmost window is hidden. Lem crashes.

Error installing lem via roswell

Here is the stack trace (on macOS Sierra):

ros install cxxxr/lem
install from github cxxxr/lem
To load "lem":
Load 1 ASDF system:
lem
; Loading "lem"
............[1/3] System 'lem' found. Loading the system..

; file: /Users/username/.roswell/lisp/quicklisp/dists/quicklisp/software/cffi_0.17.1/toolchain/asdf-compat.lisp
; in: DEFUN BUNDLE-PATHNAME-TYPE
; ((UIOP/OS:OS-UNIX-P) "o")
;
; caught ERROR:
; illegal function call

; ((UIOP/OS:OS-WINDOWS-P)
; (IF (UIOP/OS:FEATUREP '(:OR :MINGW32 :MINGW64))
; "o"
; "obj"))
;
; caught ERROR:
; illegal function call

; ((UIOP/OS:OS-UNIX-P) "a")
;
; caught ERROR:
; illegal function call

; ((UIOP/OS:OS-WINDOWS-P)
; (IF (UIOP/OS:FEATUREP '(:OR :MINGW32 :MINGW64))
; "a"
; "lib"))
;
; caught ERROR:
; illegal function call

; ((UIOP/OS:OS-MACOSX-P) "dylib")
;
; caught ERROR:
; illegal function call

; ((UIOP/OS:OS-UNIX-P) "so")
;
; caught ERROR:
; illegal function call

; ((UIOP/OS:OS-WINDOWS-P) "dll")
;
; caught ERROR:
; illegal function call

; ((UIOP/OS:OS-UNIX-P) NIL)
;
; caught ERROR:
; illegal function call

; ((UIOP/OS:OS-WINDOWS-P) "exe")
;
; caught ERROR:
; illegal function call
.Aborted during step [1/3].
Unhandled LOAD-SYSTEM-DEFINITION-ERROR: Error while trying to load definition for system cl-charms from pathname /Users/username/.roswell/lisp/quicklisp/dists/quicklisp/software/cl-charms-20160318-git/cl-charms.asd: COMPILE-FILE-ERROR while compiling #<CL-SOURCE-FILE "cffi-toolchain" "toolchain" "asdf-compat">

Backtrace for: #<SB-THREAD:THREAD "main thread" RUNNING {1002DE7483}>
0: ((LAMBDA NIL :IN SB-DEBUG::FUNCALL-WITH-DEBUG-IO-SYNTAX))
1: (SB-IMPL::CALL-WITH-SANE-IO-SYNTAX #<CLOSURE (LAMBDA NIL :IN SB-DEBUG::FUNCALL-WITH-DEBUG-IO-SYNTAX) {1006F036FB}>)
2: (SB-IMPL::%WITH-STANDARD-IO-SYNTAX #<CLOSURE (LAMBDA NIL :IN SB-DEBUG::FUNCALL-WITH-DEBUG-IO-SYNTAX) {1006F036CB}>)
3: (SB-DEBUG:PRINT-BACKTRACE :STREAM #<SYNONYM-STREAM :SYMBOL SB-SYS:STDERR {10001530A3}> :START 0 :FROM :INTERRUPTED-FRAME :COUNT NIL :PRINT-THREAD T :PRINT-FRAME-SOURCE NIL :METHOD-FRAME-STYLE NIL)
4: (SB-DEBUG::DEBUGGER-DISABLED-HOOK #<LOAD-SYSTEM-DEFINITION-ERROR {1006EFAFB3}> #)
5: (SB-DEBUG::RUN-HOOK SB-EXT:INVOKE-DEBUGGER-HOOK #<LOAD-SYSTEM-DEFINITION-ERROR {1006EFAFB3}>)
6: (INVOKE-DEBUGGER #<LOAD-SYSTEM-DEFINITION-ERROR {1006EFAFB3}>)
7: (ERROR LOAD-SYSTEM-DEFINITION-ERROR :NAME "cl-charms" :PATHNAME #P"/Users/username/.roswell/lisp/quicklisp/dists/quicklisp/software/cl-charms-20160318-git/cl-charms.asd" :CONDITION #<COMPILE-FILE-ERROR {1006EFAE53}>)
8: ((FLET #:HANDLER1452 :IN ASDF/FIND-SYSTEM:LOAD-ASD) #<COMPILE-FILE-ERROR {1006EFAE53}>)
9: (SIGNAL #<COMPILE-FILE-ERROR {1006EFAE53}>)
10: (ERROR COMPILE-FILE-ERROR :CONTEXT-FORMAT "/asdf-action::format-action/" :CONTEXT-ARGUMENTS ((# . #<CL-SOURCE-FILE "cffi-toolchain" "toolchain" "asdf-compat">)))
11: (CHECK-LISP-COMPILE-RESULTS NIL T T "
/asdf-action::format-action/" ((# . #<CL-SOURCE-FILE "cffi-toolchain" "toolchain" "asdf-compat">)))
12: ((SB-PCL::EMF PERFORM) # # # #<CL-SOURCE-FILE "cffi-toolchain" "toolchain" "asdf-compat">)
13: ((:METHOD PERFORM-WITH-RESTARTS :AROUND (T T)) # #<CL-SOURCE-FILE "cffi-toolchain" "toolchain" "asdf-compat">) [fast-method]
14: ((:METHOD PERFORM-PLAN (LIST)) ((#1=# . #2=#<SYSTEM "uiop">) (#3=# . #2#) (#4=# . #2#) (#1# . #<SYSTEM #5="alexandria">) (#1# . #6=#<STATIC-FILE #5# "LICENCE">) (#3# . #6#) (#4# . #6#) (#1# . #7=#<STATIC-FILE #5# "tests.lisp">) (#3# . #7#) (#4# . #7#) (#1# . #8=#<CL-SOURCE-FILE #5# "package">) (#4# . #8#) ...) :FORCE NIL) [fast-method]
15: ((FLET SB-C::WITH-IT :IN SB-C::%WITH-COMPILATION-UNIT))
16: ((:METHOD PERFORM-PLAN :AROUND (T)) ((#1=# . #2=#<SYSTEM "uiop">) (#3=# . #2#) (#4=# . #2#) (#1# . #<SYSTEM #5="alexandria">) (#1# . #6=#<STATIC-FILE #5# "LICENCE">) (#3# . #6#) (#4# . #6#) (#1# . #7=#<STATIC-FILE #5# "tests.lisp">) (#3# . #7#) (#4# . #7#) (#1# . #8=#<CL-SOURCE-FILE #5# "package">) (#4# . #8#) ...)) [fast-method]
17: ((FLET SB-C::WITH-IT :IN SB-C::%WITH-COMPILATION-UNIT))
18: ((:METHOD PERFORM-PLAN :AROUND (T)) #<SEQUENTIAL-PLAN {10033DBC03}>) [fast-method]
19: ((:METHOD OPERATE (OPERATION COMPONENT)) # #<SYSTEM "cffi-grovel">) [fast-method]
20: ((SB-PCL::EMF OPERATE) # # # #<SYSTEM "cffi-grovel">)
21: ((LAMBDA NIL :IN OPERATE))
22: ((:METHOD OPERATE :AROUND (T T)) # #<SYSTEM "cffi-grovel">) [fast-method]
23: ((SB-PCL::EMF OPERATE) # # LOAD-OP #<SYSTEM "cffi-grovel">)
24: ((LAMBDA NIL :IN OPERATE))
25: ((:METHOD OPERATE :AROUND (T T)) LOAD-OP #<SYSTEM "cffi-grovel">) [fast-method]
26: (LOAD-SYSTEM #<SYSTEM "cffi-grovel">)
27: (LOAD-SYSTEMS* (#<SYSTEM "cffi-grovel">))
28: ((LAMBDA NIL :IN ASDF/PARSE-DEFSYSTEM:REGISTER-SYSTEM-DEFINITION))
29: (SB-INT:SIMPLE-EVAL-IN-LEXENV (DEFSYSTEM #:CL-CHARMS :VERSION (:READ-FILE-FORM "version.lisp-expr") :MAINTAINER "Mark Fedurin [email protected]" :AUTHOR "Abhishek Reddy [email protected]" :DESCRIPTION "CFFI bindings for curses." :LICENSE "MIT License (See COPYING)" ...) #)
30: (SB-EXT:EVAL-TLF (DEFSYSTEM #:CL-CHARMS :VERSION (:READ-FILE-FORM "version.lisp-expr") :MAINTAINER "Mark Fedurin [email protected]" :AUTHOR "Abhishek Reddy [email protected]" :DESCRIPTION "CFFI bindings for curses." :LICENSE "MIT License (See COPYING)" ...) 0 #)
31: ((FLET SB-FASL::EVAL-FORM :IN SB-INT:LOAD-AS-SOURCE) (DEFSYSTEM #:CL-CHARMS :VERSION (:READ-FILE-FORM "version.lisp-expr") :MAINTAINER "Mark Fedurin [email protected]" :AUTHOR "Abhishek Reddy [email protected]" :DESCRIPTION "CFFI bindings for curses." :LICENSE "MIT License (See COPYING)" ...) 0)
32: ((LAMBDA (SB-KERNEL:FORM &KEY SB-FASL::CURRENT-INDEX &ALLOW-OTHER-KEYS) :IN SB-INT:LOAD-AS-SOURCE) (DEFSYSTEM #:CL-CHARMS :VERSION (:READ-FILE-FORM "version.lisp-expr") :MAINTAINER "Mark Fedurin [email protected]" :AUTHOR "Abhishek Reddy [email protected]" :DESCRIPTION "CFFI bindings for curses." :LICENSE "MIT License (See COPYING)" ...) :CURRENT-INDEX 0)
33: (SB-C::%DO-FORMS-FROM-INFO #<CLOSURE (LAMBDA (SB-KERNEL:FORM &KEY SB-FASL::CURRENT-INDEX &ALLOW-OTHER-KEYS) :IN SB-INT:LOAD-AS-SOURCE) {100323A28B}> #<SB-C::SOURCE-INFO {100323A243}> SB-C::INPUT-ERROR-IN-LOAD)
34: (SB-INT:LOAD-AS-SOURCE #<SB-INT:FORM-TRACKING-STREAM for "file /Users/username/.roswell/lisp/quicklisp/dists/quicklisp/software/cl-charms-20160318-git/cl-charms.asd" {1003235FB3}> :VERBOSE NIL :PRINT NIL :CONTEXT "loading")
35: ((FLET SB-FASL::LOAD-STREAM :IN LOAD) #<SB-INT:FORM-TRACKING-STREAM for "file /Users/username/.roswell/lisp/quicklisp/dists/quicklisp/software/cl-charms-20160318-git/cl-charms.asd" {1003235FB3}> NIL)
36: (LOAD #P"/Users/username/.roswell/lisp/quicklisp/dists/quicklisp/software/cl-charms-20160318-git/cl-charms.asd" :VERBOSE NIL :PRINT NIL :IF-DOES-NOT-EXIST T :EXTERNAL-FORMAT :UTF-8)
37: (CALL-WITH-MUFFLED-CONDITIONS #<CLOSURE (LAMBDA NIL :IN LOAD*) {10032301EB}> ("Overwriting already existing readtable ~S." #(#:FINALIZERS-OFF-WARNING :ASDF-FINALIZERS)))
38: ((LAMBDA NIL :IN ASDF/FIND-SYSTEM:LOAD-ASD))
39: (SB-IMPL::%WITH-STANDARD-IO-SYNTAX #<CLOSURE (LAMBDA NIL :IN ASDF/FIND-SYSTEM:LOAD-ASD) {100323000B}>)
40: ((LAMBDA NIL :IN FIND-SYSTEM))
41: (ASDF/CACHE:CONSULT-ASDF-CACHE (FIND-SYSTEM "cl-charms") #<CLOSURE (LAMBDA NIL :IN FIND-SYSTEM) {100320C76B}>)
42: ((:METHOD FIND-SYSTEM (STRING)) "cl-charms" NIL) [fast-method]
43: ((:METHOD FIND-COMPONENT (STRING T)) "cl-charms" NIL) [fast-method]
44: (ASDF/FIND-COMPONENT:RESOLVE-DEPENDENCY-NAME #<SYSTEM "lem-core"> "cl-charms" NIL)
45: (ASDF/PLAN:MAP-DIRECT-DEPENDENCIES #<SEQUENTIAL-PLAN {1005F13CD3}> # #<SYSTEM "lem-core"> #<CLOSURE (LAMBDA (ASDF/PLAN::O ASDF/PLAN::C) :IN ASDF/PLAN:TRAVERSE-ACTION) {100320C3AB}>)
46: ((LAMBDA NIL :IN ASDF/PLAN:TRAVERSE-ACTION))
47: ((:METHOD ASDF/PLAN:CALL-WHILE-VISITING-ACTION (ASDF/PLAN:PLAN-TRAVERSAL T T T)) #<SEQUENTIAL-PLAN {1005F13CD3}> # #<SYSTEM "lem-core"> #<CLOSURE (LAMBDA NIL :IN ASDF/PLAN:TRAVERSE-ACTION) {100320C34B}>) [fast-method]
48: (ASDF/PLAN:MAP-DIRECT-DEPENDENCIES #<SEQUENTIAL-PLAN {1005F13CD3}> # #<CL-SOURCE-FILE "lem-core" "history"> #<CLOSURE (LAMBDA (ASDF/PLAN::O ASDF/PLAN::C) :IN ASDF/PLAN:TRAVERSE-ACTION) {100320BF6B}>)
49: ((LAMBDA NIL :IN ASDF/PLAN:TRAVERSE-ACTION))
50: ((:METHOD ASDF/PLAN:CALL-WHILE-VISITING-ACTION (ASDF/PLAN:PLAN-TRAVERSAL T T T)) #<SEQUENTIAL-PLAN {1005F13CD3}> # #<CL-SOURCE-FILE "lem-core" "history"> #<CLOSURE (LAMBDA NIL :IN ASDF/PLAN:TRAVERSE-ACTION) {100320BF0B}>) [fast-method]
51: (ASDF/PLAN:MAP-DIRECT-DEPENDENCIES #<SEQUENTIAL-PLAN {1005F13CD3}> # #<CL-SOURCE-FILE "lem-core" "history"> #<CLOSURE (LAMBDA (ASDF/PLAN::O ASDF/PLAN::C) :IN ASDF/PLAN:TRAVERSE-ACTION) {100320BB1B}>)
52: ((LAMBDA NIL :IN ASDF/PLAN:TRAVERSE-ACTION))
53: ((:METHOD ASDF/PLAN:CALL-WHILE-VISITING-ACTION (ASDF/PLAN:PLAN-TRAVERSAL T T T)) #<SEQUENTIAL-PLAN {1005F13CD3}> # #<CL-SOURCE-FILE "lem-core" "history"> #<CLOSURE (LAMBDA NIL :IN ASDF/PLAN:TRAVERSE-ACTION) {100320BABB}>) [fast-method]
54: (ASDF/PLAN:MAP-DIRECT-DEPENDENCIES #<SEQUENTIAL-PLAN {1005F13CD3}> # #<SYSTEM "lem-core"> #<CLOSURE (LAMBDA (ASDF/PLAN::O ASDF/PLAN::C) :IN ASDF/PLAN:TRAVERSE-ACTION) {100320B6CB}>)
55: ((LAMBDA NIL :IN ASDF/PLAN:TRAVERSE-ACTION))
56: ((:METHOD ASDF/PLAN:CALL-WHILE-VISITING-ACTION (ASDF/PLAN:PLAN-TRAVERSAL T T T)) #<SEQUENTIAL-PLAN {1005F13CD3}> # #<SYSTEM "lem-core"> #<CLOSURE (LAMBDA NIL :IN ASDF/PLAN:TRAVERSE-ACTION) {100320B66B}>) [fast-method]
57: (ASDF/PLAN:MAP-DIRECT-DEPENDENCIES #<SEQUENTIAL-PLAN {1005F13CD3}> # #<SYSTEM "lem"> #<CLOSURE (LAMBDA (ASDF/PLAN::O ASDF/PLAN::C) :IN ASDF/PLAN:TRAVERSE-ACTION) {1005F14DBB}>)
58: ((LAMBDA NIL :IN ASDF/PLAN:TRAVERSE-ACTION))
59: ((:METHOD ASDF/PLAN:CALL-WHILE-VISITING-ACTION (ASDF/PLAN:PLAN-TRAVERSAL T T T)) #<SEQUENTIAL-PLAN {1005F13CD3}> # #<SYSTEM "lem"> #<CLOSURE (LAMBDA NIL :IN ASDF/PLAN:TRAVERSE-ACTION) {1005F14D5B}>) [fast-method]
60: (ASDF/PLAN:MAP-DIRECT-DEPENDENCIES #<SEQUENTIAL-PLAN {1005F13CD3}> # #<SYSTEM "lem"> #<CLOSURE (LAMBDA (ASDF/PLAN::O ASDF/PLAN::C) :IN ASDF/PLAN:TRAVERSE-ACTION) {1005F148FB}>)
61: ((LAMBDA NIL :IN ASDF/PLAN:TRAVERSE-ACTION))
62: ((:METHOD ASDF/PLAN:CALL-WHILE-VISITING-ACTION (ASDF/PLAN:PLAN-TRAVERSAL T T T)) #<SEQUENTIAL-PLAN {1005F13CD3}> # #<SYSTEM "lem"> #<CLOSURE (LAMBDA NIL :IN ASDF/PLAN:TRAVERSE-ACTION) {1005F1489B}>) [fast-method]
63: ((:METHOD MAKE-PLAN (T OPERATION COMPONENT)) NIL # #<SYSTEM "lem"> :VERBOSE NIL) [fast-method]
64: ((:METHOD OPERATE (OPERATION COMPONENT)) # #<SYSTEM "lem"> :VERBOSE NIL) [fast-method]
65: ((SB-PCL::EMF OPERATE) # # # #<SYSTEM "lem"> :VERBOSE NIL)
66: ((LAMBDA NIL :IN OPERATE))
67: ((:METHOD OPERATE :AROUND (T T)) # #<SYSTEM "lem"> :VERBOSE NIL) [fast-method]
68: ((SB-PCL::EMF OPERATE) # # LOAD-OP "lem" :VERBOSE NIL)
69: ((LAMBDA NIL :IN OPERATE))
70: (ASDF/CACHE:CALL-WITH-ASDF-CACHE #<CLOSURE (LAMBDA NIL :IN OPERATE) {1005F090BB}> :OVERRIDE NIL :KEY NIL)
71: ((:METHOD OPERATE :AROUND (T T)) LOAD-OP "lem" :VERBOSE NIL) [fast-method]
72: ((:METHOD OPERATE :AROUND (T T)) LOAD-OP "lem" :VERBOSE NIL) [fast-method]
73: (LOAD-SYSTEM "lem" :VERBOSE NIL)
74: (QUICKLISP-CLIENT::CALL-WITH-MACROEXPAND-PROGRESS #<CLOSURE (LAMBDA NIL :IN QUICKLISP-CLIENT::APPLY-LOAD-STRATEGY) {1005EF0B8B}>)
75: (QUICKLISP-CLIENT::AUTOLOAD-SYSTEM-AND-DEPENDENCIES "lem" :PROMPT NIL)
76: ((:METHOD QL-IMPL-UTIL::%CALL-WITH-QUIET-COMPILATION (T T)) # #<CLOSURE (FLET QUICKLISP-CLIENT::QL :IN QUICKLISP-CLIENT:QUICKLOAD) {1005EDE69B}>) [fast-method]
77: ((:METHOD QL-IMPL-UTIL::%CALL-WITH-QUIET-COMPILATION :AROUND (QL-IMPL:SBCL T)) #<QL-IMPL:SBCL {1006ECC633}> #<CLOSURE (FLET QUICKLISP-CLIENT::QL :IN QUICKLISP-CLIENT:QUICKLOAD) {1005EDE69B}>) [fast-method]
78: ((:METHOD QUICKLISP-CLIENT:QUICKLOAD (T)) # :PROMPT NIL :SILENT NIL :VERBOSE NIL) [fast-method]
79: (QL-DIST::CALL-WITH-CONSISTENT-DISTS #<CLOSURE (LAMBDA NIL :IN QUICKLISP-CLIENT:QUICKLOAD) {1005ED1C2B}>)
80: (ROSWELL.INSTALL:INSTALL-SYSTEM-SCRIPT "lem")
81: (ROSWELL.INSTALL:INSTALL-SYSTEM-IF-PROBED "lem")
82: (ROSWELL.INSTALL:INSTALL #)
83: (SB-INT:SIMPLE-EVAL-IN-LEXENV (APPLY (QUOTE ROS.SCRIPT.INSTALL.3671936092::MAIN) ROSWELL:ARGV) #)
84: (SB-INT:SIMPLE-EVAL-IN-LEXENV (ROSWELL:QUIT (APPLY (QUOTE ROS.SCRIPT.INSTALL.3671936092::MAIN) ROSWELL:ARGV)) #)
85: (SB-EXT:EVAL-TLF (ROSWELL:QUIT (APPLY (QUOTE ROS.SCRIPT.INSTALL.3671936092::MAIN) ROSWELL:ARGV)) NIL #)
86: ((FLET SB-FASL::EVAL-FORM :IN SB-INT:LOAD-AS-SOURCE) (ROSWELL:QUIT (APPLY (QUOTE ROS.SCRIPT.INSTALL.3671936092::MAIN) ROSWELL:ARGV)) NIL)
87: (SB-INT:LOAD-AS-SOURCE #<CONCATENATED-STREAM :STREAMS NIL {1003592A73}> :VERBOSE NIL :PRINT NIL :CONTEXT "loading")
88: ((FLET SB-FASL::LOAD-STREAM :IN LOAD) #<CONCATENATED-STREAM :STREAMS NIL {1003592A73}> NIL)
89: (LOAD #<CONCATENATED-STREAM :STREAMS NIL {1003592A73}> :VERBOSE NIL :PRINT NIL :IF-DOES-NOT-EXIST T :EXTERNAL-FORMAT :DEFAULT)
90: ((FLET ROSWELL::BODY :IN ROSWELL:SCRIPT) #<SB-SYS:FD-STREAM for "file /usr/local/Cellar/roswell/17.7.9.80/etc/roswell/install.ros" {100358B3B3}>)
91: (ROSWELL:SCRIPT "/usr/local/Cellar/roswell/17.7.9.80/etc/roswell/install.ros" "cxxxr/lem")
92: (ROSWELL:RUN ((:EVAL "(ros:quicklisp)") (:SCRIPT "/usr/local/Cellar/roswell/17.7.9.80/etc/roswell/install.ros" "cxxxr/lem") (:QUIT NIL)))
93: (SB-INT:SIMPLE-EVAL-IN-LEXENV (ROSWELL:RUN (QUOTE ((:EVAL "(ros:quicklisp)") (:SCRIPT "/usr/local/Cellar/roswell/17.7.9.80/etc/roswell/install.ros" "cxxxr/lem") (:QUIT NIL)))) #)
94: (EVAL (ROSWELL:RUN (QUOTE ((:EVAL "(ros:quicklisp)") (:SCRIPT "/usr/local/Cellar/roswell/17.7.9.80/etc/roswell/install.ros" "cxxxr/lem") (:QUIT NIL)))))
95: (SB-IMPL::PROCESS-EVAL/LOAD-OPTIONS ((:EVAL . "(progn #-ros.init(cl:load "/usr/local/Cellar/roswell/17.7.9.80/etc/roswell/init.lisp"))") (:EVAL . "(ros:run '((:eval"(ros:quicklisp)")(:script "/usr/local/Cellar/roswell/17.7.9.80/etc/roswell/install.ros""cxxxr/lem")(:quit ())))")))
96: (SB-IMPL::TOPLEVEL-INIT)
97: ((FLET #:WITHOUT-INTERRUPTS-BODY-85 :IN SB-EXT:SAVE-LISP-AND-DIE))
98: ((LABELS SB-IMPL::RESTART-LISP :IN SB-EXT:SAVE-LISP-AND-DIE))

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

Line numbering misbehaves on resize

During UI resizing, line numbers areas of newly exposed lines are never updated, leaving holes.

To reproduce:

  1. Start lem in ncurses mode and load a file with many lines.
  2. Resize the UI window bigger, slowly, and observe what happens to line numbers.

Line numbers are not generated until the next keyboard event (such as cursor move).

Issue: Line number area is never redrawn during and after resizing.

The line number area is never drawn, relying on UI to clear the screen. This complicates the resize logic: low-level bitmap allocator now needs to clear the screen (to the theme's background color) to avoid holes showing instead of relying on the redraw to take care of it.

Proposed solution:

Redraw should address the line-number cells and not leave holes.

At the very least, clear-to-eol should start at 0.

Proof:

Logs show that the line number area is simply not updated by Lem, while the text is. Here is a portion of a log with noise removed for convenience:

xcb:interface-print  (0 23) | 24 | attr:#<ATTRIBUTE {10047AC673}> 
xcb:interface-clear-eol view (4 23)
xcb:interface-print  (4 23) |A working 'toy' implementation provides a simple demo of the wrapper.| attr:NIL 
xcb:interface-clear-eol view  (0 23)
xcb:interface-clear-eol view  (0 24)
xcb:interface-clear-eol view  (4 25)  <----------  HERE!
xcb:interface-print (4 25) |```| attr:NIL 

Here you can see that at coordinates (0 23) line number "24" is printed, followed by text at (4 23).
At (0 24), the first line in newly exposed area, is cleared to EOL.
After that, we go straight to (4 25), never addressing the line number area. This pattern continues.

This shows that Lem never updates the line number area.

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")
3: (LEM::ATTRIBUTE-TO-BITS LEM:MODELINE-INACTIVE)
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]
5: (LEM::SCREEN-REDRAW-MODELINE #<LEM::WINDOW {1005E945C3}> T)
6: (LEM::REDRAW-DISPLAY-WINDOW #<LEM::WINDOW {1005E945C3}> NIL)
7: (LEM:REDRAW-DISPLAY NIL)
8: ((FLET #:H0 :IN LEM::TOPLEVEL-COMMAND-LOOP) #<UNBOUND-VARIABLE *COLORS* {1005E936D3}>)
9: (SIGNAL #<UNBOUND-VARIABLE *COLORS* {1005E936D3}>)
10: (ERROR UNBOUND-VARIABLE :NAME LEM.TERM::*COLORS*)
11: ("UNBOUND-SYMBOL-ERROR" LEM.TERM::*COLORS*)
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")
21: (LEM::ATTRIBUTE-TO-BITS LEM:MODELINE)
22: ((:METHOD LEM::INTERFACE-REDRAW-VIEW-AFTER ((EQL :NCURSES) T T)) :NCURSES #S(LEM::NCURSES-VIEW :SCRWIN #.(SB-SYS:INT-SAP #X7FFFE40136A0) :MODELINE-SCRWIN NIL :X 0 :Y 23 :WIDTH 103 :HEIGHT 1) NIL) [fast-method]
23: (LEM::REDRAW-DISPLAY-WINDOW #<LEM::MINIBUFFER-WINDOW {1005847653}> T)
24: (LEM:REDRAW-DISPLAY T)
25: (LEM-BASE:RUN-HOOKS ((#<FUNCTION (LAMBDA NIL :IN "/home/myusername/quicklisp/local-projects/lem/lem-ncurses/ncurses.lisp") {22778E0B}> . 0)))
26: (LEM::INIT #S(LEM::COMMAND-LINE-ARGUMENTS :ARGS NIL :NO-INIT-FILE NIL))
27: (LEM::TOPLEVEL-COMMAND-LOOP #<CLOSURE (LAMBDA NIL :IN LEM::RUN-EDITOR-THREAD) {1005849B7B}>)
28: ((LAMBDA NIL :IN LEM::RUN-EDITOR-THREAD))
29: ((LAMBDA NIL :IN BORDEAUX-THREADS::BINDING-DEFAULT-SPECIALS))
30: ((FLET #:WITHOUT-INTERRUPTS-BODY-1139 :IN SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE))
31: ((FLET SB-THREAD::WITH-MUTEX-THUNK :IN SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE))
32: ((FLET #:WITHOUT-INTERRUPTS-BODY-359 :IN SB-THREAD::CALL-WITH-MUTEX))
33: (SB-THREAD::CALL-WITH-MUTEX #<CLOSURE (FLET SB-THREAD::WITH-MUTEX-THUNK :IN SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE) {7FFFEF536D6B}> #<SB-THREAD:MUTEX "thread result lock" owner: #<SB-THREAD:THREAD "editor" RUNNING {10041CBFD3}>> NIL T NIL)
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")

NIL
CL-USER> 

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

completion時のbackspaceの挙動

質問状況の再現方法

C-x C-f C-i backspace

  • C-x C-f を叩いた時点では /home/user/等 (同ディレクトリには補完対象のサブディレクトリはそれなりに入っている前提)

  • 上記状態からC-i押下で補完用のバルーンを表示させる。

  • バルーンの表示されている状態で、backspace 押下で #\LATIN_SMALL_LETTER_C_WITH_ACUTE がミニバッファに挿入されている模様。

質問

ここの挙動は(define-key completion-mode-keymap "[backspace]" ...)で変更できない?

よろしくお願いします。

How to specify my own color theme?

Hi,

I'd like to customize color theme of lem. So, I edited my .lemrc as follows.

;; -*- mode:lisp -*-

(in-package :lem-user)

(define-color-theme "my-theme" ()
  (display-background-mode :light)
  (minibuffer-prompt-attribute :foreground "blue" :bold-p t)
  (region :foreground nil :background "#eedc82")
  (modeline :background "#bbbbbb" :foreground "black")
  (modeline-inactive :background "#bbbbbb" :foreground "#777777")
  (completion-attribute :foreground "#e5e5e5" :background "#0000FF")
  (non-focus-completion-attribute :foreground "black" :background "#aaaaaa")
  (syntax-string-attribute :foreground "#8B2252")
  (syntax-comment-attribute :foreground "#cd0000")
  (syntax-keyword-attribute :foreground "#C000A0")
  (syntax-constant-attribute :foreground "#ff00ff")
  (syntax-function-name-attribute :foreground "#0000ff")
  (syntax-variable-attribute :foreground "#8D5232")
  (syntax-type-attribute :foreground "#00875f"))

(load-theme "my-theme")

(setf (variable-value 'truncate-lines :global) nil)
(setf (variable-value 'lem.line-numbers:line-numbers :global) nil)

Here, "my-theme" is copied from lem-core/color-theme.lisp and just renamed.
However, this code crushes lem, with the error messages as follows.

odd number of &KEY arguments
Backtrace for: #<SB-THREAD:THREAD "editor" RUNNING {C2F0519}>
0: (LEM:SET-ATTRIBUTE LEM-USER::DISPLAY-BACKGROUND-MODE :LIGHT) [more]
...

As the conclusion, the error can be solved by commenting out the line (display-background-mode :light).
In the present case, we cannot set default background or foreground with define-color-theme and we have to use (setf (attribute-fg-color ...)) instead of that.
Is this expected behavior? or Bug?

Thanks.

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

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

OS macOS
Verison 010a480

Cursesの問題かもしれませんが、その場合はEmacsの同様のコマンドやVimのdd等も遅くなるはずなので、Cursesの問題ではなくlemの方に問題があると判断しました。

よろしくお願いいたします。

lem

swank-clientのバグ?

slime-evalに渡した式がエラーになるとswank-client::send-to-emacs内で
(swank::default-connection)がnilで落ちる

English to Japanese translation policy on issues

## issueの訳出方針

  • 訳出必要のラベルを作って@cxxxr さんには運用してもらう。(ここの訳者は不必要な部分を和訳したいわけではないので。Reader should apply label an issue need translation to omit unnecessarily translation.
  • このissueは@cxxxr に納得してラベルを切ってもらったら@snmsts がcloseする。 This issue intend to confirm @cxxxr and when it done I'll close it.

Thank you so much.

Lem makes it possible to develop software using Common Lisp once you install it on your computer. You don't need any tidy setting on Emacs. You don't need to install any other plugin. Lem is the best editor for developers using Common Lisp.

You really made my days warm.
Thank you so much for this project and your faculty.

Hope you always healthy and successful

Happy hacking.

PS: sorry for writing here, I do not find your email address nor your blog, I hope I can write you an email soon.

make-buffer-output-stream is too slow

You can feel the speed by using describe-bindings (#7). Maybe you need to rewrite write-sequence ((stream buffer-output-stream) sequence start end &keys) not to use stream-write-char.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.