Xác định cửa sổ được chỉ định bởi những cửa sổ khác


10

Trong emacs, thường xuyên hơn tôi thích, tôi kết thúc với 4 cửa sổ trở lên.

Tôi sẽ sử dụng ví dụ đó:

+--------|-----------+
|        |           |
|   1    |   2       |
|        |           |
+--------+-----------+
|    3   |     4     |
|        +-----------+
|        |     5     |
+--------+-----------+

Rất nhiều chức năng có thể thực hiện hành động other-window(thường là cùng một cửa sổ được chỉ bởi C-x o). Đặc biệt hữu ích là scroll-other-window. Tuy nhiên, khi mở 4 cửa sổ trở lên, other windowkhông chắc là cửa sổ tôi muốn.

Có cách nào dễ dàng để quản lý để thiết lập other-windowmà không thay đổi bố cục cửa sổ / bộ đệm không? Tất nhiên, có thể sử dụng một loạt C-x 4 bC-bnhưng tôi không muốn thay đổi bố cục. Ví dụ:

  • Nếu chỉnh sửa trong cửa sổ 4 trong hình trên, có cách nào dễ dàng để thiết lập C-M-vđể cuộn cửa sổ 1 không?
  • Hoặc đơn giản, giả sử tiêu điểm trong cửa sổ 3 , làm thế nào để đặt other-windowthành trỏ đến cửa sổ 2 ?

Câu trả lời:


7

Nếu tôi đọc chính xác câu hỏi của bạn, bạn chủ yếu quan tâm đến việc vận hành các bộ đệm được hiển thị trong các cửa sổ khác một cách nhanh chóng (trong khi vẫn giữ bố cục cửa sổ hiện tại).

Thay đổi cửa sổ other-windowtrỏ đến là một cách để đạt được điều đó, nhưng tôi muốn đề xuất một quy trình công việc thay thế:

Không giống như other-window, ace-windowcho phép bạn nhanh chóng chuyển đến một cửa sổ cụ thể : Khi bạn gọi ace-window, nó sẽ hiển thị một số duy nhất trong mỗi cửa sổ. Để chuyển đến một cửa sổ cụ thể, bạn chỉ cần nhập số tương ứng. Nếu bạn chỉ có hai cửa sổ, nó sẽ đặt điểm vào cửa sổ khác mà không yêu cầu bạn nhập số. Screencast này cho thấy việc chuyển sang cửa sổ khác, cuộn nó và quay lại cửa sổ ban đầu:

Trình diễn cửa sổ ace

Nếu bạn liên kết ace-windowvới C-x o, bạn không cần phải ghi nhớ một ràng buộc khóa bổ sung và sẽ có cảm giác như bạn đang sử dụng phiên bản siêu nạp của other-window.

Ngoài ra, nếu bạn chạm và / hoặc không muốn di chuyển ngón tay quá xa hàng chủ, bạn có thể hướng dẫn ace-window"cửa sổ" số bằng cách sử dụng chữ cái thay vì số (xem bên dưới).

ace-windowcó sẵn trong MELPA . Sau khi cài đặt nó qua M-x package-install RET ace-window RET, bạn có thể đặt phần sau vào tệp init của mình để thiết lập nó như mô tả ở trên:

(global-set-key (kbd "C-x o") 'ace-window)
(setq aw-keys '(?a ?b ?c ?d ?e ?f ?g ?h ?i))

Cảm ơn về bản demo, tôi đã thấy gói này trên các trang web khác và đang tự hỏi làm thế nào nó hoạt động. Tôi thực sự có thể chuyển đổi cửa sổ một cách dễ dàng vì tôi đã buộc M-1 M-2 ..phải chọn cửa sổ số 1, 2 bằng cách sử dụng window-numbergói
Lompik

1

Từ một đánh giá nhanh về nguồn gốc của other-windownó, có vẻ như nó thực sự phụ thuộc vào cửa sổ được trả về bởi next-window, được xác định trong c. Thật không may scroll-other-windowcũng được định nghĩa trong c, và có lẽ gọi cửa sổ tiếp theo từ đó. Tôi không nghĩ rằng nó dễ dàng ghi đè lên điều đó.

Tuy nhiên, switch-to-buffer-other-windowdường như để sử dụng pop-to-buffer, vì vậy bạn có thể có một số may mắn ở đó.


1

Không có cách dễ dàng để thao tác danh sách cửa sổ, vì vậy kết quả trả về other-windowít nhiều cố định. Đây không phải là một điều xấu, vì nó cho phép sự nhất quán khi điều hướng các cửa sổ. Về hai kịch bản bạn đã mô tả, với một số elisp hoặc macro bạn có thể phù hợp với quy trình làm việc của mình.

Nếu chỉnh sửa trong cửa sổ 4 trong hình trên, có cách nào dễ dàng để đặt CMv để cuộn cửa sổ 1 không?

Bạn có thể sử dụng một đoạn mã đơn giản như đoạn dưới đây để sử dụng other-windowsố lần thích hợp, cuộn xuống và di chuyển trở lại cửa sổ ban đầu.

 (defun my-scroll-down-other-window (&optional arg)
 "Like `scroll-other-window' but takes a prefix argument 
 that indicates which window to scroll."
  (interactive "p")
  (save-selected-window
    (other-window arg)
    (scroll-down)))

Bạn có thể truyền đối số tiền tố để chỉ định cửa sổ nào sẽ cuộn. Như bạn có thể suy ra, nó sử dụng cơ chế sẵn có other-windowđể bỏ qua argsố lượng cửa sổ trước khi cuộn. Các save-selected-windowĐảm bảo tập trung sẽ trở lại cửa sổ ban đầu. Tài liệu về other-windowcó thể cung cấp thêm thông tin về việc sửa đổi đoạn mã này cho phù hợp với hành vi của bạn.

Hoặc đơn giản, giả sử tiêu điểm trong cửa sổ 3, làm thế nào để đặt other-windowthành trỏ đến cửa sổ 2?

Một lần nữa sử dụng prefix-argnhư trong C-3 C-x okhi gọi other-window. Số lượng thực tế sẽ cung cấp sẽ khác nhau tùy theo thứ tự bạn chia chúng và sẽ không thay đổi miễn là bạn không tạo các cửa sổ mới. Thay phiên, bạn có thể sử dụng các gói tiện lợi như window-numberhoặc ace-windowtừ MELPA để chuyển đổi nhanh các cửa sổ đã chọn.


đúng, không có cách dễ dàng để thao tác danh sách cửa sổ. Tôi có một thời gian khó khăn khi sử dụng tiền tố. Cảm thấy như nó thêm một khóa không thể truy cập khác và làm chậm mọi thứ
Lompik

Đó là những gì bàn phím / macrobindings dành cho. Nếu đây là một phần thường xuyên trong luồng công việc của bạn, bạn có thể dễ dàng xác định liên kết khóa dựa trên bản đồ tiền tố, ví dụ <f7> nđể cuộn cửa sổ thứ n. Tạo các ràng buộc tạm thời một phím với các macro bàn phím.
Vamsi
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.