Fix vterm hang, rename gemacs→jemacs, fix margin backgrounds
ober
18199ff31579d74f071260c63de50477aac4d85f
--- a/lib/jerboa-emacs/qt/app.sls +++ b/lib/jerboa-emacs/qt/app.sls @@ -119,7 +119,7 @@ (if modified? "* " "") name (if path (string-append " - " path) "") - " - gemacs")]) + " - jemacs")]) (qt-main-window-set-title! win title))) (def (qt-update-mark-selection! app) "Update visual selection to reflect active mark region.\n When buffer-mark is set, highlights the region between mark and cursor.\n When mark is cleared, ensures no stale selection remains." @@ -398,7 +398,7 @@ (loop (cdr wins))))))]))) (def (qt-do-init! qt-app args) (init-jemacs-log!) (init-verbose-log!) - (verbose-log! "gemacs-qt verbose mode ON") + (verbose-log! "jemacs-qt verbose mode ON") (define-standard-faces!) (let-values ([(saved-theme saved-font-family saved-font-size) (theme-settings-load!)]) @@ -512,7 +512,7 @@ (let* ([ed (qt-current-editor fr)] [saved (scratch-restore!)] [text (or saved - (string-append ";; Gerbil Emacs — *scratch*\n" ";;\n" + (string-append ";; Jemacs — *scratch*\n" ";;\n" ";; Key Bindings:\n" ";; C-x C-f Find file C-x C-s Save buffer\n" ";; C-x b Switch buffer C-x k Kill buffer\n" @@ -1566,7 +1566,7 @@ clean-args)]) (for-each (lambda (file) (qt-open-file! app file)) files)) (qt-main-window-set-central-widget! win central) - (qt-main-window-set-title! win "gemacs") + (qt-main-window-set-title! win "jemacs") (qt-widget-resize! win 800 600) (qt-widget-show! win) (qt-modeline-update! app) --- a/lib/jerboa-emacs/qt/commands-aliases2.sls +++ b/lib/jerboa-emacs/qt/commands-aliases2.sls @@ -366,7 +366,7 @@ (define *qt-eww-bookmarks-file*--cell (vector (path-expand - ".gemacs-eww-bookmarks" + ".jemacs-eww-bookmarks" (user-info-home (user-info (user-name)))))) (def (qt-eww-load-bookmarks!) "Load EWW bookmarks from disk." @@ -668,7 +668,7 @@ (reverse lines) (list "" - "Use (qt-autoload! 'symbol \"path.ss\") in ~/.gemacs-init."))) + "Use (qt-autoload! 'symbol \"path.ss\") in ~/.jemacs-init."))) (let* ([text (string-join lines "\n")] [buf (or (buffer-by-name "*Autoloads*") (qt-buffer-create! "*Autoloads*" ed #f))]) @@ -967,7 +967,7 @@ (vector (string-append (or (getenv "HOME" #f) ".") - "/.gemacs-undo/"))) + "/.jemacs-undo/"))) (def (qt-persistent-undo-file-for path) (string-append *qt-persistent-undo-dir* --- a/lib/jerboa-emacs/qt/commands-config.sls +++ b/lib/jerboa-emacs/qt/commands-config.sls @@ -71,7 +71,7 @@ "Toggle font lock mode." (cmd-toggle-highlighting app)) (def (cmd-customize-face app) - "Interactively customize a face's visual attributes.\n Prompts for face name, then for each attribute (foreground, background, bold, italic).\n Changes are saved to ~/.gemacs-custom-faces and persist across sessions." + "Interactively customize a face's visual attributes.\n Prompts for face name, then for each attribute (foreground, background, bold, italic).\n Changes are saved to ~/.jemacs-custom-faces and persist across sessions." (let* ([face-names (sort (hash-keys *faces*) (lambda (a b) @@ -342,10 +342,10 @@ (define *user-themes-dir*--cell (vector (path-expand - ".gemacs-themes" + ".jemacs-themes" (user-info-home (user-info (user-name)))))) (def (discover-user-themes) - "Scan ~/.gemacs-themes/*.ss for user-defined theme files.\n Returns a list of theme names (symbols)." + "Scan ~/.jemacs-themes/*.ss for user-defined theme files.\n Returns a list of theme names (symbols)." (with-catch (lambda (e) (list)) (lambda () @@ -362,7 +362,7 @@ theme-files)) (list))))) (def (load-user-theme-file! theme-name) - "Load a user theme file from ~/.gemacs-themes/THEME-NAME.ss\n Returns #t on success, #f on failure." + "Load a user theme file from ~/.jemacs-themes/THEME-NAME.ss\n Returns #t on success, #f on failure." (with-catch (lambda (e) #f) (lambda () @@ -380,7 +380,7 @@ (unless (eof-object? form) (eval form) (loop)))) #t)))))))) (def (cmd-load-theme app) - "Switch to a different color theme (built-in or user-defined from ~/.gemacs-themes/)." + "Switch to a different color theme (built-in or user-defined from ~/.jemacs-themes/)." (let* ([builtin-themes (theme-names)] [user-themes (discover-user-themes)] [all-themes (append builtin-themes user-themes)] @@ -415,7 +415,7 @@ (string-append "Theme: " input - " (from ~/.gemacs-themes/)"))) + " (from ~/.jemacs-themes/)"))) (echo-error! (app-state-echo app) (string-append @@ -879,7 +879,7 @@ (lambda (e) (let ([msg (with-output-to-string (lambda () (display-exception e)))]) - (gemacs-log! "cmd-term: gsh init failed: " msg) + (jemacs-log! "cmd-term: gsh init failed: " msg) (verbose-log! "cmd-term: gsh init FAILED: " msg) (echo-error! (app-state-echo app) --- a/lib/jerboa-emacs/qt/commands-core.sls +++ b/lib/jerboa-emacs/qt/commands-core.sls @@ -327,13 +327,13 @@ (and recorded current (> current recorded))))) (define *dir-locals-cache*--cell (vector (make-hash-table))) (def (find-dir-locals-file dir) - "Search DIR and parent directories for .gemacs-config file." + "Search DIR and parent directories for .jemacs-config file." (let loop ([d dir] [depth 0]) (cond [(> depth 50) #f] [(or (not d) (string=? d "") (string=? d "/")) #f] [else - (let ([config-path (path-expand ".gemacs-config" d)]) + (let ([config-path (path-expand ".jemacs-config" d)]) (if (file-exists? config-path) config-path (let* ([stripped (if (and (> (string-length d) 1) --- a/lib/jerboa-emacs/qt/commands-edit.sls +++ b/lib/jerboa-emacs/qt/commands-edit.sls @@ -897,7 +897,7 @@ (lambda (e) (let ([msg (with-output-to-string (lambda () (display-exception e)))]) - (gemacs-log! "cmd-shell: gsh init failed: " msg) + (jemacs-log! "cmd-shell: gsh init failed: " msg) (echo-error! (app-state-echo app) (string-append "Shell failed: " msg)))) --- a/lib/jerboa-emacs/qt/commands-edit2.sls +++ b/lib/jerboa-emacs/qt/commands-edit2.sls @@ -1169,7 +1169,7 @@ (app-state-echo app) (string-append "Macros: " (string-join names ", ")))))) (def (cmd-save-kbd-macros app) - "Save named keyboard macros to ~/.gemacs-macros." + "Save named keyboard macros to ~/.jemacs-macros." (let ([named (app-state-macro-named app)]) (if (= (hash-length named) 0) (echo-message! (app-state-echo app) "No macros to save") @@ -1178,7 +1178,7 @@ (echo-error! (app-state-echo app) "Error saving macros")) (lambda () (let ([path (path-expand - ".gemacs-macros" + ".jemacs-macros" (user-info-home (user-info (user-name))))]) (call-with-output-file path @@ -1195,7 +1195,7 @@ (number->string (hash-length named)) " macros"))))))) (def (cmd-load-kbd-macros app) - "Load named keyboard macros from ~/.gemacs-macros." + "Load named keyboard macros from ~/.jemacs-macros." (with-catch (lambda (e) (echo-message! @@ -1203,7 +1203,7 @@ "No saved macros found")) (lambda () (let* ([path (path-expand - ".gemacs-macros" + ".jemacs-macros" (user-info-home (user-info (user-name))))] [named (app-state-macro-named app)]) (call-with-input-file --- a/lib/jerboa-emacs/qt/commands-file.sls +++ b/lib/jerboa-emacs/qt/commands-file.sls @@ -1045,7 +1045,7 @@ (define *bookmarks-path*--cell (vector (path-expand - ".gemacs-bookmarks" + ".jemacs-bookmarks" (user-info-home (user-info (user-name)))))) (def (bookmarks-save! app) "Persist bookmarks to disk. Format: one line per bookmark: name\tfile-path\tposition" --- a/lib/jerboa-emacs/qt/commands-ide.sls +++ b/lib/jerboa-emacs/qt/commands-ide.sls @@ -430,8 +430,8 @@ (app-state-echo app) (string-append "Column: " (number->string col))))) (def (cmd-emacs-version app) - "Show gemacs version." - (echo-message! (app-state-echo app) "gemacs (Qt backend)")) + "Show jemacs version." + (echo-message! (app-state-echo app) "jemacs (Qt backend)")) (def (run-git-command app args buffer-name) "Run a git command async and show output in a buffer." (let* ([buf (current-qt-buffer app)] --- a/lib/jerboa-emacs/qt/commands-ide2.sls +++ b/lib/jerboa-emacs/qt/commands-ide2.sls @@ -605,7 +605,7 @@ (lambda (job) (with-catch (lambda (e) - (gemacs-log! + (jemacs-log! "wgrep write error: " (object->string e))) (lambda () @@ -700,7 +700,7 @@ (define *session-path*--cell (vector (path-expand - ".gemacs-session" + ".jemacs-session" (user-info-home (user-info (user-name)))))) (def (session-save! app) "Save current session (open file buffers + positions) to disk." --- a/lib/jerboa-emacs/qt/commands-modes.sls +++ b/lib/jerboa-emacs/qt/commands-modes.sls @@ -211,7 +211,7 @@ (let* ([port (open-process (list 'path: "curl" 'arguments: (list "-sL" "-m" "10" "-A" - "Mozilla/5.0 (compatible; gemacs eww)" url) + "Mozilla/5.0 (compatible; jemacs eww)" url) 'stdout-redirection: #t 'stderr-redirection: #f 'pseudo-terminal: #f))] [output (read-line port #f)]) @@ -221,7 +221,7 @@ "Fetch a URL async using curl. Calls (callback html-or-#f) on UI thread." (async-process! (string-append - "curl -sL -m 10 -A 'Mozilla/5.0 (compatible; gemacs eww)' " + "curl -sL -m 10 -A 'Mozilla/5.0 (compatible; jemacs eww)' " "'" (string-map (lambda (c) (if (char=? c #\') #\_ c)) url) "'") @@ -768,10 +768,10 @@ (define *diary-file*--cell (vector (path-expand - ".gemacs-diary" + ".jemacs-diary" (user-info-home (user-info (user-name)))))) (def (diary-entries-for-month year month) - "Read diary entries for year/month from ~/.gemacs-diary.\n Format: YYYY-MM-DD entry text" + "Read diary entries for year/month from ~/.jemacs-diary.\n Format: YYYY-MM-DD entry text" (if (not (file-exists? *diary-file*)) (list) (with-catch @@ -807,7 +807,7 @@ (qt-text-document-set-modified! (buffer-doc-pointer buf) #f) (qt-plain-text-edit-set-cursor-position! ed 0))))) (def (cmd-diary-insert-entry app) - "Add a diary entry for today to ~/.gemacs-diary." + "Add a diary entry for today to ~/.jemacs-diary." (let* ([date-str (with-catch (lambda (e) "2026-01-01") (lambda () @@ -983,7 +983,7 @@ (define *custom-keys-path*--cell (vector (path-expand - ".gemacs-keys" + ".jemacs-keys" (user-info-home (user-info (user-name)))))) (def (cmd-global-set-key app) "Bind a key to a command interactively." @@ -1109,10 +1109,10 @@ (define *init-file-path*--cell (vector (path-expand - ".gemacs-init.ss" + ".jemacs-init.ss" (user-info-home (user-info (user-name)))))) (def (load-init-file!) - "Load user init file (~/.gemacs-init.ss) if it exists." + "Load user init file (~/.jemacs-init.ss) if it exists." (with-catch (lambda (e) #f) (lambda () @@ -1157,7 +1157,7 @@ (define *scratch-file-path*--cell (vector (path-expand - ".gemacs-scratch" + ".jemacs-scratch" (user-info-home (user-info (user-name)))))) (def (scratch-save!) "Save scratch buffer contents to disk." --- a/lib/jerboa-emacs/qt/commands-modes2.sls +++ b/lib/jerboa-emacs/qt/commands-modes2.sls @@ -806,12 +806,12 @@ "Show use-package statistics." (echo-message! (app-state-echo app) - "Gemacs: all packages built-in. No external packages to report.")) + "Jemacs: all packages built-in. No external packages to report.")) (def (cmd-straight-use-package app) - "Configure straight.el package — N/A in gemacs." + "Configure straight.el package — N/A in jemacs." (echo-message! (app-state-echo app) - "Gemacs uses built-in packages. straight.el not applicable.")) + "Jemacs uses built-in packages. straight.el not applicable.")) (def (cmd-which-key-show-top-level app) "Show all top-level key bindings — delegates to describe-bindings." (cmd-describe-bindings app)) @@ -1264,10 +1264,10 @@ "Prescient mode enabled" "Prescient mode disabled"))) (def (cmd-no-littering-mode app) - "No-littering mode — gemacs uses ~/.gemacs-* by default." + "No-littering mode — jemacs uses ~/.jemacs-* by default." (echo-message! (app-state-echo app) - "Gemacs uses ~/.gemacs-* files; no littering by default")) + "Jemacs uses ~/.jemacs-* files; no littering by default")) (def (fmt-bytes-short b) "Format byte count for display." (cond @@ -1283,7 +1283,7 @@ " B")])) (def (cmd-benchmark-init-show-durations app) "Show runtime statistics — Chez version, platform." - (let* ([out (string-append "=== Gemacs Runtime Statistics ===\n\n" + (let* ([out (string-append "=== Jemacs Runtime Statistics ===\n\n" "Chez: " (scheme-version) "\n" "Platform: " (symbol->string (machine-type)) "\n")] --- a/lib/jerboa-emacs/qt/commands-parity.sls +++ b/lib/jerboa-emacs/qt/commands-parity.sls @@ -1085,9 +1085,9 @@ (def (cmd-select-window-9 app) (cmd-select-window-by-number app 9)) (def (cmd-help-with-tutorial app) - "Show the gemacs tutorial (C-h t)." - (let* ([text (string-append "=== Gemacs Tutorial ===\n\n" - "Welcome to Gemacs, a Gerbil Scheme Emacs replacement.\n\n" + "Show the jemacs tutorial (C-h t)." + (let* ([text (string-append "=== Jemacs Tutorial ===\n\n" + "Welcome to Jemacs, a Gerbil Scheme Emacs replacement.\n\n" "== Basic Movement ==\n" " C-f / C-b Forward / backward character\n" " M-f / M-b Forward / backward word\n" @@ -1127,7 +1127,7 @@ " M-RET Insert heading\n" " C-c C-t Toggle TODO\n" " C-c C-c Execute src block\n\n" - "== Gemacs-Specific ==\n" + "== Jemacs-Specific ==\n" " M-x magit-status Git integration\n" " M-x treemacs File tree\n" " M-x shell Shell\n" --- a/lib/jerboa-emacs/qt/commands-parity3.sls +++ b/lib/jerboa-emacs/qt/commands-parity3.sls @@ -297,7 +297,7 @@ "Use M-x yas-insert-snippet for snippets") (yas-visit-snippet-file . - "Snippet files managed via ~/.gemacs-snippets")))) + "Snippet files managed via ~/.jemacs-snippets")))) (def (qt-register-parity3-stubs!) "Register stub commands for Qt parity." (for-each --- a/lib/jerboa-emacs/qt/commands-parity3b.sls +++ b/lib/jerboa-emacs/qt/commands-parity3b.sls @@ -625,7 +625,7 @@ (app-state-echo app) "Stack: (empty — cleared)")) (def (cmd-server-start app) - "Show IPC server status — gemacs-client opens files in this session." + "Show IPC server status — jemacs-client opens files in this session." (if (file-exists? *ipc-server-file*) (let* ([addr (with-exception-catcher (lambda (e) "unknown") @@ -636,11 +636,11 @@ [msg (string-append "Server running on " (or addr "unknown") - " — use: gemacs-client <file>")]) + " — use: jemacs-client <file>")]) (echo-message! (app-state-echo app) msg)) (echo-message! (app-state-echo app) - "No server running (start gemacs-qt to enable)"))) + "No server running (start jemacs-qt to enable)"))) (def (cmd-server-edit app) (execute-command! app 'find-file)) (def (cmd-server-force-delete app) @@ -1124,7 +1124,7 @@ (let* ([ed (current-qt-editor app)] [report (with-output-to-string (lambda () - (display "Gemacs Memory Usage\n") + (display "Jemacs Memory Usage\n") (display (make-string 40 #\-)) (display "\n") (display "Chez: ") @@ -1945,11 +1945,11 @@ (def (cmd-complete-word-from-buffer app) (execute-command! app 'hippie-expand)) (def (cmd-add-dir-local-variable app) - "Prompt for variable and value, append to .gemacs-config in project root." + "Prompt for variable and value, append to .jemacs-config in project root." (let* ([buf (current-qt-buffer app)] [fp (and buf (buffer-file-path buf))] [dir (if fp (path-directory fp) (current-directory))] - [config-path (path-expand ".gemacs-config" dir)] + [config-path (path-expand ".jemacs-config" dir)] [var (qt-echo-read-string app "Dir-local variable: ")]) (when (and var (> (string-length var) 0)) (let ([val (qt-echo-read-string --- a/lib/jerboa-emacs/qt/commands-parity5.sls +++ b/lib/jerboa-emacs/qt/commands-parity5.sls @@ -329,7 +329,7 @@ ""))] [template-dir (string-append (getenv "HOME" "/tmp") - "/.gemacs-templates")] + "/.jemacs-templates")] [template-file (string-append template-dir "/" ext)]) (cond [(and (not (string=? ext "")) (file-exists? template-file)) @@ -526,7 +526,7 @@ (execute-command! app 'ispell-word)) (def (cmd-help-for-help app) (let* ([fr (app-state-frame app)] - [help-text (string-append "Gemacs Help System\n" + [help-text (string-append "Jemacs Help System\n" "==================\n\n" "You have typed C-h, the help character. Type a Help option:\n\n" "Key Bindings:\n" @@ -568,7 +568,7 @@ " M-x occur Show matching lines\n\n" "Other:\n" " M-x Execute command by name\n" " C-g Cancel current operation\n" - " C-x C-c Quit Gemacs\n")]) + " C-x C-c Quit Jemacs\n")]) (let* ([win (qt-current-window fr)] [ed (qt-edit-window-editor win)] [help-buf (qt-buffer-create! "*Help*" ed #f)]) @@ -1068,7 +1068,7 @@ [ed (qt-edit-window-editor win)] [buf (qt-buffer-create! "*Customize*" ed #f)] [groups (custom-groups)] - [lines (list "Gemacs Customize" (make-string 60 #\=) "")]) + [lines (list "Jemacs Customize" (make-string 60 #\=) "")]) (for-each (lambda (group) (set! lines --- a/lib/jerboa-emacs/qt/commands-search.sls +++ b/lib/jerboa-emacs/qt/commands-search.sls @@ -1229,7 +1229,7 @@ [current-text (qt-plain-text-edit-text ed)] [file-text (read-file-as-string path)] [tmp-path (string-append - "/tmp/gemacs-diff-" + "/tmp/jemacs-diff-" (number->string (random-integer 100000)))] [_ (write-string-to-file tmp-path current-text)] [result (with-catch --- a/lib/jerboa-emacs/qt/commands-sexp2.sls +++ b/lib/jerboa-emacs/qt/commands-sexp2.sls @@ -327,7 +327,7 @@ [files (filter (lambda (f) f) (map buffer-file-path bufs))] [session-file (string-append (getenv "HOME" "/tmp") - "/.gemacs-session")]) + "/.jemacs-session")]) (with-catch (lambda (e) (echo-message! (app-state-echo app) "Error saving session")) @@ -348,7 +348,7 @@ "Restore desktop session from saved file list." (let ([session-file (string-append (getenv "HOME" "/tmp") - "/.gemacs-session")]) + "/.jemacs-session")]) (if (file-exists? session-file) (with-catch (lambda (e) @@ -389,13 +389,13 @@ "Clear saved session file." (let ([session-file (string-append (getenv "HOME" "/tmp") - "/.gemacs-session")]) + "/.jemacs-session")]) (when (file-exists? session-file) (delete-file session-file)) (echo-message! (app-state-echo app) "Session cleared"))) (define *qt-history-file*--cell (vector - (string-append (getenv "HOME" "/tmp") "/.gemacs-history"))) + (string-append (getenv "HOME" "/tmp") "/.jemacs-history"))) (def (cmd-savehist-save app) "Save command history to disk." (with-catch --- a/lib/jerboa-emacs/qt/commands-shell.sls +++ b/lib/jerboa-emacs/qt/commands-shell.sls @@ -478,7 +478,7 @@ (if *follow-mode* "Follow mode ON" "Follow mode OFF"))) (define *command-history-file*--cell (vector - (string-append (getenv "HOME" "/tmp") "/.gemacs-history"))) + (string-append (getenv "HOME" "/tmp") "/.jemacs-history"))) (def (savehist-save!) "Save command history to file (recency list + shared frequency history)." (with-catch @@ -1858,7 +1858,7 @@ (define *abbrevs-path*--cell (vector (path-expand - ".gemacs-abbrevs" + ".jemacs-abbrevs" (user-info-home (user-info (user-name)))))) (def (abbrevs-save!) "Persist abbreviation table to disk." --- a/lib/jerboa-emacs/qt/commands-shell2.sls +++ b/lib/jerboa-emacs/qt/commands-shell2.sls @@ -76,7 +76,7 @@ (echo-error! (app-state-echo app) "Sudo save failed")) (lambda () (let ([tmp (string-append - "/tmp/.gemacs-sudo-" + "/tmp/.jemacs-sudo-" (number->string (random-integer 999999)))]) (call-with-output-file tmp @@ -380,8 +380,8 @@ (string-append "Buffer not found: " other-name)) (let* ([ed (current-qt-editor app)] [text1 (qt-plain-text-edit-text ed)] - [tmp1 "/tmp/gemacs-ediff-1.txt"] - [tmp2 "/tmp/gemacs-ediff-2.txt"]) + [tmp1 "/tmp/jemacs-ediff-1.txt"] + [tmp2 "/tmp/jemacs-ediff-2.txt"]) (call-with-output-file tmp1 (lambda (p) (display text1 p))) @@ -662,7 +662,7 @@ (let loop ([i hunk-line] [acc (list)]) (if (>= i (length lines)) (let* ([hunk-text (string-join (reverse acc) "\n")] - [tmp "/tmp/gemacs-hunk.patch"]) + [tmp "/tmp/jemacs-hunk.patch"]) (with-catch (lambda (e) (echo-error! @@ -701,7 +701,7 @@ (let loop ([i hunk-line] [acc (list)]) (if (>= i (length lines)) (let* ([hunk-text (string-join (reverse acc) "\n")] - [tmp "/tmp/gemacs-revert-hunk.patch"]) + [tmp "/tmp/jemacs-revert-hunk.patch"]) (with-catch (lambda (e) (echo-error! @@ -826,7 +826,7 @@ (echo-error! (app-state-echo app) "SSH fetch failed")) (lambda () (let* ([tmp (string-append - "/tmp/gemacs-ssh-" + "/tmp/jemacs-ssh-" (number->string (random-integer 99999)))] [proc (open-process (list 'path: "scp" 'arguments: (list path tmp) @@ -1009,7 +1009,7 @@ (define *qt-elfeed-entries*--cell (vector '())) (def (qt-elfeed-db-path) (let ([home (getenv "HOME" "/tmp")]) - (string-append home "/.gemacs-elfeed-feeds"))) + (string-append home "/.jemacs-elfeed-feeds"))) (def (qt-elfeed-load-feeds!) (let ([path (qt-elfeed-db-path)]) (when (file-exists? path) --- a/lib/jerboa-emacs/qt/commands-vcs.sls +++ b/lib/jerboa-emacs/qt/commands-vcs.sls @@ -22,8 +22,8 @@ cmd-list-recent-files cmd-clear-recent-files cmd-recentf-open cmd-recentf-cleanup cmd-multi-occur cmd-align-current cmd-clear-rectangle cmd-describe-mode - cmd-describe-face cmd-describe-function *gemacs-variables* - gemacs-var-entry gemacs-describe-variables + cmd-describe-face cmd-describe-function *jemacs-variables* + jemacs-var-entry jemacs-describe-variables cmd-describe-variable cmd-describe-syntax cmd-insert-lorem-ipsum cmd-insert-current-date-iso cmd-insert-time *eldoc-mode* *gerbil-signatures* @@ -908,7 +908,7 @@ (define *recent-files-path*--cell (vector (path-expand - ".gemacs-recent-files" + ".jemacs-recent-files" (user-info-home (user-info (user-name)))))) (def (recent-files-add! path) "Add a file path to the recent files list (most recent first, no duplicates)." @@ -1234,61 +1234,61 @@ (echo-error! (app-state-echo app) (string-append name " is not a command"))))))) - (define *gemacs-variables*--cell (vector '())) - (def (gemacs-var-entry name thunk description) + (define *jemacs-variables*--cell (vector '())) + (def (jemacs-var-entry name thunk description) (list name thunk description)) - (def (gemacs-describe-variables) + (def (jemacs-describe-variables) "Build list of describable editor variables with current values." (list - (gemacs-var-entry + (jemacs-var-entry "debug-on-error" (lambda () *debug-on-error*) "Enter debugger on error") - (gemacs-var-entry + (jemacs-var-entry "hl-line-mode" (lambda () *hl-line-mode*) "Highlight current line") - (gemacs-var-entry + (jemacs-var-entry "hl-todo-mode" (lambda () *hl-todo-mode*) "Highlight TODO keywords") - (gemacs-var-entry + (jemacs-var-entry "hl-todo-keywords" (lambda () *hl-todo-keywords*) "Keywords highlighted by hl-todo-mode") - (gemacs-var-entry + (jemacs-var-entry "wgrep-mode" (lambda () *wgrep-mode*) "Writable grep buffer active") - (gemacs-var-entry + (jemacs-var-entry "magit-dir" (lambda () *magit-dir*) "Current magit working directory") - (gemacs-var-entry + (jemacs-var-entry "magit-amend-mode" (lambda () *magit-amend-mode*) "Amend mode for magit commit") - (gemacs-var-entry + (jemacs-var-entry "current-workspace" (lambda () *current-workspace*) "Active workspace name") - (gemacs-var-entry + (jemacs-var-entry "tab-width" (lambda () *tab-width*) "Width of tab stops") - (gemacs-var-entry + (jemacs-var-entry "indent-tabs-mode" (lambda () *indent-tabs-mode*) "Use tabs for indentation") - (gemacs-var-entry + (jemacs-var-entry "word-wrap" (lambda () *word-wrap-on*) "Word wrap mode") - (gemacs-var-entry + (jemacs-var-entry "undo-history-max" (lambda () *undo-history-max*) "Max undo snapshots per buffer") - (gemacs-var-entry + (jemacs-var-entry "recenter-position" (lambda () *recenter-position-qt*) "Recentering position (center/top/bottom)"))) @@ -2088,11 +2088,11 @@ *recent-files-path*--cell 0 val)])) - (define-syntax *gemacs-variables* + (define-syntax *jemacs-variables* (identifier-syntax - [id (vector-ref *gemacs-variables*--cell 0)] + [id (vector-ref *jemacs-variables*--cell 0)] [(set! id val) (vector-set! - *gemacs-variables*--cell + *jemacs-variables*--cell 0 val)])) (define-syntax *eldoc-mode* --- a/lib/jerboa-emacs/qt/commands.sls +++ b/lib/jerboa-emacs/qt/commands.sls @@ -206,7 +206,7 @@ (if (not config) (echo-message! (app-state-echo app) - "No .gemacs-config found") + "No .jemacs-config found") (let ([settings (read-dir-locals config)]) (echo-message! (app-state-echo app) @@ -2007,7 +2007,7 @@ (register-command! 'set-window-dedicated cmd-set-window-dedicated) - (register-command! 'gemacs-doc cmd-gemacs-doc) + (register-command! 'jemacs-doc cmd-jemacs-doc) (register-command! 'dired-async-copy cmd-dired-async-copy) (register-command! 'dired-async-move cmd-dired-async-move) (register-command! @@ -2148,16 +2148,16 @@ (string-append "Header: " (or path (buffer-name buf))))) (echo-message! echo "Header line mode disabled")))) (def (cmd-project-keymap-load app) - "Load project-specific keybindings from .gemacs-keys in project root." + "Load project-specific keybindings from .jemacs-keys in project root." (let* ([root (project-current app)] [echo (app-state-echo app)]) (if (not root) (echo-message! echo "Not in a project") - (let ([keyfile (path-expand ".gemacs-keys" root)]) + (let ([keyfile (path-expand ".jemacs-keys" root)]) (if (not (file-exists? keyfile)) (echo-message! echo - (string-append "No .gemacs-keys in " root)) + (string-append "No .jemacs-keys in " root)) (with-catch (lambda (e) (echo-message! @@ -2311,11 +2311,11 @@ (let* ([ed (current-qt-editor app)] [echo (app-state-echo app)] [fr (app-state-frame app)] - [content (string-append "Gemacs Info\n" "===========\n\n" + [content (string-append "Jemacs Info\n" "===========\n\n" "* Commands: M-x to run any command\n" "* Keybindings: C-h k to describe a key\n" "* Org Mode: Full org support with babel, export, agenda\n" - "* Configuration: ~/.gemacs-init, ~/.gemacs-config\n\n" + "* Configuration: ~/.jemacs-init, ~/.jemacs-config\n\n" "Movement: C-f/C-b (char), M-f/M-b (word), C-n/C-p (line)\n" "Editing: C-k (kill), C-y (yank), C-/ (undo), C-w (cut)\n" "Files: C-x C-f (open), C-x C-s (save), C-x b (switch)\n" @@ -2487,8 +2487,8 @@ old-name " → " new-name))))))))) - (def (cmd-gemacs-doc app) - "Browse gemacs documentation (Qt)." + (def (cmd-jemacs-doc app) + "Browse jemacs documentation (Qt)." (let* ([ed (current-qt-editor app)] [echo (app-state-echo app)] [fr (app-state-frame app)] @@ -2499,7 +2499,7 @@ (let* ([key (string-downcase topic)] [content (cond [(string=? key "getting-started") - "Getting Started with Gemacs\n==========================\n\nOpen: C-x C-f | Save: C-x C-s | Quit: C-x C-c\nSearch: C-s | Replace: M-% | Undo: C-/\nWindows: C-x 2 (split), C-x o (other), C-x 1 (unsplit)\nBuffers: C-x b (switch), C-x k (kill)\nHelp: C-h k (describe key), M-x (run command)\n"] + "Getting Started with Jemacs\n==========================\n\nOpen: C-x C-f | Save: C-x C-s | Quit: C-x C-c\nSearch: C-s | Replace: M-% | Undo: C-/\nWindows: C-x 2 (split), C-x o (other), C-x 1 (unsplit)\nBuffers: C-x b (switch), C-x k (kill)\nHelp: C-h k (describe key), M-x (run command)\n"] [(string=? key "keybindings") "Keybinding Reference\n====================\n\nC-f/C-b Forward/Back | M-f/M-b Word | C-n/C-p Line\nC-a/C-e BOL/EOL | M-</M-> BOB/EOB | C-v/M-v Page\nC-d Del | C-k Kill line | C-w Cut | M-w Copy | C-y Yank\nC-x C-f Open | C-x C-s Save | C-x b Switch | C-x k Kill\nC-s Search | C-r Reverse | M-% Replace\nC-x 2/3 Split | C-x 0/1 Delete | C-x o Other\n"] [(string=? key "commands") @@ -2603,7 +2603,7 @@ " ;; " desc) lines)))) *qt-customizable-vars*) - (let* ([text (string-append "Gemacs Customize\n" "================\n\n" + (let* ([text (string-append "Jemacs Customize\n" "================\n\n" "Current settings:\n\n" (string-join (reverse lines) "\n") "\n\nUse M-x set-variable to change a setting.\n")] @@ -2616,7 +2616,7 @@ (qt-plain-text-edit-set-cursor-position! ed 0)))) (def *qt-process-sentinels* (make-hash-table)) (def *qt-process-filters* (make-hash-table)) - (def *qt-plugin-directory* "~/.gemacs-plugins") + (def *qt-plugin-directory* "~/.jemacs-plugins") (def *qt-loaded-plugins* (list)) (def (cmd-load-plugin app) "Load a Gerbil Scheme plugin file (Qt)." @@ -2657,7 +2657,7 @@ [ss-files (filter (lambda (f) (string-suffix? ".ss" f)) available)] - [text (string-append "Gemacs Plugins\n" "==============\n\n" + [text (string-append "Jemacs Plugins\n" "==============\n\n" "Loaded plugins:\n" (if (null? *qt-loaded-plugins*) " (none)\n" --- a/lib/jerboa-emacs/qt/lsp-client.sls +++ b/lib/jerboa-emacs/qt/lsp-client.sls @@ -26,7 +26,7 @@ getenv path-extension path-absolute? thread? make-mutex mutex? mutex-name) (std sugar) (std text json) (std misc string) (std os fdio) - (only (jerboa-emacs core) *lsp-server-command* gemacs-log!) + (only (jerboa-emacs core) *lsp-server-command* jemacs-log!) (jerboa-emacs async) (jerboa core) (jerboa runtime)) (define *lsp-process*--cell (vector #f)) (define *lsp-reader-thread*--cell (vector #f)) @@ -365,7 +365,7 @@ params "clientInfo" (let ([h (make-hash-table)]) - (hash-put! h "name" "gemacs") + (hash-put! h "name" "jemacs") (hash-put! h "version" "1.0") h)) (lsp-send-request! --- a/lib/jerboa-emacs/qt/main.sls +++ b/lib/jerboa-emacs/qt/main.sls @@ -18,19 +18,19 @@ (def (main . args) (cond [(member "--version" args) - (displayln "gemacs " (cdar version-manifest)) + (displayln "jemacs " (cdar version-manifest)) (for-each (lambda (p) (when (not (string=? (car p) "")) (displayln (car p) " " (cdr p)))) (cdr version-manifest))] [(member "--help" args) - (displayln "Usage: gemacs-qt [OPTIONS] [FILES...]") + (displayln "Usage: jemacs-qt [OPTIONS] [FILES...]") (displayln "Options:") (displayln " --version Show version information") (displayln " --help Show this help message") (displayln - " --verbose Log all Qt calls and commands to ~/.gemacs-verbose.log") + " --verbose Log all Qt calls and commands to ~/.jemacs-verbose.log") (displayln " --repl <port> Start TCP debug REPL on given port (0=auto)")] [else (apply qt-main args)]))) --- a/lib/jerboa-emacs/qt/window.sls +++ b/lib/jerboa-emacs/qt/window.sls @@ -199,7 +199,8 @@ ed SCI_STYLESETBACK STYLE_LINENUMBER - (rgb->sci r g b)))) + (rgb->sci r g b)) + (sci-send ed 2260 0 (rgb->sci r g b)))) (when (face-fg ln-face) (let-values ([(r g b) (parse-hex-color (face-fg ln-face))]) @@ -214,6 +215,7 @@ SCI_STYLESETBACK STYLE_LINENUMBER (rgb->sci 32 32 32)) + (sci-send ed 2260 0 (rgb->sci 32 32 32)) (sci-send ed SCI_STYLESETFORE @@ -234,6 +236,18 @@ (qt-apply-editor-theme! ed) (sci-send ed SCI_SETMARGINTYPEN 0 SC_MARGIN_NUMBER) (sci-send ed SCI_SETMARGINWIDTHN 0 50) + (sci-send ed SCI_SETMARGINWIDTHN 1 0) + (sci-send ed SCI_SETMARGINWIDTHN 2 0) + (sci-send ed SCI_SETMARGINWIDTHN 3 0) + (sci-send ed SCI_SETMARGINWIDTHN 4 0) + (let ([bg (let ([f (face-get 'default)]) + (if (and f (face-bg f)) + (let-values ([(r g b) + (parse-hex-color (face-bg f))]) + (rgb->sci r g b)) + (rgb->sci 30 30 46)))]) + (sci-send ed 2290 1 bg) + (sci-send ed 2291 1 bg)) (sci-send ed SCI_SETCARETLINEVISIBLE 1) (sci-send ed SCI_SETTABWIDTH 4) (sci-send ed SCI_SETINDENT 4) (sci-send ed 2563 1) --- a/src/jerboa-emacs/app.ss +++ b/src/jerboa-emacs/app.ss @@ -1,5 +1,5 @@ ;;; -*- Gerbil -*- -;;; Main application and event loop for gemacs +;;; Main application and event loop for jemacs (export app-init! app-run! main tui-session-save!) @@ -75,7 +75,7 @@ ;;;============================================================================ (def *tui-session-path* - (path-expand ".gemacs-session" (user-info-home (user-info (user-name))))) + (path-expand ".jemacs-session" (user-info-home (user-info (user-name))))) (def (tui-session-save! app) "Save current session (open file buffers) to disk." @@ -218,7 +218,7 @@ (if (and saved (> (string-length saved) 0)) (editor-set-text ed saved) (editor-set-text ed (string-append - ";; Gerbil Emacs — *scratch*\n" + ";; Jemacs — *scratch*\n" ";;\n" ";; Key Bindings:\n" ";; C-x C-f Find file C-x C-s Save buffer\n" @@ -239,7 +239,7 @@ (for-each (lambda (file) (open-file-in-app! app file)) files) - ;; Start IPC server for gemacs-client + ;; Start IPC server for jemacs-client (start-ipc-server!) ;; Run after-init-hook (parity with Qt layer) @@ -309,7 +309,7 @@ (when mode-cmd (mode-cmd app))))))))) ;;;============================================================================ -;;; IPC polling (files opened via gemacs-client) +;;; IPC polling (files opened via jemacs-client) ;;;============================================================================ (def (poll-ipc-files! app) @@ -557,7 +557,7 @@ ;; Poll AI chat output (poll-chat-output! app) - ;; Poll IPC queue for files opened via gemacs-client + ;; Poll IPC queue for files opened via jemacs-client (poll-ipc-files! app) ;; Tick pulse highlight countdown --- a/src/jerboa-emacs/core.ss +++ b/src/jerboa-emacs/core.ss @@ -109,9 +109,6 @@ ;; Runtime error log file init-jemacs-log! jemacs-log! - ;; Compatibility aliases (Qt source files use gemacs-* naming) - init-gemacs-log! - gemacs-log! ;; Verbose hang-diagnosis log (~/.jemacs-verbose.log) init-verbose-log! @@ -1910,9 +1907,8 @@ (newline port) (force-output port)))) -;; Compatibility aliases used by Qt source files (ported from gerbil-emacs naming) -(def gemacs-log! jemacs-log!) -(def init-gemacs-log! init-jemacs-log!) +;; Legacy aliases (kept for backward compatibility) +;; gemacs-log! and init-gemacs-log! removed — use jemacs-log! / init-jemacs-log! directly (def (init-verbose-log!) "Open ~/.jemacs-verbose.log for append and enable verbose-log!. @@ -2170,9 +2166,11 @@ ;; Set of characters that can start a chord (uppercase) (def *chord-first-chars* (make-hash-table)) -;; Time window in milliseconds for second key of chord -(def *chord-timeout* 200) -(defvar! 'chord-timeout 200 "Milliseconds to wait for second key of a chord" +;; Time window in milliseconds for second key of chord. +;; Emacs key-chord.el uses 100ms for two-key and 200ms for same-key chords. +;; We use 300ms by default because Qt key event delivery adds latency. +(def *chord-timeout* 300) +(defvar! 'chord-timeout 300 "Milliseconds to wait for second key of a chord" setter: (lambda (v) (set! *chord-timeout* v)) type: 'integer type-args: '(50 . 1000) group: 'keybindings) --- a/src/jerboa-emacs/editor-cmds-a.ss +++ b/src/jerboa-emacs/editor-cmds-a.ss @@ -1861,9 +1861,9 @@ "Initialize the documentation topic database." (hash-put! *doc-topics* "getting-started" (string-append - "Getting Started with Gemacs\n" + "Getting Started with Jemacs\n" "==========================\n\n" - "Gemacs is a Gerbil Scheme-based Emacs-like editor.\n\n" + "Jemacs is a Gerbil Scheme-based Emacs-like editor.\n\n" "Quick start:\n" " 1. Open a file: C-x C-f\n" " 2. Edit text: just type\n" --- a/src/jerboa-emacs/editor-cmds-b.ss +++ b/src/jerboa-emacs/editor-cmds-b.ss @@ -2063,7 +2063,7 @@ (win (current-window fr)) (buf (buffer-create! "*Customize*" ed)) (groups (custom-groups)) - (lines ["Gemacs Customize" + (lines ["Jemacs Customize" "================" ""])) (buffer-attach! ed buf) (set! (edit-window-buffer win) buf) @@ -2185,7 +2185,7 @@ '())) (ss-files (filter (lambda (f) (string-suffix? ".ss" f)) available)) (text (string-append - "Gemacs Plugins\n" + "Jemacs Plugins\n" "==============\n\n" "Loaded plugins:\n" (if (null? *loaded-plugins*) --- a/src/jerboa-emacs/editor-core.ss +++ b/src/jerboa-emacs/editor-core.ss @@ -2337,7 +2337,7 @@ "Initialize built-in Info documentation topics."