Comments (5)
evil-define-key
will work but it has a quirk related to minor modes (vdiff uses a minor mode). The keymaps need to be refreshed before the keys become active. This is normally not an issue, but evil doesn't "see" the minor mode get turned on and doesn't trigger the keymap refresh. They are refreshed on state changes though, so you should have your bindings active if you go in and out of insert state for example. You have two options:
- Force the refresh by adding
(evil-normalize-keymaps)
after you bind the keys - Use
evil-define-minor-mode-key
like this
(evil-define-minor-mode-key 'normal 'vdiff-mode (kbd "] c") 'vdiff-next-hunk)
from emacs-vdiff.
Thanks! I didn't know that.
I came up with these vim-like bindings (with go
, gp
instead of do
, dp
since d
can't be bound without losing its "delete" behaviour):
(evil-define-minor-mode-key 'normal 'vdiff-mode-map (kbd "] c") 'vdiff-next-hunk)
(evil-define-minor-mode-key 'normal 'vdiff-mode-map (kbd "[ c") 'vdiff-previous-hunk)
(evil-define-minor-mode-key 'normal 'vdiff-mode-map (kbd "z c") 'vdiff-close-fold)
(evil-define-minor-mode-key 'normal 'vdiff-mode-map (kbd "z M") 'vdiff-close-all-folds)
(evil-define-minor-mode-key 'normal 'vdiff-mode-map (kbd "z o") 'vdiff-open-fold)
(evil-define-minor-mode-key 'normal 'vdiff-mode-map (kbd "z R") 'vdiff-open-all-folds)
(evil-define-minor-mode-key 'motion 'vdiff-mode-map (kbd "g o") 'vdiff-receive-changes)
(evil-define-minor-mode-key 'motion 'vdiff-mode-map (kbd "g p") 'vdiff-send-changes)
from emacs-vdiff.
At some point, I am going to find a way to map dp
and do
, but for now I think I'll add your example to the README if you don't mind.
from emacs-vdiff.
Great, thanks!
from emacs-vdiff.
This is how I managed to map dp
and do
:
;; use "dp"/"do" to send/receive changes
(define-key evil-operator-state-map "o" 'evgeni-diff-obtain)
(define-key evil-operator-state-map "p" 'evgeni-diff-put)
(defun evgeni-diff-obtain ()
(interactive)
(when (and (eq evil-this-operator 'evil-delete)
(memq 'vdiff-mode minor-mode-list))
(setq evil-inhibit-operator t)
(call-interactively 'vdiff-receive-changes)))
(defun evgeni-diff-put ()
(interactive)
(when (and (eq evil-this-operator 'evil-delete)
(memq 'vdiff-mode minor-mode-list))
(setq evil-inhibit-operator t)
(call-interactively 'vdiff-send-changes)))
I used evil-exchange as an example.
from emacs-vdiff.
Related Issues (20)
- 2-way vdiff-magit-stage HOT 10
- Evil fold integration HOT 3
- Not getting "addition" overlay color for added lines preceded by a line with change HOT 1
- alternative diff programs (e.g. patience diff) HOT 6
- Error after start vdiff-mode HOT 5
- Truncate lines HOT 3
- Toggle fold command HOT 1
- Send/receive parts of changes HOT 3
- Feature request: Compare two no-file buffer HOT 15
- Release new version on GNU ELPA HOT 2
- Swaps visual position of buffers HOT 1
- Lock scrolling is not working when the cursor is not on the scrolled buffer HOT 2
- Why ediff not show different on files? HOT 2
- Region diff
- Fold string too long when using display-line-numbers-mode
- Beginning of window can't be in middle of subtraction in some circumstances
- Toggling case / whitespace doesn't work? HOT 2
- How to start folding? HOT 5
- git diff tool usage requires explicit call to vdiff-mode HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from emacs-vdiff.