I like the new Ctrl-J. But there's one feature that was lost. It used to be that one could type over some string and then hit Ctrl-J to repeat the dir on the next occurrence of the string. For examplee, consider the following:
[JumpZero] -> [opcode caseOf: {
[CmpRR] -> [branch setOpcode: BrEqRR andOperandsFrom: self.
branch operands at: 3 put: (operands at: 1).
opcode := Label].
}].
[JumpNonZero]-> [opcode caseOf: {
[CmpRR] -> [branch setOpcode: BrNeRR andOperandsFrom: self.
branch operands at: 3 put: (operands at: 1).
opcode := Label].
}].
[JumpLongZero]-> [opcode caseOf: {
[CmpRR] -> [branch setOpcode: BrNeRR andOperandsFrom: self.
"skip the following long branch"
branch operands at: 3 put: self jumpLongByteSize.
opcode := JumpLong].
}].
[JumpLongNonZero]-> [opcode caseOf: {
[CmpRR] -> [branch setOpcode: BrEqRR andOperandsFrom: self.
"skip the following long branch"
branch operands at: 3 put: self jumpLongByteSize.
opcode := JumpLong].
opcode := Label].
}].
where it turns out branch operands at: 3 should read branch operands at: 2. So it used to be that one could select the first "at: 3", type "at: 2", and then hit Ctrl-J to edit the next, Ctrl-J to edit the one after that and so on.
I think it's just making sure that the selection that is replaced by Ctrl-J becomes the new search string for copy/replace.