lem
lem copied to clipboard
Lem 2.0 crashes on SDL event (?), Linux Mint 21, 64 bit
Download Lem 2.0 from https://github.com/lem-project/lem/releases/download/v2.0.0/lem-linux-v2.0.0.tar.gz
Extracting and running ./lem opens a blank black window. Any keypress or mouse move will close the window and exit Lem.
The error.log in ./lem reports:
The value
NIL
is not of type
AUTOWRAP:WRAPPER
Backtrace for: #<SB-THREAD:THREAD tid=7276 "editor" RUNNING {1004CD9BB3}>
0: (AUTOWRAP:INVALIDATE NIL)
1: ((:METHOD LEM-SDL2::RESIZE (LEM-SDL2::VIEW T T)) #<LEM-SDL2::VIEW {10067E8DA3}> 50 1) [fast-method]
2: ((FLET "WITHOUT-INTERRUPTS-BODY-11" :IN SB-THREAD::CALL-WITH-RECURSIVE-LOCK))
3: (SB-THREAD::CALL-WITH-RECURSIVE-LOCK #<FUNCTION (FLET SB-THREAD::WITH-RECURSIVE-LOCK-THUNK :IN LEM-SDL2::CALL-WITH-RENDERER) {7FA949ACE1EB}> #<SB-THREAD:MUTEX "lem-sdl2 display mutex" taken owner=editor> T NIL)
4: (LEM-SDL2::CALL-WITH-RENDERER #<FUNCTION (LAMBDA NIL :IN LEM-INTERFACE:SET-VIEW-SIZE) {10067F2BFB}>)
5: (LEM-SDL2::CALL-WITH-DEBUG #<FUNCTION (LAMBDA NIL :IN LEM-INTERFACE:SET-VIEW-SIZE) {10067F2B9B}> #<FUNCTION (LAMBDA NIL :IN LEM-INTERFACE:SET-VIEW-SIZE) {10067F2BCB}>)
6: (LEM::SCREEN-SET-SIZE #S(LEM::SCREEN :VIEW #<LEM-SDL2::VIEW {10067E8DA3}> :MODELINE-ELEMENTS NIL :LEFT-LINES #(NIL) :LEFT-WIDTH NIL :OLD-LEFT-WIDTH NIL :LINES #(NIL) :OLD-LINES #(NIL) :WRAP-LINES NIL :WIDTH 50 :MODIFIED-P T :LAST-BUFFER-NAME NIL :LAST-BUFFER-MODIFIED-TICK NIL ...) 50 1)
7: ((:METHOD LEM/POPUP-WINDOW::ADJUST-FOR-REDRAWING (LEM/POPUP-WINDOW::GRAVITY-FOLLOW-CURSOR T)) #<unused argument> #<LEM/POPUP-WINDOW::POPUP-WINDOW {10067E8C73}>) [fast-method]
8: ((:METHOD LEM:WINDOW-REDRAW (LEM/POPUP-WINDOW::POPUP-WINDOW T)) #<LEM/POPUP-WINDOW::POPUP-WINDOW {10067E8C73}> NIL) [fast-method]
9: (LEM:REDRAW-DISPLAY NIL)
10: (LEM::COMMAND-LOOP-BODY)
11: (LEM::COMMAND-LOOP)
12: (LEM::TOPLEVEL-COMMAND-LOOP #<FUNCTION (LAMBDA NIL :IN LEM::RUN-EDITOR-THREAD) {1005928CDB}>)
13: ((LAMBDA NIL :IN LEM::RUN-EDITOR-THREAD))
14: ((LAMBDA NIL :IN LEM::RUN-EDITOR-THREAD))
15: ((LAMBDA NIL :IN BORDEAUX-THREADS::BINDING-DEFAULT-SPECIALS))
16: ((FLET SB-UNIX::BODY :IN SB-THREAD::RUN))
17: ((FLET "WITHOUT-INTERRUPTS-BODY-156" :IN SB-THREAD::RUN))
18: ((FLET SB-UNIX::BODY :IN SB-THREAD::RUN))
19: ((FLET "WITHOUT-INTERRUPTS-BODY-149" :IN SB-THREAD::RUN))
20: (SB-THREAD::RUN)
21: ("foreign function: call_into_lisp_")
22: ("foreign function: funcall1")
Thanks for the report. I am not sure about this error, but maybe there is an error during error handling. Is there any log output before this log?
Seeing the exact same behavior on Fedora 37, although I don't see an error.log file anywhere.
There is no other error, this is the only content in error.log. Also no output on the command line.
@karbak : the error.log is ~./lem/error.log
Umm, I have no idea why that would be the case.
Is it because of what is written in the known issues? https://github.com/lem-project/lem/releases/tag/v2.0.0
The SDL2 frontend may not work with certain graphic drivers, especially when installing graphic drivers on Linux.
I got the same error in my ~/.lem/error.log but I never saw a window. I'm running Guix with Sway (wayland only). I loaded lem through an emacs slime sbcl prompt with (ql:quickload :lem-sdl2)
(lem's git in my local-projects) and (lem:lem)
. I did get a failure loading libffi.so--and restarted with use-value ("libffi.so.8")
. It was looking for libffi.so.7
I think.
I'll have to read up on how to debug this sort of thing. I guess lem was calling destroy-texture on nil?
I tested on a different machine - Ubuntu 22.04 with an i915 Intel driver and Lem 2.0 worked. The graphics drivers on the machine with the issue were the latest Nvidia proprietary drivers, so it looks like that could indeed be the issue.
The next question is "why?". SDL programs normally work on my machine and SDL itself is generally a solid and well-tested library. Perhaps the error is in the Lisp wrapper?
Do we know why SDL has issues with some linux drivers? I couldn't find any relevant issues on the SDL2 repo.
On Wed, 24 May 2023 at 07:09, Timmy Douglas @.***> wrote:
I got the same error in my ~/.lem/error.log but I never saw a window. I'm running Guix with Sway (wayland only). I loaded lem through an emacs slime sbcl prompt with (ql:quickload :lem-sdl2) (lem's git in my local-projects) and (lem:lem). I did get a failure loading libffi.so--and restarted with use-value ("libffi.so.8"). It was looking for libffi.so.7 I think.
I'll have to read up on how to debug this sort of thing. I guess lem was calling destroy-texture on nil?
— Reply to this email directly, view it on GitHub https://github.com/lem-project/lem/issues/630#issuecomment-1560508701, or unsubscribe https://github.com/notifications/unsubscribe-auth/AADKGT7HCIXSCTAPGTUJOKDXHWQ2BANCNFSM6AAAAAAYL5LLVI . You are receiving this because you authored the thread.Message ID: @.***>
Thank you for testing the functionality.
Perhaps the error is in the Lisp wrapper?
Indeed, I believe there is an issue with how Lem is using sdl2. However, I'm unable to reproduce it on my own environment. I'm using Ubuntu with an AMD GPU, but I wonder if installing the dedicated driver would allow me to reproduce the issue.
Indeed, I believe there is an issue with how Lem is using sdl2.
i think it stems from (screen-view screen)
on line 42 of screen.lisp returning nil, but my lisp skills are weak and i couldn't trace back the implementation of lem::screen-view
. I'm willing to try running something on my local machine for you if that would help. Otherwise I don't see how this would ever get fixed.
Hmm, that's puzzling. It's possible that there might be an error with SDL2-related operations before the value is stored in the screen-view, and it could be causing the uninitialized state when displaying the error result on the screen.
Just a quick update--I noticed if I remove bt:make-thread
from both lem-if:invoke
and run-editor-thread
, the editor window pops up with a 0: *tmp*
tab and a mode line if I run (ql:quickload :lem-sdl2) (lem:lem)
from emacs/slime. I'm not able to type anything or kill the window (presumably the event loop doesn't work in this single threaded state). So my guess is this is related to threading or something after the event loop start rather than graphics drivers?
Also using Nvidia proprietary drivers, also getting this crash with this backtrace. I'm on Debian unstable with X, using the i3 window manager.
If I put a breakpoint on lem-core:message:
breaking before traced call to LEM-CORE:MESSAGE:
[Condition of type SIMPLE-CONDITION]
Restarts:
0: [CONTINUE] Return from BREAK.
1: [ABORT] abort thread (#<THREAD tid=24067 "editor" RUNNING {100F83E963}>)
Backtrace:
0: ((LAMBDA (LEM-CORE::E) :IN LEM-CORE::CALL-WITH-DISPLAY-ERROR) #<SDL2::SDL-RC-ERROR {10077400A3}>)
1: (SB-KERNEL::%SIGNAL #<SDL2::SDL-RC-ERROR {10077400A3}>)
2: (ERROR SDL2::SDL-RC-ERROR :RC -1 :STRING "glFramebufferTexture2DEXT() failed")
3: (SDL2:SET-RENDER-TARGET #<SDL2-FFI:SDL-RENDERER {#X7FEF3C2CA310}> #<SDL2-FFI:SDL-TEXTURE {#X7FEF04001860}>)
4: (LEM-SDL2::RENDER-FILL-RECT #<SDL2-FFI:SDL-TEXTURE {#X7FEF04001860}> 0 0 100 1 :COLOR #S(LEM-CORE::COLOR :RED 45 :GREEN 45 :BLUE 45))
5: ((:METHOD LEM-SDL2::CLEAR-EOL (LEM-SDL2::VIEW T T)) #<LEM-SDL2::VIEW {1007286193}> 0 0) [fast-method]
6: ((LAMBDA NIL :IN LEM-INTERFACE:CLEAR-EOL))
7: ((FLET SB-THREAD::WITH-RECURSIVE-LOCK-THUNK :IN LEM-SDL2::CALL-WITH-RENDERER))
8: ((FLET "WITHOUT-INTERRUPTS-BODY-11" :IN SB-THREAD::CALL-WITH-RECURSIVE-LOCK))
9: (SB-THREAD::CALL-WITH-RECURSIVE-LOCK #<FUNCTION (FLET SB-THREAD::WITH-RECURSIVE-LOCK-THUNK :IN LEM-SDL2::CALL-WITH-RENDERER) {7FEF257452AB}> #<SB-THREAD:MUTEX "lem-sdl2 display mutex" taken owner=edit..
10: (LEM-SDL2::CALL-WITH-RENDERER #<FUNCTION (LAMBDA NIL :IN LEM-INTERFACE:CLEAR-EOL) {100771FDEB}>)
11: ((LAMBDA NIL :IN LEM-INTERFACE:CLEAR-EOL))
12: (LEM-SDL2::CALL-WITH-DEBUG #<FUNCTION (LAMBDA NIL :IN LEM-INTERFACE:CLEAR-EOL) {100771FD8B}> #<FUNCTION (LAMBDA NIL :IN LEM-INTERFACE:CLEAR-EOL) {100771FDBB}>)
13: ((:METHOD LEM-INTERFACE:CLEAR-EOL (LEM-SDL2::SDL2 T T T)) #<unused argument> #<LEM-SDL2::VIEW {1007286193}> 0 0) [fast-method]
14: (LEM-CORE::SCREEN-DISPLAY-LINE #S(LEM-CORE::SCREEN :VIEW #<LEM-SDL2::VIEW {1007286193}> :MODELINE-ELEMENTS NIL :LEFT-LINES #(NIL) :LEFT-WIDTH 0 :OLD-LEFT-WIDTH NIL :LINES #((" 0: *EDITOR ERROR* ..
15: ((LAMBDA NIL :IN LEM-CORE::SCREEN-DISPLAY-LINES))
16: (LEM-CORE::CALL-WITH-DISPLAY-ERROR #<FUNCTION (LAMBDA NIL :IN LEM-CORE::SCREEN-DISPLAY-LINES) {100771FD4B}>)
17: (LEM-CORE::SCREEN-DISPLAY-LINES #S(LEM-CORE::SCREEN :VIEW #<LEM-SDL2::VIEW {1007286193}> :MODELINE-ELEMENTS NIL :LEFT-LINES #(NIL) :LEFT-WIDTH 0 :OLD-LEFT-WIDTH NIL :LINES #((" 0: *EDITOR ERROR* ..
18: ((LAMBDA NIL :IN LEM-CORE::REDRAW-BUFFER))
19: (LEM-CORE::CALL-WITH-DISPLAY-ERROR #<FUNCTION (LAMBDA NIL :IN LEM-CORE::REDRAW-BUFFER) {100771F5FB}>)
20: ((:METHOD LEM-CORE::REDRAW-BUFFER (LEM-BASE:TEXT-BUFFER T T)) #<LEM-BASE:TEXT-BUFFER *frame-multiplexer* NIL {1007239C43}> #<LEM/FRAME-MULTIPLEXER::VIRTUAL-FRAME {1007283443}> NIL) [fast-method]
21: (LEM-CORE::REDRAW-DISPLAY-WINDOW #<LEM/FRAME-MULTIPLEXER::VIRTUAL-FRAME {1007283443}> NIL)
22: ((:METHOD LEM-CORE:WINDOW-REDRAW (T T)) #<LEM/FRAME-MULTIPLEXER::VIRTUAL-FRAME {1007283443}> NIL) [fast-method]
23: ((FLET CALL-NEXT-METHOD :IN "/home/timmy/quicklisp/local-projects/lem/src/ext/frame-multiplexer.lisp"))
24: ((:METHOD LEM-CORE:WINDOW-REDRAW (LEM/FRAME-MULTIPLEXER::VIRTUAL-FRAME T)) #<LEM/FRAME-MULTIPLEXER::VIRTUAL-FRAME {1007283443}> NIL) [fast-method]
25: ((LABELS LEM-CORE::REDRAW-HEADER-WINDOWS :IN LEM-CORE:REDRAW-DISPLAY) NIL)
26: ((LABELS LEM-CORE::REDRAW-ALL-WINDOWS :IN LEM-CORE:REDRAW-DISPLAY))
27: (LEM-CORE:REDRAW-DISPLAY NIL)
28: ((FLET LEM-CORE::REDRAW :IN LEM-CORE::COMMAND-LOOP-BODY))
29: (LEM-CORE::COMMAND-LOOP-BODY)
30: (LEM-CORE:COMMAND-LOOP)
31: (LEM-CORE::TOPLEVEL-COMMAND-LOOP #<FUNCTION (LAMBDA NIL :IN LEM-CORE::RUN-EDITOR-THREAD) {100190100B}>)
32: ((LAMBDA NIL :IN LEM-CORE::RUN-EDITOR-THREAD))
33: (LEM/COMMON/TIMER::CALL-WITH-TIMER-MANAGER #<LEM-CORE::LEM-TIMER-MANAGER {100F945963}> #<FUNCTION (LAMBDA NIL :IN LEM-CORE::RUN-EDITOR-THREAD) {100F971FCB}>)
34: ((LAMBDA NIL :IN LEM-CORE::RUN-EDITOR-THREAD))
35: ((LABELS BORDEAUX-THREADS::%BINDING-DEFAULT-SPECIALS-WRAPPER :IN BORDEAUX-THREADS::BINDING-DEFAULT-SPECIALS))
36: ((FLET SB-UNIX::BODY :IN SB-THREAD::RUN))
37: ((FLET "WITHOUT-INTERRUPTS-BODY-156" :IN SB-THREAD::RUN))
38: ((FLET SB-UNIX::BODY :IN SB-THREAD::RUN))
39: ((FLET "WITHOUT-INTERRUPTS-BODY-149" :IN SB-THREAD::RUN))
40: (SB-THREAD::RUN)
41: ("foreign function: call_into_lisp_")
42: ("foreign function: funcall1")
I get a few more hits also with: LEM-SDL2::RENDER-VIEW-TEXTURE-TO-DISPLAY
before the editor thread exits. I tried inserting some code (format t "pixel-format ~S~%" (sdl2:get-window-pixel-format window))
which is :RGB888
on my computer. I didn't have any luck changing create-texture to use different formats or removing :accelerated
from the sdl2 init.
https://github.com/libsdl-org/SDL/blob/87e916dd214866af9cfd67eb4618918bc8b0f1b4/src/render/opengl/SDL_render_gl.c#L888
https://github.com/lem-project/lem/pull/787 Wouldn't this work?
Thanks @cxxxr . I don't see the exception anymore but the main window never opens.
Here is what I see from the two threads if I break into them:
editor thread:
[Condition of type SIMPLE-ERROR]
Restarts:
0: [CONTINUE] Continue from break.
1: [ABORT] abort thread (#<THREAD tid=23196 "editor" RUNNING {100E434523}>)
Backtrace:
0: ("bogus stack frame")
1: ((FLET SB-UNIX::BODY :IN SB-THREAD::FUTEX-WAIT))
2: ((FLET "WITHOUT-INTERRUPTS-BODY-2" :IN SB-THREAD::%CONDITION-WAIT))
3: (SB-THREAD:CONDITION-WAIT #<SB-THREAD:WAITQUEUE Anonymous condition variable {1002B86BB3}> #<SB-THREAD:MUTEX "Anonymous lock" free owner=0> :TIMEOUT NIL)
4: (BORDEAUX-THREADS:CONDITION-WAIT #<SB-THREAD:WAITQUEUE Anonymous condition variable {1002B86BB3}> #<SB-THREAD:MUTEX "Anonymous lock" free owner=0> :TIMEOUT NIL)
5: ((FLET SB-THREAD::WITH-MUTEX-THUNK :IN LEM-CORE::DEQUEUE-EVENT))
6: ((FLET "WITHOUT-INTERRUPTS-BODY-1" :IN SB-THREAD::CALL-WITH-MUTEX))
7: (SB-THREAD::CALL-WITH-MUTEX #<FUNCTION (FLET SB-THREAD::WITH-MUTEX-THUNK :IN LEM-CORE::DEQUEUE-EVENT) {7FE3D20DDB7B}> #<SB-THREAD:MUTEX "Anonymous lock" free owner=0> T NIL)
8: (LEM-CORE::DEQUEUE-EVENT NIL #S(LEM-CORE::EVENT-QUEUE :WAIT #<SB-THREAD:WAITQUEUE Anonymous condition variable {1002B86BB3}> :LOCK #<SB-THREAD:MUTEX "Anonymous lock" free owner=0> :QUEUE (NIL #<FUNCTI..
9: (LEM-CORE:RECEIVE-EVENT NIL)
10: (LEM-CORE::READ-EVENT-INTERNAL :ACCEPT-KEY T :ACCEPT-MOUSE T)
11: (LEM-CORE::READ-EVENT-WITH-RECORDING-AND-RUN-HOOKS :ACCEPT-KEY T :ACCEPT-MOUSE T)
12: (LEM-CORE:READ-EVENT)
13: (LEM-CORE:READ-COMMAND)
14: ((LAMBDA NIL :IN LEM-CORE::COMMAND-LOOP-BODY))
15: (LEM/COMMON/TIMER::CALL-WITH-IDLE-TIMERS #<FUNCTION (LAMBDA NIL :IN LEM-CORE::COMMAND-LOOP-BODY) {53F8B40B}>)
16: ((FLET LEM-CORE::READ-COMMAND-AND-CALL :IN LEM-CORE::COMMAND-LOOP-BODY))
17: (LEM-CORE::COMMAND-LOOP-BODY)
18: (LEM-CORE:COMMAND-LOOP)
SDL2 Main Thread:Interrupt from Emacs
[Condition of type SIMPLE-ERROR]
Restarts:
0: [CONTINUE] Continue from break.
1: [CONTINUE] Return to the SDL2 main loop.
2: [ABORT] Abort, quitting SDL2 entirely.
3: [ABORT] abort thread (#<THREAD tid=23185 "SDL2 Main Thread" RUNNING {10103E81B3}>)
Backtrace:
0: ("bogus stack frame")
1: (SDL2:NEXT-EVENT #<SDL2-FFI:SDL-EVENT {#X7FE3D8A47010}> :WAIT NIL)
2: ((LAMBDA NIL :IN LEM-SDL2::EVENT-LOOP))
3: (LEM-SDL2::EVENT-LOOP)
4: ((LAMBDA NIL :IN LEM-SDL2::CREATE-DISPLAY))
5: (SDL2::HANDLE-MESSAGE (#<FUNCTION (LAMBDA NIL :IN LEM-SDL2::CREATE-DISPLAY) {100E0C830B}> . #S(TRIVIAL-CHANNELS:CHANNEL :QUEUE #S(TRIVIAL-CHANNELS.QUEUE:QUEUE :HEAD NIL :TAIL NIL) :Q-CONDITION #<SB-TH..
6: (SDL2::RECV-AND-HANDLE-MESSAGE)
7: (SDL2::SDL-MAIN-THREAD)
8: ((LABELS BORDEAUX-THREADS::%BINDING-DEFAULT-SPECIALS-WRAPPER :IN BORDEAUX-THREADS::BINDING-DEFAULT-SPECIALS))
9: ((FLET SB-UNIX::BODY :IN SB-THREAD::RUN))
10: ((FLET "WITHOUT-INTERRUPTS-BODY-156" :IN SB-THREAD::RUN))
11: ((FLET SB-UNIX::BODY :IN SB-THREAD::RUN))
12: ((FLET "WITHOUT-INTERRUPTS-BODY-149" :IN SB-THREAD::RUN))
13: (SB-THREAD::RUN)
14: ("foreign function: call_into_lisp_")
15: ("foreign function: funcall1")
--more--
If I had to guess, maybe there is an issue with the threading/window events at startup? I'm using sway (no xwayland) on Guix running on an AMD 5700G.
Can I see a log file with launching lem (lem:lem "--debug" "--log-filename" "lem.log")
? It may be useful to debug this issue when these conditions are signaled.
To get log files, this page may help you: https://github.com/lem-project/lem/wiki/How-to-hack-on-lem-itself
@t-sin this is currently on git commit c0e562ade3382ec0ab04125fbe8c17e69b37d465
<INFO> [17:15:50] lem-core lem.lisp (lem) - Starting Lem
<DEBUG> [17:15:50] lem-sdl2 main.lisp (display-width sdl2) -
lem-if:display-width
<DEBUG> [17:15:50] lem-sdl2 main.lisp (display-height sdl2) -
lem-if:display-height
<DEBUG> [17:15:50] lem-sdl2 main.lisp (make-view sdl2) -
lem-if:make-view LEM-SDL2::WINDOW: #<LEM-CORE:WINDOW {1010211FF3}>
LEM-SDL2::X: 0 LEM-SDL2::Y: 0 LEM-SDL2::WIDTH: 100 LEM-SDL2::HEIGHT: 39
LEM-SDL2::USE-MODELINE: T
<DEBUG> [17:15:50] lem-sdl2 main.lisp (display-width sdl2) -
lem-if:display-width
<DEBUG> [17:15:50] lem-sdl2 main.lisp (display-height sdl2) -
lem-if:display-height
<DEBUG> [17:15:50] lem-sdl2 main.lisp (display-height sdl2) -
lem-if:display-height
<DEBUG> [17:15:50] lem-sdl2 main.lisp (make-view sdl2) -
lem-if:make-view LEM-SDL2::WINDOW: #<LEM/POPUP-WINDOW::POPUP-WINDOW {10065DC573}>
LEM-SDL2::X: 1 LEM-SDL2::Y: 2 LEM-SDL2::WIDTH: 44 LEM-SDL2::HEIGHT: 1
LEM-SDL2::USE-MODELINE: NIL
<DEBUG> [17:15:50] lem-sdl2 main.lisp (display-width sdl2) -
lem-if:display-width
<DEBUG> [17:15:50] lem-sdl2 main.lisp (display-height sdl2) -
lem-if:display-height
<DEBUG> [17:15:50] lem-sdl2 main.lisp (display-width sdl2) -
lem-if:display-width
<DEBUG> [17:15:50] lem-sdl2 main.lisp (make-view sdl2) -
lem-if:make-view LEM-SDL2::WINDOW: #<LEM/FRAME-MULTIPLEXER::VIRTUAL-FRAME {1006BEB433}>
LEM-SDL2::X: 0 LEM-SDL2::Y: 0 LEM-SDL2::WIDTH: 100 LEM-SDL2::HEIGHT: 40
LEM-SDL2::USE-MODELINE: NIL
<DEBUG> [17:15:50] lem-sdl2 main.lisp (update-foreground sdl2) -
lem-if:update-foreground LEM-SDL2::COLOR: "#cccccc"
<DEBUG> [17:15:50] lem-sdl2 main.lisp (update-background sdl2) -
lem-if:update-background LEM-SDL2::COLOR: "#2d2d2d"
<DEBUG> [17:15:50] lem-sdl2 main.lisp (delete-view sdl2) - lem-if:delete-view
<DEBUG> [17:15:50] lem-sdl2 main.lisp (display-width sdl2) -
lem-if:display-width
<DEBUG> [17:15:50] lem-sdl2 main.lisp (set-view-size sdl2) -
lem-if:set-view-size LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {1006BEE7D3}>
LEM-SDL2::WIDTH: 100 LEM-SDL2::HEIGHT: 1
<DEBUG> [17:15:50] lem-sdl2 main.lisp (display-width sdl2) -
lem-if:display-width
<DEBUG> [17:15:50] lem-sdl2 main.lisp (display-height sdl2) -
lem-if:display-height
<DEBUG> [17:15:50] lem-sdl2 main.lisp (set-view-size sdl2) -
lem-if:set-view-size LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::WIDTH: 100 LEM-SDL2::HEIGHT: 38
<DEBUG> [17:15:50] lem-sdl2 main.lisp (set-view-pos sdl2) -
lem-if:set-view-pos LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 0 LEM-SDL2::Y: 1
<DEBUG> [17:15:50] lem-sdl2 main.lisp (will-update-display sdl2) -
will-update-display
<DEBUG> [17:15:50] lem-sdl2 main.lisp (display-width sdl2) -
lem-if:display-width
<DEBUG> [17:15:50] lem-sdl2 main.lisp (redraw-view-before sdl2) -
lem-if:redraw-view-before LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {1006BEE7D3}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (clear-eol sdl2) -
lem-if:clear-eol LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {1006BEE7D3}>
LEM-SDL2::X: 0 LEM-SDL2::Y: 0
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print sdl2) -
lem-if:print LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {1006BEE7D3}> LEM-SDL2::X: 0
LEM-SDL2::Y: 0 STRING: " "
LEM-SDL2::ATTRIBUTE-OR-NAME: LEM/FRAME-MULTIPLEXER::FRAME-MULTIPLEXER-BACKGROUND-ATTRIBUTE
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print sdl2) -
lem-if:print LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {1006BEE7D3}> LEM-SDL2::X: 1
LEM-SDL2::Y: 0 STRING: " 0: *tmp* "
LEM-SDL2::ATTRIBUTE-OR-NAME: LEM/FRAME-MULTIPLEXER::FRAME-MULTIPLEXER-ACTIVE-FRAME-NAME-ATTRIBUTE
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print sdl2) -
lem-if:print LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {1006BEE7D3}> LEM-SDL2::X: 11
LEM-SDL2::Y: 0
STRING: " "
LEM-SDL2::ATTRIBUTE-OR-NAME: LEM/FRAME-MULTIPLEXER::FRAME-MULTIPLEXER-BACKGROUND-ATTRIBUTE
<DEBUG> [17:15:50] lem-sdl2 main.lisp (redraw-view-after sdl2) -
lem-if:redraw-view-after LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {1006BEE7D3}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (redraw-view-before sdl2) -
lem-if:redraw-view-before LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print sdl2) -
lem-if:print LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}> LEM-SDL2::X: 0
LEM-SDL2::Y: 0 STRING: " " LEM-SDL2::ATTRIBUTE-OR-NAME: LEM-CORE:CURSOR
<DEBUG> [17:15:50] lem-sdl2 main.lisp (clear-eol sdl2) -
lem-if:clear-eol LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 1 LEM-SDL2::Y: 0
<DEBUG> [17:15:50] lem-sdl2 main.lisp (clear-eob sdl2) -
lem-if:clear-eob LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 0 LEM-SDL2::Y: 1
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 0 LEM-SDL2::Y: 0
STRING: " "
LEM-SDL2::ATTRIBUTE-OR-NAME: LEM-CORE:MODELINE
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 0 LEM-SDL2::Y: 0 STRING: " "
LEM-SDL2::ATTRIBUTE-OR-NAME: LEM-CORE:MODELINE
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 2 LEM-SDL2::Y: 0 STRING: " "
LEM-SDL2::ATTRIBUTE-OR-NAME: LEM-CORE:MODELINE
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 5 LEM-SDL2::Y: 0 STRING: "*tmp*"
LEM-SDL2::ATTRIBUTE-OR-NAME: #<LEM-CORE:ATTRIBUTE (orange #404040) bold {10073E12F3}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 93 LEM-SDL2::Y: 0 STRING: " All "
LEM-SDL2::ATTRIBUTE-OR-NAME: #<LEM-CORE:ATTRIBUTE (black #A0A0A0) bold {10073E1393}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 88 LEM-SDL2::Y: 0 STRING: " 1:0 "
LEM-SDL2::ATTRIBUTE-OR-NAME: #<LEM-CORE:ATTRIBUTE (#FAFAFA #202020) bold {10073E1433}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 88 LEM-SDL2::Y: 0 STRING: ""
LEM-SDL2::ATTRIBUTE-OR-NAME: #<LEM-CORE:ATTRIBUTE (#FFFFFF #404040) bold {10073E16C3}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 76 LEM-SDL2::Y: 0 STRING: "Fundamental "
LEM-SDL2::ATTRIBUTE-OR-NAME: #<LEM-CORE:ATTRIBUTE (#85b8ff #404040) bold {10073E1C83}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (redraw-view-after sdl2) -
lem-if:redraw-view-after LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (update-display sdl2) -
lem-if:update-display
<DEBUG> [17:15:50] lem-sdl2 main.lisp (will-update-display sdl2) -
will-update-display
<DEBUG> [17:15:50] lem-sdl2 main.lisp (display-width sdl2) -
lem-if:display-width
<DEBUG> [17:15:50] lem-sdl2 main.lisp (display-height sdl2) -
lem-if:display-height
<DEBUG> [17:15:50] lem-sdl2 main.lisp (redraw-view-before sdl2) -
lem-if:redraw-view-before LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {1006BEE7D3}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (redraw-view-after sdl2) -
lem-if:redraw-view-after LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {1006BEE7D3}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (redraw-view-before sdl2) -
lem-if:redraw-view-before LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (clear-eob sdl2) -
lem-if:clear-eob LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 0 LEM-SDL2::Y: 1
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 0 LEM-SDL2::Y: 0
STRING: " "
LEM-SDL2::ATTRIBUTE-OR-NAME: LEM-CORE:MODELINE
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 0 LEM-SDL2::Y: 0 STRING: " "
LEM-SDL2::ATTRIBUTE-OR-NAME: LEM-CORE:MODELINE
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 2 LEM-SDL2::Y: 0 STRING: " "
LEM-SDL2::ATTRIBUTE-OR-NAME: LEM-CORE:MODELINE
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 5 LEM-SDL2::Y: 0 STRING: "*tmp*"
LEM-SDL2::ATTRIBUTE-OR-NAME: #<LEM-CORE:ATTRIBUTE (orange #404040) bold {1007562A33}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 93 LEM-SDL2::Y: 0 STRING: " All "
LEM-SDL2::ATTRIBUTE-OR-NAME: #<LEM-CORE:ATTRIBUTE (black #A0A0A0) bold {1007562A83}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 88 LEM-SDL2::Y: 0 STRING: " 1:0 "
LEM-SDL2::ATTRIBUTE-OR-NAME: #<LEM-CORE:ATTRIBUTE (#FAFAFA #202020) bold {1007562AD3}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 88 LEM-SDL2::Y: 0 STRING: ""
LEM-SDL2::ATTRIBUTE-OR-NAME: #<LEM-CORE:ATTRIBUTE (#FFFFFF #404040) bold {1007562B23}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 76 LEM-SDL2::Y: 0 STRING: "Fundamental "
LEM-SDL2::ATTRIBUTE-OR-NAME: #<LEM-CORE:ATTRIBUTE (#85b8ff #404040) bold {1007562BE3}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (redraw-view-after sdl2) -
lem-if:redraw-view-after LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (update-display sdl2) -
lem-if:update-display
<DEBUG> [17:15:50] lem-sdl2 main.lisp (will-update-display sdl2) -
will-update-display
<DEBUG> [17:15:50] lem-sdl2 main.lisp (display-width sdl2) -
lem-if:display-width
<DEBUG> [17:15:50] lem-sdl2 main.lisp (display-height sdl2) -
lem-if:display-height
<DEBUG> [17:15:50] lem-sdl2 main.lisp (redraw-view-before sdl2) -
lem-if:redraw-view-before LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {1006BEE7D3}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (redraw-view-after sdl2) -
lem-if:redraw-view-after LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {1006BEE7D3}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (redraw-view-before sdl2) -
lem-if:redraw-view-before LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (clear-eob sdl2) -
lem-if:clear-eob LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 0 LEM-SDL2::Y: 1
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 0 LEM-SDL2::Y: 0
STRING: " "
LEM-SDL2::ATTRIBUTE-OR-NAME: LEM-CORE:MODELINE
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 0 LEM-SDL2::Y: 0 STRING: " "
LEM-SDL2::ATTRIBUTE-OR-NAME: LEM-CORE:MODELINE
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 2 LEM-SDL2::Y: 0 STRING: " "
LEM-SDL2::ATTRIBUTE-OR-NAME: LEM-CORE:MODELINE
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 5 LEM-SDL2::Y: 0 STRING: "*tmp*"
LEM-SDL2::ATTRIBUTE-OR-NAME: #<LEM-CORE:ATTRIBUTE (orange #404040) bold {1007566113}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 93 LEM-SDL2::Y: 0 STRING: " All "
LEM-SDL2::ATTRIBUTE-OR-NAME: #<LEM-CORE:ATTRIBUTE (black #A0A0A0) bold {1007566163}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 88 LEM-SDL2::Y: 0 STRING: " 1:0 "
LEM-SDL2::ATTRIBUTE-OR-NAME: #<LEM-CORE:ATTRIBUTE (#FAFAFA #202020) bold {10075661B3}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 88 LEM-SDL2::Y: 0 STRING: ""
LEM-SDL2::ATTRIBUTE-OR-NAME: #<LEM-CORE:ATTRIBUTE (#FFFFFF #404040) bold {1007566203}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 76 LEM-SDL2::Y: 0 STRING: "Fundamental "
LEM-SDL2::ATTRIBUTE-OR-NAME: #<LEM-CORE:ATTRIBUTE (#85b8ff #404040) bold {1007566253}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (redraw-view-after sdl2) -
lem-if:redraw-view-after LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (update-display sdl2) -
lem-if:update-display
<DEBUG> [17:15:50] lem-sdl2 main.lisp (will-update-display sdl2) -
will-update-display
<DEBUG> [17:15:50] lem-sdl2 main.lisp (display-width sdl2) -
lem-if:display-width
<DEBUG> [17:15:50] lem-sdl2 main.lisp (display-height sdl2) -
lem-if:display-height
<DEBUG> [17:15:50] lem-sdl2 main.lisp (redraw-view-before sdl2) -
lem-if:redraw-view-before LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {1006BEE7D3}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (redraw-view-after sdl2) -
lem-if:redraw-view-after LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {1006BEE7D3}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (redraw-view-before sdl2) -
lem-if:redraw-view-before LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (clear-eob sdl2) -
lem-if:clear-eob LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 0 LEM-SDL2::Y: 1
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 0 LEM-SDL2::Y: 0
STRING: " "
LEM-SDL2::ATTRIBUTE-OR-NAME: LEM-CORE:MODELINE
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 0 LEM-SDL2::Y: 0 STRING: " "
LEM-SDL2::ATTRIBUTE-OR-NAME: LEM-CORE:MODELINE
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 2 LEM-SDL2::Y: 0 STRING: " "
LEM-SDL2::ATTRIBUTE-OR-NAME: LEM-CORE:MODELINE
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 5 LEM-SDL2::Y: 0 STRING: "*tmp*"
LEM-SDL2::ATTRIBUTE-OR-NAME: #<LEM-CORE:ATTRIBUTE (orange #404040) bold {1007566853}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 93 LEM-SDL2::Y: 0 STRING: " All "
LEM-SDL2::ATTRIBUTE-OR-NAME: #<LEM-CORE:ATTRIBUTE (black #A0A0A0) bold {10075668A3}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 88 LEM-SDL2::Y: 0 STRING: " 1:0 "
LEM-SDL2::ATTRIBUTE-OR-NAME: #<LEM-CORE:ATTRIBUTE (#FAFAFA #202020) bold {10075668F3}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 88 LEM-SDL2::Y: 0 STRING: ""
LEM-SDL2::ATTRIBUTE-OR-NAME: #<LEM-CORE:ATTRIBUTE (#FFFFFF #404040) bold {1007566943}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 76 LEM-SDL2::Y: 0 STRING: "Fundamental "
LEM-SDL2::ATTRIBUTE-OR-NAME: #<LEM-CORE:ATTRIBUTE (#85b8ff #404040) bold {1007566993}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (redraw-view-after sdl2) -
lem-if:redraw-view-after LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (update-display sdl2) -
lem-if:update-display
<DEBUG> [17:15:50] lem-sdl2 main.lisp (will-update-display sdl2) -
will-update-display
<DEBUG> [17:15:50] lem-sdl2 main.lisp (display-width sdl2) -
lem-if:display-width
<DEBUG> [17:15:50] lem-sdl2 main.lisp (display-height sdl2) -
lem-if:display-height
<DEBUG> [17:15:50] lem-sdl2 main.lisp (redraw-view-before sdl2) -
lem-if:redraw-view-before LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {1006BEE7D3}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (redraw-view-after sdl2) -
lem-if:redraw-view-after LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {1006BEE7D3}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (redraw-view-before sdl2) -
lem-if:redraw-view-before LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (clear-eob sdl2) -
lem-if:clear-eob LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 0 LEM-SDL2::Y: 1
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 0 LEM-SDL2::Y: 0
STRING: " "
LEM-SDL2::ATTRIBUTE-OR-NAME: LEM-CORE:MODELINE
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 0 LEM-SDL2::Y: 0 STRING: " "
LEM-SDL2::ATTRIBUTE-OR-NAME: LEM-CORE:MODELINE
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 2 LEM-SDL2::Y: 0 STRING: " "
LEM-SDL2::ATTRIBUTE-OR-NAME: LEM-CORE:MODELINE
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 5 LEM-SDL2::Y: 0 STRING: "*tmp*"
LEM-SDL2::ATTRIBUTE-OR-NAME: #<LEM-CORE:ATTRIBUTE (orange #404040) bold {1007566D83}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 93 LEM-SDL2::Y: 0 STRING: " All "
LEM-SDL2::ATTRIBUTE-OR-NAME: #<LEM-CORE:ATTRIBUTE (black #A0A0A0) bold {1007566DD3}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 88 LEM-SDL2::Y: 0 STRING: " 1:0 "
LEM-SDL2::ATTRIBUTE-OR-NAME: #<LEM-CORE:ATTRIBUTE (#FAFAFA #202020) bold {1007566E23}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 88 LEM-SDL2::Y: 0 STRING: ""
LEM-SDL2::ATTRIBUTE-OR-NAME: #<LEM-CORE:ATTRIBUTE (#FFFFFF #404040) bold {1007566E73}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 76 LEM-SDL2::Y: 0 STRING: "Fundamental "
LEM-SDL2::ATTRIBUTE-OR-NAME: #<LEM-CORE:ATTRIBUTE (#85b8ff #404040) bold {1007566EC3}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (redraw-view-after sdl2) -
lem-if:redraw-view-after LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
<DEBUG> [17:15:50] lem-sdl2 main.lisp (update-display sdl2) -
lem-if:update-display
<DEBUG> [17:15:51] lem-sdl2 main.lisp (will-update-display sdl2) -
will-update-display
<DEBUG> [17:15:51] lem-sdl2 main.lisp (display-width sdl2) -
lem-if:display-width
<DEBUG> [17:15:51] lem-sdl2 main.lisp (display-height sdl2) -
lem-if:display-height
<DEBUG> [17:15:51] lem-sdl2 main.lisp (redraw-view-before sdl2) -
lem-if:redraw-view-before LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {1006BEE7D3}>
<DEBUG> [17:15:51] lem-sdl2 main.lisp (redraw-view-after sdl2) -
lem-if:redraw-view-after LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {1006BEE7D3}>
<DEBUG> [17:15:51] lem-sdl2 main.lisp (redraw-view-before sdl2) -
lem-if:redraw-view-before LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
<DEBUG> [17:15:51] lem-sdl2 main.lisp (clear-eob sdl2) -
lem-if:clear-eob LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 0 LEM-SDL2::Y: 1
<DEBUG> [17:15:51] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 0 LEM-SDL2::Y: 0
STRING: " "
LEM-SDL2::ATTRIBUTE-OR-NAME: LEM-CORE:MODELINE
<DEBUG> [17:15:51] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 0 LEM-SDL2::Y: 0 STRING: " "
LEM-SDL2::ATTRIBUTE-OR-NAME: LEM-CORE:MODELINE
<DEBUG> [17:15:51] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 2 LEM-SDL2::Y: 0 STRING: " "
LEM-SDL2::ATTRIBUTE-OR-NAME: LEM-CORE:MODELINE
<DEBUG> [17:15:51] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 5 LEM-SDL2::Y: 0 STRING: "*tmp*"
LEM-SDL2::ATTRIBUTE-OR-NAME: #<LEM-CORE:ATTRIBUTE (orange #404040) bold {10075675D3}>
<DEBUG> [17:15:51] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 93 LEM-SDL2::Y: 0 STRING: " All "
LEM-SDL2::ATTRIBUTE-OR-NAME: #<LEM-CORE:ATTRIBUTE (black #A0A0A0) bold {1007567623}>
<DEBUG> [17:15:51] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 88 LEM-SDL2::Y: 0 STRING: " 1:0 "
LEM-SDL2::ATTRIBUTE-OR-NAME: #<LEM-CORE:ATTRIBUTE (#FAFAFA #202020) bold {1007567673}>
<DEBUG> [17:15:51] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 88 LEM-SDL2::Y: 0 STRING: ""
LEM-SDL2::ATTRIBUTE-OR-NAME: #<LEM-CORE:ATTRIBUTE (#FFFFFF #404040) bold {10075676C3}>
<DEBUG> [17:15:51] lem-sdl2 main.lisp (print-modeline sdl2) -
lem-if:print-modeline LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
LEM-SDL2::X: 76 LEM-SDL2::Y: 0 STRING: "Fundamental "
LEM-SDL2::ATTRIBUTE-OR-NAME: #<LEM-CORE:ATTRIBUTE (#85b8ff #404040) bold {1007567713}>
<DEBUG> [17:15:51] lem-sdl2 main.lisp (redraw-view-after sdl2) -
lem-if:redraw-view-after LEM-SDL2::VIEW: #<LEM-SDL2::VIEW {10019805B3}>
<DEBUG> [17:15:51] lem-sdl2 main.lisp (update-display sdl2) -
lem-if:update-display
@timmydo Thanks! Hmmm... is what happens in your machine like this?:
After launching SDL2 Lem, the log <DEBUG> [17:15:51] lem-sdl2 main.lisp (update-display sdl2) - lem-if:update-display
printed in the file, but any window appears and any conditions are signaled.
lem-if:update-display
is here, yeah it held a lock. lem-if:redraw-view-after
(here) also held a same lock. I think it may be a deadlock too.
I got another chance to look at this. Putting this seemed to get the editor to pop up:
diff --git a/frontends/sdl2/main.lisp b/frontends/sdl2/main.lisp
index 39b30012..398116fe 100644
--- a/frontends/sdl2/main.lisp
+++ b/frontends/sdl2/main.lisp
@@ -846,6 +850,7 @@
(adapt-high-dpi-font-size)
(sdl2:start-text-input)
(funcall function)
+ (sleep 1)
(event-loop))))))
However, I'm not able to interact with the window after it pops up with the tmp fundamental buffer. I'm able to quit with C-x C-c but I'm not able to type anything. If I restart after C-x C-c, I can see the text I typed in the previous session. It's as if the window is not being repainted.
Ok got another chance to play with this. I'm able to get sdl2 on my Linux machine working with these two changes:
diff --git a/frontends/sdl2/main.lisp b/frontends/sdl2/main.lisp
index 39b30012..27a5510c 100644
--- a/frontends/sdl2/main.lisp
+++ b/frontends/sdl2/main.lisp
@@ -868,7 +868,7 @@
(sdl2:push-quit-event)))))
(declare (ignore editor-thread))
nil)))
- (if (sbcl-on-darwin-p)
+ (if t;(sbcl-on-darwin-p)
(progn
;; called *before* any sdl windows are created
(sdl2:set-hint :video-mac-fullscreen-spaces
diff --git a/src/interp.lisp b/src/interp.lisp
index dbbd1634..fbcccc49 100644
--- a/src/interp.lisp
+++ b/src/interp.lisp
@@ -87,7 +87,7 @@
(stop-record-key) ; TODO: define handler
))
- (redraw)
+ (sdl2:in-main-thread () (redraw))
(handler-case
(handler-bind ((editor-abort
On shutdown it kills sbcl but I think that's probably because of the existing _exit call.
The second change is obviously a big hack because there isn't supposed to be implementation specific display code in this file. It was just an experiment to validate the SDL2 issues I was having on my machine.
Lem doesn't seem to have a concept of running the main command loop's display operations on the display thread. There are locks on the display mutex but these operations will run on another thread. Perhaps other display backends are more lenient with multithreaded access? I don't know SDL2 internals well enough to know why this doesn't work but it does seem widely mentioned that SDL2 APIs are designed around a single thread. Creating something like lem-if:run-on-display-thread
would require propagating the display implementation object down the toplevel-command-loop stack and I'd like to get some feedback before creating a PR with code like that.
Could someone with more knowledge of lem comment on this? Thanks!
@cxxxr
Oh, I see. It is indeed a problem that the drawing process is not done in the main thread. However, if the entire redraw function is executed in a separate thread from the editor thread, there is a problem that the operator for the non-thread-safe buffer is called in two threads in parallel. So we may need a mechanism to make it run in the main thread in the body of the lem-if:redraw-* method