Trong Linux, làm cách nào tôi có thể ánh xạ SHIFT_L / SHIFT_R khi được nhấn mà không cần thêm phím?


13

Hôm nay tôi tìm thấy bài viết rất hay này của Steven Losh, trong đó ông trình bày một vài ánh xạ bàn phím tăng năng suất. Trong số đó là một ánh xạ động của các phím shift trái và phải.

Ý tưởng

Khi Shift_L hoặc Shift_R được nhấn mà không có khóa bổ sung, chúng sẽ được ánh xạ tới '(' và ')', nếu không chúng hoạt động như bình thường.

Vấn đề

Anh ấy làm tất cả những điều này dưới OSX. Tôi đang cố gắng để đạt được điều tương tự trong Linux. Không có cách nào đơn giản cho việc này vì tôi hiểu rằng bạn không thể sử dụng xmodmap để định cấu hình một khóa cho riêng Shift_L và một phím khác cho Shift khi được sử dụng làm khóa sửa đổi.

Tôi đã loay hoay một chút và thấy mọi người đang cố gắng làm điều tương tự trong Windows, điều này rõ ràng là có thể sử dụng AutoHotKey, nhưng tôi không thể tìm thấy bất cứ điều gì cho Linux.

Có cách nào để giải quyết vấn đề này trong Linux không?


Tôi đã không thử nhưng điều này có thể giúp hỏiubub.com/q/24916/11352
Mansuro

2
Nó gần như trùng lặp với câu hỏi này . =)
teika kazura

Câu trả lời:


4

Ồ Nhận xét của người dùng teika kazura về câu hỏi ban đầu là hoàn toàn chính xác - không chỉ đây thực sự là một bản sao của câu hỏi khác , mà câu trả lời được cung cấp ở đó ("sử dụng xcape ") giải quyết vấn đề này!

Sau khi nhân bản repo xcape và biên dịch (trước tiên tôi phải cài đặt libXtst-devel trên hộp Fedora của mình), tôi đã có thể có được hành vi chính xác được yêu cầu bằng lệnh sau:

xcape -e "Shift_L=parenleft;Shift_R=parenright"

Sau khi thử nghiệm thừa nhận, nó dường như hoạt động rất tốt. Đẹp!

Sự lựa chọn khác

Nếu bạn sử dụng phím Shift làm công cụ sửa đổi chuột (nghĩa là nếu bạn đã từng bấm shift bất cứ thứ gì), có lẽ bạn sẽ muốn bao gồm tùy chọn hết thời gian của xcape và tìm giá trị thời gian chờ thoải mái, để nhấn phím Shift được sử dụng kết hợp với chuột don 't tạo ra dấu ngoặc đơn. Từ xcape README:

-t <timeout ms>

Nếu bạn giữ một khóa lâu hơn thời gian chờ này, xcape sẽ không tạo ra một sự kiện quan trọng. Mặc định là 500 ms.

Vì vậy, bằng cách bao gồm -tcờ có giá trị hết thời gian phù hợp với bạn, bạn vẫn có thể nhấp chuột bằng chuột miễn là bạn giữ phím Shift trong ít nhất timeout ms mili giây.

(Tín dụng, một lần nữa, cho teika kazura vì đã chỉ ra câu hỏi khác, và cũng để don_crissti cho câu trả lời ban đầu ở đó.)


Một vấn đề với phương pháp này là tôi khá thường xuyên nhấn [Shift] + [LMouse] để chọn một số văn bản trong trình chỉnh sửa. Thú vị Văn bản cao siêu cũng sử dụng [Ctrl] + [LMouse] vì vậy câu hỏi về ánh xạ lại [Ctrl] cũng gây ra vấn đề.
AnnanFay

