any 3:2 multi-map group: any pairing of the 3 with the 2 is valid, one is shown
all 3:1 all-to-all group: each of the 3 corresponds to the 1
inserted
deleted
updated
moved
click a highlight to reveal its counterpart
Code view:
A painting is a person's account of this edit as text, recorded independently of the node mapping - a rendering often has several equally defensible answers where the mapping has one. Deletions and insertions carry no position on the opposite side in a painting, so that panel draws no caret for them.
Before
1package com.genymobile.scrcpy;
2
3public interface Codec {
4
5 enum Type {
6 VIDEO,
7 }
8
9 Type getType();
10
11 int getId();
12
13 String getName();
…lines 14–17 unchanged (4 lines)
After
1package com.genymobile.scrcpy;
2
3public interface Codec {
4
5 enum Type {
6 VIDEO,
7AUDIO,
8 }
9
10 Type getType();
11
12 int getId();
13
…lines 14–18 unchanged (5 lines)
Before
1package com.genymobile.scrcpy;
2
3public interface Codec {
4
5 enum Type {
6 VIDEO,
7 }
8
9 Type getType();
10
11 int getId();
12
13 String getName();
…lines 14–17 unchanged (4 lines)
After
1package com.genymobile.scrcpy;
2
3public interface Codec {
4
5 enum Type {
6 VIDEO,
7AUDIO,
8 }
9
10 Type getType();
11
12 int getId();
13
…lines 14–18 unchanged (5 lines)
Before
1package com.genymobile.scrcpy;
2
3public interface Codec {
4
5 enum Type {
6 VIDEO,
7 }
8
9 Type getType();
10
11 int getId();
12
13 String getName();
…lines 14–17 unchanged (4 lines)
After
1package com.genymobile.scrcpy;
2
3public interface Codec {
4
5 enum Type {
6 VIDEO,
7AUDIO,
8 }
9
10 Type getType();
11
12 int getId();
13
…lines 14–18 unchanged (5 lines)
Before
programpackage_declaration
package "package"
scoped_identifierscoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
; ";"
interface_declarationmodifiers
public "public"
interface "interface"
identifier "Codec"
interface_body
{ "{"
enum_declaration
enum "enum"
identifier "Type"
enum_body
{ "{"
enum_constant
identifier "VIDEO"
, ","
} "}"
method_declaration
type_identifier "Type"
identifier "getType"
formal_parameters
( "("
) ")"
; ";"
method_declarationintegral_type
int "int"
identifier "getId"
formal_parameters
( "("
) ")"
; ";"
method_declaration
type_identifier "String"
identifier "getName"
formal_parameters
( "("
) ")"
; ";"
method_declaration
type_identifier "String"
identifier "getMimeType"
formal_parameters
( "("
) ")"
; ";"
} "}"
After
programpackage_declaration
package "package"
scoped_identifierscoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
; ";"
interface_declarationmodifiers
public "public"
interface "interface"
identifier "Codec"
interface_body
{ "{"
enum_declaration
enum "enum"
identifier "Type"
enum_body
{ "{"
enum_constant
identifier "VIDEO"
, ","
enum_constant
identifier "AUDIO"
, ","
} "}"
method_declaration
type_identifier "Type"
identifier "getType"
formal_parameters
( "("
) ")"
; ";"
method_declarationintegral_type
int "int"
identifier "getId"
formal_parameters
( "("
) ")"
; ";"
method_declaration
type_identifier "String"
identifier "getName"
formal_parameters
( "("
) ")"
; ";"
method_declaration
type_identifier "String"
identifier "getMimeType"
formal_parameters
( "("
) ")"
; ";"
} "}"
Keybindings
j / k
next / previous visible node (tree panels)
h / l
collapse / expand the focused node
g / G
jump to first / last visible node
Tab
switch focus between Before/After panels
/
search: jump to next node whose text contains a given string
a
jump the other panel to this node's mapped counterpart
i
hide identical matches, showing only inserted/deleted/updated nodes and their ancestors
v
cycle the view: split / code only / tree only
p
cycle what the code view renders: the node mapping, then each human painting
r
mark this fixture as reviewed, or forget the mark (kept in this browser only)