Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

'minor-mode' for caret. #360

Merged
merged 1 commit into from
Aug 2, 2020
Merged

Conversation

loyalpartner
Copy link
Contributor

@loyalpartner loyalpartner commented Aug 2, 2020

fix #349

@HollowMan6 抱歉,我不会用git在你pull request下改代码,就独立弄了个pull, 并且把按键改成 vim-style 和 emacs-style 的方式,因为我觉得这种按键没有学习成本,并切 emacs 用户至少掌握了这两种按键的一种

(defcustom eaf-browser-caret-mode-keybinding
  '(
    ("/" . "caret_search_forward")
    ("?" . "caret_search_backward")
    ("q" . "caret_exit")
    ("v" . "caret_exit")
    ("C-q" . "caret_exit")
    ("j" . "caret_next_line")
    ("k" . "caret_previous_line")
    ("l" . "caret_next_character")
    ("h" . "caret_previous_character")
    ("w" . "caret_next_word")
    ("b" . "caret_previous_word")
    ("g" . "caret_to_bottom")
    ("G" . "caret_to_top")
    ("C-s" . "caret_search_forward")
    ("C-r" . "caret_search_backward")
    ("C-n" . "caret_next_line")
    ("C-p" . "caret_previous_line")
    ("C-f" . "caret_next_character")
    ("C-b" . "caret_previous_character")
    ("M-f" . "caret_next_word")
    ("M-b" . "caret_previous_word")
    ("C-." . "caret_clear_search")
    )
  "The keybinding of EAF Browser Caret Mode."
  :type 'cons)