@Annan Bạn đã thử nghiệm điều chỉnh tùy chọn thời gian chờ của xcape chưa? Từ README: " -t <timeout ms>Nếu bạn giữ một khóa lâu hơn thời gian chờ này, xcape sẽ không tạo ra một sự kiện quan trọng. Mặc định là 500 ms." ... Trừ khi xcape can thiệp vào sự kiện khóa phím của người sửa đổi (tôi không thể nhớ lại), điều đó sẽ khiến nó không tạo ra các phím bấm giả, trong khi vẫn cho phép bạn sử dụng nó như một công cụ sửa đổi chọn chuột miễn là bạn giữ nó đủ lâu .
FeRD

@Annan Thật tuyệt khi nghe, tôi đã cập nhật câu trả lời của mình để đề xuất sử dụng -tcờ!
FeRD

1

Đó là một thử thách thú vị và tôi đồng ý một điều rằng xinput dường như không hoàn toàn phù hợp. Tôi đã dành một chút thời gian loay hoay với các khả năng của xmodmap, và đã đến rất gần để đạt được những gì bạn muốn làm ... mà không thực sự quản lý để đạt được điều đó.

Sử dụng xmodmap, có thể gán parenleft dưới dạng một keyymbol được dịch chuyển trên phím shift trái:

xmodmap -e 'keysym Shift_L = Shift_L parenleft Shift_L parenleft'

sorta công trình, ít nhất là trong thử nghiệm trên hộp Fedora 17 của tôi, nhưng không phải trong một cách thỏa đáng. Tôi thấy rằng, với ánh xạ này, phím shift vẫn hoạt động bình thường và không hiển thị bất kỳ dấu hiệu giả nào, nhưng (bực bội) nó cũng không tạo ra các dấu ngang trái một cách đáng tin cậy. Vì bất kỳ lý do gì, khóa không xuất hiện để tự sửa đổi một cách đáng tin cậy , điều này phá vỡ sự phân công đã thay đổi của nó ... ban đầu. Vì bất kỳ lý do gì, việc nhấn sang trái một vài lần liên tiếp cuối cùng sẽ khiến nó bắt đầu tạo ra các cú đánh trái, nhưng chỉ sau lần nhấn thứ tư hoặc thứ năm.

Tuy nhiên, một hành vi tôi đã nhận thấy rằng bạn có thể làm việc với tư cách tương tự "gần đủ": Tôi thấy rằng sau khi ánh xạ parenleft và parenright vào Shift_L và Shift_R, tôi có thể gõ parens một cách đáng tin cậy bằng cách "lăn" qua cả hai phím shift - nói cách khác, với ánh xạ này:

xmodmap -e 'keysym Shift_L = Shift_L parenleft Shift_L parenleft'
xmodmap -e 'keysym Shift_R = Shift_R parenright Shift_R parenright'

nhấn Shift_L theo sau là Shift_R, sau đó giải phóng cả hai, sẽ tạo ra một paren phải hoặc một paren trái theo hướng khác. (Tất nhiên, ánh xạ paren có thể bị đảo ngược; tôi hoàn toàn không thể quyết định cách nào cảm thấy "tự nhiên" hơn.)

Đó là gần như tôi đã đạt được hành vi chính xác mà bạn đang tìm kiếm; có vẻ như không thể sử dụng xmodmap một mình.

Tôi đã bị thuyết phục một nửa rằng đơn giản là không thể, nhưng sau đó tôi nhận ra rằng có ít nhất một phím có chức năng chính xác như bạn mô tả: Phím Super ("Windows"). Trong Gnome Shell, đó là một phím bổ trợ (mod4), tạo ra hiệu ứng khác (kích hoạt Tổng quan) khi nhấn một mình. Vì vậy, ít nhất là về mặt lý thuyết, có thể thực hiện quá tải phím shift mong muốn của bạn theo cách tương tự.

... Nhưng, tôi hoàn toàn không biết làm thế nào điều đó sẽ được thực hiện hoặc xâm lấn đến mức nào để bị sa lầy vào quá trình xử lý cần thiết mỗi khi bạn nhấn phím Shift. :-)


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.