ฉันต้องการกำหนดฟังก์ชั่นเข้าสู่ระบบในสคริปต์ init ของฉัน แต่ฉันไม่ต้องการ hardcode หนังสือรับรองการเข้าสู่ระบบของฉัน ฉันคิดว่าวิธีแก้ปัญหาที่ดีคือการให้สคริปต์ 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.
)
โปรดทราบว่าตัวอย่างของฉันใช้znc.el
โมดูลที่นี่ ฉันกำลังปรับเปลี่ยนรหัส autogenerated ที่เกิดจากการกำหนดค่า Emacs ในและM-x customize-group RET znc RET
M-x customize-variable RET tls-program RET
ปัญหาของฉันกับรหัสข้างต้นคือตัวแปรไม่โหลดภายในcustom-set-variables
ฟังก์ชั่นของฉันข้างต้น การโหลดค่าที่เหมาะสมจากไฟล์ดูเหมือนว่าจะทำงานได้ดี แต่ฉันไม่สามารถใช้มันเป็นข้อโต้แย้งได้ ฉันเชื่อว่าสิ่งนี้เกี่ยวข้องกับquote
ฟังก์ชันซึ่งป้องกันการประเมินเนื้อหา ฉันพยายาม 'backquote' ( ,
) เพื่อบังคับให้ประเมินผล แต่ก็ไม่ทำงานเช่นกัน ข้อเสนอแนะใด ๆ เพื่อแก้ไขข้อผิดพลาดนี้หรือเสนอแนวทางอื่นจะมีประโยชน์มาก