eaf 动态绑定的秘密就在下面,

  ;; Copy default value in case user already has bindings there
  (setq-local emulation-mode-map-alists
              (copy-alist (default-value 'emulation-mode-map-alists)))
  ;; Construct map alist
  (setq-local eaf--buffer-map-alist (list (cons t eaf-mode-map)))
  ;; Eanble mode map and make it the first priority
  (add-to-ordered-list
   'emulation-mode-map-alists
   'eaf--buffer-map-alist
   'eaf--buffer-map-alist-order)

修改了 eaf-mode-map 不生效,是因为 eaf--buffer-map-alist 没有更新,需要执行

(setq eaf--buffer-map-alist (list (cons t eaf-mode-map)))

@HollowMan6
Copy link
Contributor

赞!

@manateelazycat manateelazycat merged commit c9922b5 into emacs-eaf:master Aug 2, 2020
@manateelazycat
Copy link
Member

@loyalpartner awesome!

@manateelazycat
Copy link
Member

@loyalpartner 这个补丁怎么激活 caret 模式? 我用了半天没有发现怎么激活 caret 模式

@loyalpartner
Copy link
Contributor Author

@loyalpartner 这个补丁怎么激活 caret 模式? 我用了半天没有发现怎么激活 caret 模式

激活的快捷键我没有改动, M-c 激活 caret 模式后, C-i 激活 mark ,之后就可以用快捷键了
("/" . "caret_search_forward")
("?" . "caret_search_backward")
("q" . "caret_exit")
("v" . "caret_exit")
("C-q" . "caret_exit")
("j" . "caret_next_line")
("k" . "caret_previous_line")
("l" . "caret_next_character")
("h" . "caret_previous_character")
("w" . "caret_next_word")
("b" . "caret_previous_word")
("g" . "caret_to_bottom")
("G" . "caret_to_top")
("C-s" . "caret_search_forward")
("C-r" . "caret_search_backward")
("C-n" . "caret_next_line")
("C-p" . "caret_previous_line")
("C-f" . "caret_next_character")
("C-b" . "caret_previous_character")
("M-f" . "caret_next_word")
("M-b" . "caret_previous_word")
("C-." . "caret_clear_search")

@manateelazycat
Copy link
Member

@loyalpartner 这个补丁怎么激活 caret 模式? 我用了半天没有发现怎么激活 caret 模式

激活的快捷键我没有改动, M-c 激活 caret 模式后, C-i 激活 mark ,之后就可以用快捷键了
("/" . "caret_search_forward")
("?" . "caret_search_backward")
("q" . "caret_exit")
("v" . "caret_exit")
("C-q" . "caret_exit")
("j" . "caret_next_line")
("k" . "caret_previous_line")
("l" . "caret_next_character")
("h" . "caret_previous_character")
("w" . "caret_next_word")
("b" . "caret_previous_word")
("g" . "caret_to_bottom")
("G" . "caret_to_top")
("C-s" . "caret_search_forward")
("C-r" . "caret_search_backward")
("C-n" . "caret_next_line")
("C-p" . "caret_previous_line")
("C-f" . "caret_next_character")
("C-b" . "caret_previous_character")
("M-f" . "caret_next_word")
("M-b" . "caret_previous_word")
("C-." . "caret_clear_search")

我这边要点击一下鼠标才能用,没法显示 marker.

@loyalpartner
Copy link
Contributor Author

loyalpartner commented Aug 3, 2020

@loyalpartner 这个补丁怎么激活 caret 模式? 我用了半天没有发现怎么激活 caret 模式

激活的快捷键我没有改动, M-c 激活 caret 模式后, C-i 激活 mark ,之后就可以用快捷键了
("/" . "caret_search_forward")
("?" . "caret_search_backward")
("q" . "caret_exit")
("v" . "caret_exit")
("C-q" . "caret_exit")
("j" . "caret_next_line")
("k" . "caret_previous_line")
("l" . "caret_next_character")
("h" . "caret_previous_character")
("w" . "caret_next_word")
("b" . "caret_previous_word")
("g" . "caret_to_bottom")
("G" . "caret_to_top")
("C-s" . "caret_search_forward")
("C-r" . "caret_search_backward")
("C-n" . "caret_next_line")
("C-p" . "caret_previous_line")
("C-f" . "caret_next_character")
("C-b" . "caret_previous_character")
("M-f" . "caret_next_word")
("M-b" . "caret_previous_word")
("C-." . "caret_clear_search")

我这边要点击一下鼠标才能用,没法显示 marker.
是所有的网页都是这样子吗?
我这边访问百度会有这种情况,这时候需要用 C-s 或者 C-r 选中下文本,再C-i 选中激活mark ,百度打开后的焦点是在输入框,有可能是 caret 模式没有考虑 焦点在输入框的情形

@manateelazycat
Copy link
Member

@loyalpartner 这个补丁怎么激活 caret 模式? 我用了半天没有发现怎么激活 caret 模式

激活的快捷键我没有改动, M-c 激活 caret 模式后, C-i 激活 mark ,之后就可以用快捷键了
("/" . "caret_search_forward")
("?" . "caret_search_backward")
("q" . "caret_exit")
("v" . "caret_exit")
("C-q" . "caret_exit")
("j" . "caret_next_line")
("k" . "caret_previous_line")
("l" . "caret_next_character")
("h" . "caret_previous_character")
("w" . "caret_next_word")
("b" . "caret_previous_word")
("g" . "caret_to_bottom")
("G" . "caret_to_top")
("C-s" . "caret_search_forward")
("C-r" . "caret_search_backward")
("C-n" . "caret_next_line")
("C-p" . "caret_previous_line")
("C-f" . "caret_next_character")
("C-b" . "caret_previous_character")
("M-f" . "caret_next_word")
("M-b" . "caret_previous_word")
("C-." . "caret_clear_search")

我这边要点击一下鼠标才能用,没法显示 marker.

可以提供下你访问的网页吗?
我这边访问百度会有这种情况,这时候需要用 C-s 或者 C-r 选中下文本,再C-i 选中激活mark ,百度打开后的焦点是在输入框,有可能是 caret 模式没有考虑 焦点在输入框的情形

goggle搜索任意关键字

@HollowMan6
Copy link
Contributor

HollowMan6 commented Aug 3, 2020

@loyalpartner 这个补丁怎么激活 caret 模式? 我用了半天没有发现怎么激活 caret 模式

激活的快捷键我没有改动, M-c 激活 caret 模式后, C-i 激活 mark ,之后就可以用快捷键了
("/" . "caret_search_forward")
("?" . "caret_search_backward")
("q" . "caret_exit")
("v" . "caret_exit")
("C-q" . "caret_exit")
("j" . "caret_next_line")
("k" . "caret_previous_line")
("l" . "caret_next_character")
("h" . "caret_previous_character")
("w" . "caret_next_word")
("b" . "caret_previous_word")
("g" . "caret_to_bottom")
("G" . "caret_to_top")
("C-s" . "caret_search_forward")
("C-r" . "caret_search_backward")
("C-n" . "caret_next_line")
("C-p" . "caret_previous_line")
("C-f" . "caret_next_character")
("C-b" . "caret_previous_character")
("M-f" . "caret_next_word")
("M-b" . "caret_previous_word")
("C-." . "caret_clear_search")

@loyalpartner 刚刚有时间测试了一下,现在你这里定义的M-c实际的功能是toggle caret mode,之前我在master中M-c我定义的是无论何种状态都是激活,在#349 PR才更改过来变成toggle,建议你把emit信息修改一下。

@HollowMan6
Copy link
Contributor

另外现在我觉得M-c 激活 caret 模式后直接激活按键比较好,你这里似乎必须要mark在on状态,eaf-browser-caret-mode-keybinding中绑定按键才会激活,把光标上下移动

@HollowMan6
Copy link
Contributor

我这边访问百度会有这种情况,这时候需要用 C-s 或者 C-r 选中下文本,再C-i 选中激活mark ,百度打开后的焦点是在输入框,有可能是 caret 模式没有考虑 焦点在输入框的情形

这种情况直接'M-u' clear focus即可,我当时有考虑过

@loyalpartner
Copy link
Contributor Author

@loyalpartner 这个补丁怎么激活 caret 模式? 我用了半天没有发现怎么激活 caret 模式

激活的快捷键我没有改动, M-c 激活 caret 模式后, C-i 激活 mark ,之后就可以用快捷键了
("/" . "caret_search_forward")
("?" . "caret_search_backward")
("q" . "caret_exit")
("v" . "caret_exit")
("C-q" . "caret_exit")
("j" . "caret_next_line")
("k" . "caret_previous_line")
("l" . "caret_next_character")
("h" . "caret_previous_character")
("w" . "caret_next_word")
("b" . "caret_previous_word")
("g" . "caret_to_bottom")
("G" . "caret_to_top")
("C-s" . "caret_search_forward")
("C-r" . "caret_search_backward")
("C-n" . "caret_next_line")
("C-p" . "caret_previous_line")
("C-f" . "caret_next_character")
("C-b" . "caret_previous_character")
("M-f" . "caret_next_word")
("M-b" . "caret_previous_word")
("C-." . "caret_clear_search")

我这边要点击一下鼠标才能用,没法显示 marker.

可以提供下你访问的网页吗?
我这边访问百度会有这种情况,这时候需要用 C-s 或者 C-r 选中下文本,再C-i 选中激活mark ,百度打开后的焦点是在输入框,有可能是 caret 模式没有考虑 焦点在输入框的情形

goggle搜索任意关键字

@loyalpartner 这个补丁怎么激活 caret 模式? 我用了半天没有发现怎么激活 caret 模式

激活的快捷键我没有改动, M-c 激活 caret 模式后, C-i 激活 mark ,之后就可以用快捷键了
("/" . "caret_search_forward")
("?" . "caret_search_backward")
("q" . "caret_exit")
("v" . "caret_exit")
("C-q" . "caret_exit")
("j" . "caret_next_line")
("k" . "caret_previous_line")
("l" . "caret_next_character")
("h" . "caret_previous_character")
("w" . "caret_next_word")
("b" . "caret_previous_word")
("g" . "caret_to_bottom")
("G" . "caret_to_top")
("C-s" . "caret_search_forward")
("C-r" . "caret_search_backward")
("C-n" . "caret_next_line")
("C-p" . "caret_previous_line")
("C-f" . "caret_next_character")
("C-b" . "caret_previous_character")
("M-f" . "caret_next_word")
("M-b" . "caret_previous_word")
("C-." . "caret_clear_search")

@loyalpartner 刚刚有时间测试了一下,现在master仓库里的代码似乎eaf-browser-caret-mode-keybinding中定义的按键在我这里还是无法生效,我不知道是我这里环境的问题还是什么。

另外现在你这里定义的M-c实际的功能是toggle caret mode,之前我在master中M-c我定义的是无论何种状态都是激活,在#349 PR才更改过来变成toggle,建议你把emit信息修改一下。

好的,似乎

另外现在我觉得M-c 激活 caret 模式后直接激活按键比较好,你这里似乎必须要mark在on状态,eaf-browser-caret-mode-keybinding中绑定按键才会激活,把光标上下移动

另外现在我觉得M-c 激活 caret 模式后直接激活按键比较好,你这里似乎必须要mark在on状态,eaf-browser-caret-mode-keybinding中绑定按键才会激活,把光标上下移动

mark

我这边访问百度会有这种情况,这时候需要用 C-s 或者 C-r 选中下文本,再C-i 选中激活mark ,百度打开后的焦点是在输入框,有可能是 caret 模式没有考虑 焦点在输入框的情形

这种情况直接'M-u' clear focus即可,我当时有考虑过

好的,晚点我去修改下

@loyalpartner
Copy link
Contributor Author

loyalpartner commented Aug 3, 2020

@loyalpartner 这个补丁怎么激活 caret 模式? 我用了半天没有发现怎么激活 caret 模式

激活的快捷键我没有改动, M-c 激活 caret 模式后, C-i 激活 mark ,之后就可以用快捷键了
("/" . "caret_search_forward")
("?" . "caret_search_backward")
("q" . "caret_exit")
("v" . "caret_exit")
("C-q" . "caret_exit")
("j" . "caret_next_line")
("k" . "caret_previous_line")
("l" . "caret_next_character")
("h" . "caret_previous_character")
("w" . "caret_next_word")
("b" . "caret_previous_word")
("g" . "caret_to_bottom")
("G" . "caret_to_top")
("C-s" . "caret_search_forward")
("C-r" . "caret_search_backward")
("C-n" . "caret_next_line")
("C-p" . "caret_previous_line")
("C-f" . "caret_next_character")
("C-b" . "caret_previous_character")
("M-f" . "caret_next_word")
("M-b" . "caret_previous_word")
("C-." . "caret_clear_search")

我这边要点击一下鼠标才能用,没法显示 marker.

可以提供下你访问的网页吗?
我这边访问百度会有这种情况,这时候需要用 C-s 或者 C-r 选中下文本,再C-i 选中激活mark ,百度打开后的焦点是在输入框,有可能是 caret 模式没有考虑 焦点在输入框的情形

goggle搜索任意关键字

这种一开始输入焦点在 input 框的时候,需要用 用 clear_focus 清除焦点, 快捷键是 C-.

@HollowMan6
Copy link
Contributor

这种一开始输入焦点在 input 框的时候,需要用 用 clear_focus 清除焦点, 快捷键是 C-.

用 clear_focus 清除焦点按现在master中配置应该还是'M-u'快捷键,C-. caret_clear_search 是清除正在搜索的文本内容,配合C-s和C-r使用的,如果你想搜索另一个文本而不是进一步搜索之前的文本内容,就先按下C-.再进行搜索

@manateelazycat
Copy link
Member

建议流程:

1.按键显示marker
2.确定具体的marker显示闪烁光标
3.激活选中或者移动光标
4.拷贝或退出激活状态

@loyalpartner
Copy link
Contributor Author

loyalpartner commented Aug 3, 2020

另外现在我觉得M-c 激活 caret 模式后直接激活按键比较好,你这里似乎必须要mark在on状态,eaf-browser-caret-mode-keybinding中绑定按键才会激活,把光标上下移动

我按着这样改了,激活caret 后,光标好太细了,几乎找不到,想问下这个样式要怎么改
image

@HollowMan6
Copy link
Contributor

激活caret 后,光标好太细了,几乎找不到,想问下这个样式要怎么改
image

https://github.com/manateelazycat/emacs-application-framework/blob/master/core/js/caret_browsing.js#L668-L673

const style = ".CaretBrowsing_Caret {" +
    "  position: absolute;" +
    "  z-index: 2147483647;" +
    "  min-height: 10px;" +
    "  background-color: #000;" +
    "}" +

这里可以改。我后面可以考虑做一下dark mode适配,确实暗模式下比较难找。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants