From c91c63d6f296df5ef8da0e975fd5e6fde8ba1d11 Mon Sep 17 00:00:00 2001
From: anekos
Date: Mon, 2 Mar 2009 14:59:59 +0000
Subject: 拡張モードをひっそり追加
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@30708 d0d07461-0603-4401-acd4-de1884942a52
---
caret-hint.js | 41 +++++++++++++++++++++++++++++++++++++----
1 file changed, 37 insertions(+), 4 deletions(-)
(limited to 'caret-hint.js')
diff --git a/caret-hint.js b/caret-hint.js
index 5bcaaed..f4e0c76 100644
--- a/caret-hint.js
+++ b/caret-hint.js
@@ -38,7 +38,7 @@ let PLUGIN_INFO =
Caret Hint
Move caret position by hint
Hint を使ってキャレット位置を移動
- 1.2.1
+ 1.3.0
anekos
new BSD License (Please read the source code comments of this plugin)
修正BSDライセンス (ソースコードのコメントを参照してください)
@@ -110,8 +110,30 @@ let PLUGIN_INFO =
let selectHeadMode = gval('caret_hint_select_key', '');
let selectTailMode = gval('caret_hint_select_tail_key', 'S');
let swapKey = gval('caret_hint_swap_key', 's');
+ let extendLeader = gval('extend_leader', 'c');
let hintXPath = liberator.globalVariables.caret_hint_xpath || '//*';
+ let extendMode = false;
+
+ [headMode, tailMode, selectHeadMode, selectTailMode].forEach(
+ function(mode) {
+ let map = extendLeader + ';' + mode;
+ mappings.remove(modes.NORMAL, map); // for debug
+ mappings.remove(modes.VISUAL, map); // for debug
+ mappings.addUserMap(
+ [modes.NORMAL, modes.VISUAL],
+ [map],
+ 'desc',
+ function () {
+ extendMode = true;
+ hints.show(mode);
+ },
+ {
+ }
+ );
+ }
+ );
+
[
[[true, false], headMode],
[[false, false], tailMode],
@@ -123,7 +145,10 @@ let PLUGIN_INFO =
hints.addMode(
m,
'Move caret position to ' + (h ? 'head' : 'tail') + (s ? ' and Select' : ''),
- function (elem, loc, count) moveCaret(elem, h, s),
+ function (elem, loc, count) {
+ moveCaret(elem, h, s);
+ extendMode = false;
+ },
function () hintXPath
);
});
@@ -167,11 +192,9 @@ let PLUGIN_INFO =
r.selectNodeContents(elem);
if (select) {
- liberator.log('select')
mappings.getDefault(modes.NORMAL, 'i').action();
mappings.getDefault(modes.CARET, 'v').action();
} else {
- liberator.log('not select')
if (head) {
r.setEnd(r.startContainer, r.startOffset);
} else {
@@ -180,10 +203,20 @@ let PLUGIN_INFO =
mappings.getDefault(modes.NORMAL, 'i').action();
}
+ if (extendMode) {
+ let a = sel.getRangeAt(0);
+ if (r.compareBoundaryPoints(Range.END_TO_START, a) < 0) {
+ r.setEnd(a.endContainer, a.endOffset);
+ } else {
+ r.setStart(a.startContainer, a.startOffset);
+ }
+ }
+
sel.addRange(r);
if (select && head)
swapCaret();
+
}
})();
--
cgit v1.2.3