Hiển thị danh sách các từ dọc theo khung?


20

Tôi muốn hiển thị 3 danh sách các từ trên các dòng riêng biệt theo chiều ngang dọc phía dưới (mặc dù trên cùng cũng sẽ hoạt động) của mỗi khung emacs tôi đã mở. Tôi đã nghĩ ra 6 cách để làm điều này và tất cả chúng đều có vấn đề:

  1. Suy nghĩ đầu tiên của tôi là thêm một dòng vào dòng chế độ của tôi, nhưng AFAICT bạn không thể sử dụng ký tự dòng mới trong một dòng chế độ, nó chỉ được chuyển đổi thành "^ J".

  2. Suy nghĩ thứ hai của tôi là có dòng trên đầu màn hình và sử dụng dòng tiêu đề, nhưng nó cũng không hỗ trợ ký tự dòng mới.

  3. Tôi có thể hiển thị lớp phủ trên 3 dòng cuối của cửa sổ, nhưng làm cho tính năng này có vẻ khó khăn - việc cuộn sẽ cần được kích hoạt khi điểm chạm đến lớp phủ thay vì cuối thực sự của cửa sổ và tôi phải liên tục định vị lại lớp phủ vì lớp phủ nằm trong không gian văn bản chứ không phải không gian cửa sổ.

  4. Tôi có thể thử làm các cửa sổ chuyên dụng ở dưới cùng của khung. Tôi đã thử mã hóa nó lên nhưng nó cũng không mạnh lắm, nó dường như không hoạt động ngay khi một khung đã chứa các cửa sổ bị chia tách và tôi đã phải khởi động lại Cx, 1 thành phiên bản tùy chỉnh của các cửa sổ xóa khác mà bỏ qua cửa sổ đặc biệt của tôi và tôi chắc chắn có những trường hợp góc khác. Ngoài ra, khi một cửa sổ trợ giúp mở ra, nó sẽ mở theo chiều dọc bởi vì nó nghĩ rằng đã có sự phân chia theo chiều ngang (về mặt kỹ thuật là có nhưng nó chỉ hiển thị một cửa sổ một dòng).

  5. Tôi có thể có một khung dành riêng cho việc này, nhưng sau đó cấu hình của tôi sẽ không hoạt động ở chế độ đầu cuối và tôi phải lập trình cho trình quản lý cửa sổ của mình để xử lý việc giữ nó ở phía dưới màn hình, khiến nó không thể chọn, không ảnh hưởng đến bố cục, Vân vân.

  6. Tôi có thể chèn văn bản cho 3 dòng trực tiếp vào xe buýt nhỏ. Tôi đã làm việc này một phần, tôi có thể phát triển xe buýt nhỏ để chứa 3 dòng và tôi có thể hiển thị chúng. Tuy nhiên, bất cứ khi nào bất kỳ tin nhắn nào được lặp lại, các dòng sẽ biến mất cho đến khi tôi đưa ra một lệnh khác tại điểm chúng xuất hiện lại. Lý tưởng nhất là 3 dòng và khu vực tiếng vang sẽ không trùng nhau để tôi có thể nhìn thấy cả hai. Điều này sẽ ít phiền toái hơn nếu tôi có thể lọc các tin nhắn đi đến khu vực tiếng vang một cách đáng tin cậy - Tôi đã tìm thấy một giải pháp trên EmacsWiki nhưng nó dường như không hoạt động đối với các tin nhắn có nguồn gốc từ nguồn C của emacs (cụ thể là tôi muốn nhận loại bỏ các tin nhắn lưu tập tin vì tôi tự động lưu thường xuyên trên một bộ đếm thời gian).

Đối với ngữ cảnh, mục tiêu của tôi là liên tục hiển thị các từ được sử dụng thường xuyên nhất trong bộ đệm hiện tại, các từ gần nhất trong bộ đệm hiện tại và các từ được sử dụng gần đây nhất trong bộ đệm hiện tại. Tôi dự định có thể chèn chúng vào bộ đệm thông qua các lệnh thoại. Vì vậy, tôi có thể nói "gần nhất 2" và yêu cầu nó chọn mục thứ hai từ danh sách các từ gần nhất và chèn nó. Tôi chỉ quan tâm đến danh sách từ hiển thị cho bất kỳ bộ đệm nào tôi đang chỉnh sửa. Tôi không muốn sử dụng các cửa sổ bật lên được sử dụng bởi các chế độ hoàn thành mã khác nhau vì tôi cần các danh sách luôn hiển thị.


Câu hỏi hay, và cũng được đặt ra. Hy vọng bạn nhận được một số gợi ý hữu ích.
vẽ

Tôi tự hỏi về các phần khác của # 5, bên cạnh nhu cầu ở chế độ đầu cuối (là chính). Bạn có thể sử dụng một khung chuyên dụng được đặt ở phía dưới (không có vấn đề gì). Bạn có ý nghĩa gì bởi không thể chọn , và tại sao bạn cần điều đó? Nếu bạn có nghĩa là chỉ đọc, thì đó cũng không phải là vấn đề. Bạn có ý nghĩa gì khi không ảnh hưởng đến bố cục ? Tóm lại, # 5 không quá rõ ràng đối với tôi.
vẽ

