init 스크립트에서 로그인 기능을 정의하고 싶지만 로그인 자격 증명을 하드 코딩하고 싶지 않습니다. 좋은 해결 방법은 init 스크립트가 로컬 파일에서 로그인 자격 증명을 읽고이 값을 변수로 저장하는 것입니다. 이렇게하면 로그인 자격 증명을 안전하게 유지하는 git 인덱스에서 파일을 제외시킬 수 있습니다.
이 방법에 대한 제안이나 파일에 정의 된 값으로 인수를 설정하는 방법이 있습니까?
예를 들어 내에서 다음을 사용하고 싶습니다 init.el
.
;; Set up our login variables here:
(setq file-location "~/.emacs.d/.login")
(setq erc-username "default-name")
(setq erc-password "default-password")
(setq erc-url "default-url")
(setq erc-port "default-port")
(defun read-lines (filePath)
"Return a list of lines of a file at filePath."
(with-temp-buffer
(insert-file-contents filePath)
(split-string (buffer-string) "\n" t)))
(if (file-exists-p file-location)
(progn (setq login-credentials (read-lines file-location))
(setq erc-username (nth 0 login-credentials))
(setq erc-password (nth 1 login-credentials))
(setq erc-url (nth 2 login-credentials))
(setq erc-port (nth 3 login-credentials)))
(message "No ERC login credentials provided. Please add login credentials as '<username>\n<password>\n<url>\n<port>' in ~/.emacs.d/.login to activate ERC mode."))
;; These message the values from my file correctly.
;; Everything up to this point works as expected
(message erc-username)
(message erc-password)
(message erc-url)
(message erc-port)
;; Use our login variables here
;; This doesn't work because the 'quote' function prevents evaluation of my variables, and a 'backquote' did not resolve it either
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(markdown-command "/usr/bin/pandoc")
'(tls-program (quote ("openssl s_client -connect %h:%p -no_ssl2 -ign_eof -CAfile ~/.ssl/spi_ca.pem -cert ~/.ssl/znc.pem")))
'(znc-servers (quote ((,erc-url ,erc-port t ((irc\.freenode\.net ,erc-username ,erc-password)))))))
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
)
내 예제는 hereznc.el
모듈을 사용합니다 . 및 에서 Emacs 구성으로 인한 자동 생성 코드를 수정 하고 있습니다.M-x customize-group RET znc RET
M-x customize-variable RET tls-program RET
위의 코드에서 내 문제는 변수가 custom-set-variables
위의 함수 내에서로드되지 않는다는 것 입니다. 파일에서 적절한 값을로드하면 잘 작동하는 것처럼 보이지만 인수로 사용할 수는 없습니다. 나는 이것이 quote
내용에 대한 평가를 방해 하는 기능 과 관련이 있다고 생각합니다 . ,
평가를 강제하기 위해 'backquote'( )를 시도했지만 작동하지 않습니다. 이 버그를 수정하거나 다른 접근 방식을 제공하기위한 제안은 매우 유용합니다.