Saya ingin mendefinisikan fungsi masuk dalam skrip init saya, tetapi saya tidak ingin meng-hardcode kredensial login saya. Saya pikir solusi yang baik adalah membuat skrip init saya membaca kredensial login saya dari file lokal dan menyimpan nilai-nilai ini sebagai variabel. Dengan begitu, saya dapat mengecualikan file dari indeks git saya, yang menjaga kredensial login saya aman.
Apakah ada saran tentang pendekatan ini, atau cara untuk mengatur argumen ke nilai yang didefinisikan dalam file?
Misalnya, saya ingin menggunakan yang berikut ini di 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.
)
Perhatikan bahwa contoh saya menggunakan znc.el
modul di sini . Saya memodifikasi kode yang dibuat secara otomatis yang dihasilkan dari konfigurasi Emacs di M-x customize-group RET znc RET
dan M-x customize-variable RET tls-program RET
.
Masalah saya dengan kode di atas adalah bahwa variabel tidak memuat di dalam custom-set-variables
fungsi saya di atas. Memuat nilai-nilai yang tepat dari suatu file tampaknya berfungsi dengan baik, tetapi sepertinya saya tidak dapat menggunakannya sebagai argumen. Saya percaya ini terkait dengan quote
fungsi, yang mencegah evaluasi isinya. Saya mencoba 'backquote' ( ,
) untuk memaksa evaluasi, tetapi tidak berhasil juga. Setiap saran untuk memperbaiki bug ini atau menawarkan pendekatan lain akan sangat membantu.