Khi nào tôi nên sử dụng with-eval-after-load trong các tệp cấu hình của mình?


15

Tôi đã xem qua các tập tin cấu hình của mình và muốn dọn dẹp.

Hiểu biết của tôi with-eval-after-loadlà cơ thể của nó sẽ được đánh giá ngay sau khi gói liên quan được tải. Trong khi dọn dẹp các tệp cấu hình của tôi và chia nhỏ chúng hơn nữa, tôi muốn gửi kèm theo mọi cấu hình gói with-eval-after-load. Mọi thứ diễn ra như mong đợi cho đến khi tôi kèm theo cấu hình cho helmhelm-projectile.

Đây là những gì tôi đã nghĩ ( lisp / init-helm.el ):

(with-eval-after-load 'helm
  (setq helm-mode-line-string "")
  (add-to-list 'helm-sources-using-default-as-input 'helm-source-man-pages)
  (define-key global-map (kbd "C-c m") 'helm-imenu)
  (define-key global-map (kbd "C-x b") 'helm-buffers-list))

(with-eval-after-load 'helm-command
  (global-set-key (kbd "M-x") 'helm-M-x))

(with-eval-after-load 'helm-projectile
  (helm-projectile-on))

Sau khi khởi động lại Emacs, tôi gặp vấn đề về kích thước cửa sổ này:

emacs-window-size-vấn đề

Đây là cách tôi thay đổi kích thước cửa sổ của mình:

(set-frame-parameter nil 'fullscreen 'fullboth)

Tôi đoán là tôi đang sử dụng sai with-eval-after-load, làm thế nào để vệ sinh cấu hình Emacs của anh ấy và đảm bảo không có gì bị hỏng cho dù gói nào được cài đặt?


Điều này là hoàn toàn kỳ quái. (Có thể là một lỗi?)
PythonNut

Bạn có biết cái này có liên quan gì không? Tôi đang sử dụng cổng OS X của railcat và tôi không muốn thêm một vấn đề trong đó điều này không thuộc về :).
Mathieu Marques

8
Tôi đã cố gắng sử dụng with-eval-after-loadđể bọc tất cả các tùy chỉnh liên quan đến gói của mình một lần. Sau đó, tôi thấy ánh sáng và bắt đầu sử dụng use-packagethay thế.
itjeyd

@itsjeyd Điều này trông rất tiện dụng và tiện lợi thực sự! Tuy nhiên, tôi đã gặp một số rắc rối: Tôi đã nhận xét (package-initialize)và thay thế nó (require 'use-package)nhưng tôi sẽ gặp lỗi Tệp: Không thể mở tệp tải, không có tệp hoặc thư mục như vậy, gói sử dụng khi khởi động lại Emacs. Tuy nhiên, một khi Emacs đã bắt đầu, tôi có thể (require 'use-package)không gặp vấn đề gì. Cuối cùng, tôi thậm chí đã thử with-eval-after-load, vẫn lỗi tương tự. Readme không rõ lắm về cách cài đặt use-package khi sử dụng các gói từ gói.el.
Mathieu Marques

1
Cho chúng tôi xem .emacs, tốt nhất là phiên bản rút gọn thể hiện vấn đề với càng ít dòng và càng ít gói bên ngoài càng tốt. Điều này có lẽ phải làm với thời gian thiết lập khung so với tải gói trong khi khởi động . Nhưng không thấy mã của bạn, chúng tôi không thể làm gì nhiều. Đồng thời cho chúng tôi biết phiên bản Emacs nào bạn đang sử dụng.
Gilles 'SO- ngừng trở nên xấu xa'

Câu trả lời:


2

Tôi sử dụng with-eval-after-loadrất nhiều, chủ yếu để thêm hoặc xóa các thành phần vào hoặc ra khỏi danh sách sau khi các giá trị mặc định đã được đánh giá. Bằng cách đó, tôi không phải theo dõi các thay đổi trong các giá trị mặc định.

Đối với vấn đề với việc helmkhởi tạo của bạn , tài liệu khuyến nghị nên (require 'helm-config)có mặt trong init.elphần phụ thuộc của bạn .

Tôi thấy rằng việc yêu cầu helm-configtrong quá trình khởi tạo sẽ dễ dàng hơn thay vì dựa vào autoload, đặc biệt là vì dù sao tôi cũng sẽ tải nó gần như ngay lập tức.


Tôi đã thay đổi từ đó để sử dụng use-packagevà ngay cả khi yêu cầu helm-configtôi vẫn gặp vấn đề tương tự. Đây là thiết lập cấu hình được cập nhật của tôi: bitbucket.org/angrybacon/dotemacs/src .
Mathieu Marques

1

Hóa ra nó không liên quan gì đến việc helmkhởi tạo (hoặc ít).

Trong nhiệm vụ bất tận của mình để tối ưu hóa thời gian khởi động của Emacs, tôi đã chuyển tất cả những thứ liên quan đến giao diện ngay từ đầu cấu hình của mình. Điều đó bao gồm toàn màn hình giả mà tôi sử dụng.

Đặt dòng tương ứng trước khi bất kỳ lisp nặng nào được tải đã khắc phục sự cố của tôi.

Đây là cấu hình của tôi để tham khảo .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.