Tôi muốn xác định chức năng đăng nhập trong tập lệnh init của mình, nhưng tôi không muốn mã hóa thông tin đăng nhập của mình. Tôi nghĩ rằng một cách giải quyết tốt là để tập lệnh init của tôi được đọc trong thông tin đăng nhập của tôi từ một tệp cục bộ và lưu các giá trị này dưới dạng các biến. Bằng cách đó, tôi có thể loại trừ tệp khỏi chỉ mục git của mình, điều này giúp bảo mật thông tin đăng nhập của tôi.
Có bất kỳ đề xuất nào về cách tiếp cận này hoặc các cách để đặt một đối số thành một giá trị được xác định trong một tệp không?
Ví dụ: tôi muốn sử dụng như sau trong 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.
)
Lưu ý rằng ví dụ của tôi sử dụng znc.el
mô-đun ở đây . Tôi đang sửa đổi mã được tạo tự động do các cấu hình Emacs trong M-x customize-group RET znc RET
và M-x customize-variable RET tls-program RET
.
Vấn đề của tôi với mã ở trên là các biến không được tải bên trong custom-set-variables
hàm của tôi ở trên. Tải các giá trị phù hợp từ một tệp có vẻ hoạt động tốt, nhưng tôi dường như không thể sử dụng chúng làm đối số. Tôi tin rằng điều này có liên quan đến quote
chức năng, ngăn chặn đánh giá nội dung của nó. Tôi đã thử một 'backquote' ( ,
) để buộc đánh giá, nhưng nó cũng không hoạt động. Bất kỳ đề xuất để sửa lỗi này hoặc đưa ra một cách tiếp cận khác sẽ rất hữu ích.