@Drew: Ý tôi là tôi điều khiển WM của mình bằng bàn phím và không chắc là tôi muốn tập trung vào khung đó vào mục đích, vì vậy tôi muốn các ràng buộc cửa sổ tiếp theo / cửa sổ trước của tôi bỏ qua nó. Tương tự như vậy, tôi muốn các bố cục cửa sổ hoạt động như thể khung đó chỉ là một phần của bảng điều khiển / thanh tác vụ. Chỉnh sửa: mọi nơi trong nhận xét này Tôi đã nói 'cửa sổ' Ý tôi là cửa sổ X, không phải cửa sổ emacs; p
Joseph Garvin

Một khả năng khác được đề xuất với tôi là chỉ sử dụng xe buýt nhỏ. Tôi không biết liệu có thể hiển thị văn bản thụ động ở dưới đó mà không can thiệp vào mọi thứ khác đang cố gắng sử dụng nó không ...
Joseph Garvin

Đã thêm một lưu ý về việc cố gắng sử dụng xe buýt nhỏ.
Joseph Garvin

Câu trả lời:


8

Với rất nhiều thử nghiệm khó khăn, tôi đã có thể đưa # 6 (sử dụng văn bản xe buýt nhỏ) về trạng thái làm việc 'đủ tốt'. Đây là một ảnh chụp màn hình:

Ảnh chụp màn hình vành đai đang hoạt động

Có một số phần chính để thực hiện công việc này:

  • Chèn văn bản vào xe buýt nhỏ đáng ngạc nhiên gần như làm đúng việc ra khỏi hộp. Văn bản chèn vào đó sẽ thực sự hiển thị.
  • Bằng cách làm cho văn bản trở thành 'chuỗi sau của lớp phủ thay vì văn bản thông thường, bạn làm cho nó không thể chọn và không phải lo lắng về việc con trỏ vô tình dính vào nó.
  • Để làm cho các lệnh nhắc nhở của trình thu thập dữ liệu hoạt động chính xác, bạn phải hạn chế chèn văn bản / lớp phủ khi cửa sổ xe buýt nhỏ đang hoạt động.
  • Nếu bạn cố gắng thay đổi kích thước của bộ thu nhỏ với các chức năng thay đổi kích thước cửa sổ bình thường, bạn sẽ gặp lỗi về các cửa sổ quá nhỏ, nếu bạn sử dụng chức năng md-resize-Minecraftuf không có giấy tờ thì bạn có thể thay đổi kích thước theo số dòng chính xác mà bạn muốn, miễn là bạn đã đặt resize-mini-windows thành nil trước.
  • Để giải quyết các danh sách biến mất bất cứ khi nào có tin nhắn, bạn phải thông báo cho chức năng tin nhắn để chặn tin nhắn. Sau đó, bạn chèn chúng vào xe buýt nhỏ. Bạn cũng phải xem biến thông báo hiện tại, nơi lưu trữ bất cứ thứ gì xuất hiện cuối cùng trong khu vực tiếng vang (đáng ngạc nhiên là khu vực tiếng vang và bộ thu âm khác biệt về mặt kỹ thuật và một số chức năng mã nguồn C in trực tiếp vào khu vực tiếng vang mà không đi qua tin nhắn chức năng). Mã tôi cung cấp dưới đây cho điều này là không hoàn hảo, các tin nhắn tồn tại lâu hơn bình thường mà tôi vẫn cần điều tra (kiểm tra mục cuối cùng trong * Tin nhắn * có thể đơn giản và mạnh mẽ hơn) nhưng hiện tại 'đủ tốt'.

Đây là một liên kết đến việc thực hiện của tôi với một vành đai ví dụ hiển thị vòng khử. Cuối cùng, đây sẽ là một phần của dự án thích hợp: https://gist.github.com/jgarvin/ce37d08654978fd7e4c9

Đây là lần đầu tiên tôi viết bất kỳ số lượng đáng kể nào của elisp vì vậy chất lượng có thể là phụ, nhưng nó hoạt động.


1

Không may, cả dòng chế độ và dòng tiêu đề đều có thể là nhiều dòng. Tôi đã hỏi về điều này trước đây và có (ít nhất là không) bất kỳ tùy chọn ẩn nào để thực hiện công việc này. Vì vậy, 1 và 2 là ra. Tôi cũng cảm thấy như 3 và 6 là những bản hack sẽ không làm bạn hài lòng về lâu dài. 3 và 4 có vẻ như là cách tiếp cận tốt, nhưng để chúng hoạt động một cách đáng tin cậy sẽ là một khoản đầu tư khá lớn.

Vì vậy, tôi khuyên bạn trước tiên nên đưa cái này lên trên emacs-devel . Theo kinh nghiệm của tôi, mọi thứ cuối cùng sẽ được thực hiện nếu bạn bận tâm giải thích cẩn thận những gì bạn muốn và tại sao đó là một điều tốt. Có thể mất một chút thời gian, ít nhất là cho đến lần phát hành tiếp theo, nhưng nếu bạn chờ đợi một chút hoặc sử dụng phiên bản phát triển, thì bạn có thể có được chính xác những gì bạn muốn, với ít nỗ lực hơn.


Cảm ơn đề nghị liên hệ với emacs-devel. Mặc dù tôi đã đưa ra một giải pháp nhưng nó khá là hack và thật tuyệt khi có một API thực sự để vẽ trực tiếp trên tọa độ màn hình, vì vậy khi tôi có thời gian tôi có thể sẽ gửi email theo cách của họ.
Joseph Garvin
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.