내 Emacs 구성

내 Emacs 구성

Guix 공식 문서에서는 다음과 같이 설명합니다.완벽한 설정Guix 해킹에 사용됩니다. 나는 이 설명을 따랐고 설명된 대로 모든 것을 설정했지만 Geiser는 여전히 완전히 작동하지 않습니다. 나는 이것이 나에게 완성 기능을 제공하고 사물의 정의로 갈 수 있게 해줄 것이라고 생각합니다. 나는 몇 가지의 정의에 접근할 수 있지만 소수에 불과합니다. 대부분의 일은 불가능합니다. 완료는 현재 버퍼의 텍스트에만 기반한 것 같습니다.

내 Emacs 구성

(use-package geiser
  :ensure t
  :custom
  (geiser-default-implementation 'guile)
  (geiser-active-implementations '(guile))
  (geiser-implementations-alist '(((regexp "\\.scm$") guile))))

(use-package geiser-guile
  :ensure t
  :config
  (add-to-list 'geiser-guile-load-path "/home/lars/code/forks/guix")
  (add-to-list 'geiser-guile-load-path "/home/lars/code/guix/modules")
  (add-to-list 'geiser-guile-load-path "/home/lars/code/guix"))

(with-eval-after-load "geiser-guile" 
  (add-to-list 'geiser-guile-load-path "/home/lars/code/forks/guix")
  (add-to-list 'geiser-guile-load-path "/home/lars/code/guix/modules")
  (add-to-list 'geiser-guile-load-path "/home/lars/code/guix"))

REPL

M-x geiser-guile나는 Emacs에서 Geiser REPL을 사용하거나 호출합니다 M-x geiser.

Geiser REPL의 출력은 다음과 같습니다.

GNU Guile 3.0.9
Copyright (C) 1995-2023 Free Software Foundation, Inc.

Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'.
This program is free software, and you are welcome to redistribute it
under certain conditions; type `,show c' for details.

Enter `,help' for help.
scheme@(guile-user)> 

프롬프트에 이렇게 나와 있지만 guile-user내 생각에는 이렇게 말해야 한다고 생각합니다 guix-user.

guix repl그러나 터미널에서 실행하여 Guix REPL을 시작하면 출력은 다음과 같습니다.

GNU Guile 3.0.9
Copyright (C) 1995-2023 Free Software Foundation, Inc.

Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'.
This program is free software, and you are welcome to redistribute it
under certain conditions; type `,show c' for details.

Enter `,help' for help.
scheme@(guix-user)>

여기에 나와 있으니 참고하세요 guix-user.

guixGeiser REPL에서 모듈을 "사용"하려고 할 때:

,use (guix)
;;; note: auto-compilation is enabled, set GUILE_AUTO_COMPILE=0
;;;       or pass the --no-auto-compile argument to disable.
;;; compiling /home/lars/code/forks/guix/guix.scm
;;; compiling /home/lars/code/forks/guix/guix/packages.scm
;;; compiling /home/lars/code/forks/guix/guix/utils.scm
;;; WARNING: compilation of /home/lars/code/forks/guix/guix/utils.scm failed:
;;; no code for module (guix config)
;;; WARNING: compilation of /home/lars/code/forks/guix/guix/packages.scm failed:
;;; no code for module (guix config)
;;; compiling /home/lars/code/forks/guix/guix/store.scm
;;; WARNING: compilation of /home/lars/code/forks/guix/guix/store.scm failed:
;;; no code for module (guix config)
;;; WARNING: compilation of /home/lars/code/forks/guix/guix.scm failed:
;;; no code for module (guix config)
;;; compiling /home/lars/code/forks/guix/guix/derivations.scm
;;; compiling /home/lars/code/forks/guix/guix/diagnostics.scm
;;; WARNING: compilation of /home/lars/code/forks/guix/guix/diagnostics.scm failed:
;;; Unbound variable: trivial-format-string?
;;; WARNING: compilation of /home/lars/code/forks/guix/guix/derivations.scm failed:
;;; no code for module (gcrypt hash)
While executing meta-command:
no code for module (gcrypt hash)
scheme@(guile-user)>

Guix REPL에서 동일한 작업을 수행하면 잘 작동합니다.

scheme@(guix-user)> ,use (guix)
scheme@(guix-user)>

정의로 이동

Goto 정의는 다음 줄과 같은 일부 위치에서 작동합니다.

(gnu home services)

이것은 Gnu 홈 서비스의 소스로 바로 연결됩니다.

그러나 패키지 정의로 이동하려고 하면 작동하지 않습니다.

 (packages (list
            htop
            git
            alacritty
            tmux))

패키지 목록에 있는 패키지 정의로 이동하려고 하면 작동하지 않습니다.

마치다

패키지 이름의 시작 부분을 입력하여 모듈과 패키지를 완성하고 싶지만 아무것도 나타나지 않습니다. 때로는 동일한 버퍼에 있는 임의의 텍스트를 기반으로 임의의 완료가 발생하지만 대부분의 경우에는 그렇지 않습니다.

답변1

나는 다음 해결 방법을 통해 Geiser가 대부분 작동하도록 할 수 있었습니다.

래퍼 스크립트를 만듭니다.

#!/bin/bash
guix repl -L ~/code/guix -L ~/code/forks/guix "$@"

geiser-guile-binary이 스크립트를 가리키도록 변수를 설정합니다 . 현재 버퍼의 Guile 코드, 특히 (use-modules ...)필요한 네임스페이스를 추출하는 부분을 평가합니다.

또한 Guix 소스 코드의 로컬 복제본이 다음을 통해 컴파일되었는지 확인해야 했습니다.이 지침.

이를 통해 가져온 모듈에 포함된 모든 항목을 완료할 수 있으며 정의 조회도 수정됩니다. 그러나 아직 어떤 모듈을 사용할 수 있는지 완료되지 않았습니다.

관련 정보