From 4bfac5e39f697b7041517beec5299af4f77afade Mon Sep 17 00:00:00 2001 From: Gustavo Brunoro Date: Sun, 12 Apr 2020 22:34:22 -0300 Subject: [PATCH] 'p' copies path of current selection to clipboard --- README.md | 1 + src/app.js | 2 +- src/views/list.js | 17 +++++++++++++++-- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 23e2a4d..40a335f 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,7 @@ When the application is open, you are in a vim-style tree viewer. `right`, `l`: view child node ``: send current selection to stdout and exit `y` or `c`: copy current value to clipboard +`p`: copy path to current selection to clipboard `-`: toggle expansion `/`: search for string recursively `*`: search for value under cursor diff --git a/src/app.js b/src/app.js index c93778e..aa542f9 100644 --- a/src/app.js +++ b/src/app.js @@ -6,6 +6,6 @@ var screenView = require('./views/screen'); var listView = require('./views/list'); module.exports = function(data, input, output) { - var list = listView(new Value(data, null), new Session(), screenView(input, output)); + var list = listView(new Value(data, null), new Session(), screenView(input, output), []); list.focus(); }; diff --git a/src/views/list.js b/src/views/list.js index 092d057..dcff8d6 100644 --- a/src/views/list.js +++ b/src/views/list.js @@ -6,7 +6,7 @@ var defaultStyle = require('../styles/default'); var clipboard = require('../clipboard')(process.platform); var List = require('../widgets/list'); -module.exports = function listView(value, session, parent) { +module.exports = function listView(value, session, parent, breadcrumbs) { var list = new List({ parent: parent, tags: true, @@ -35,7 +35,8 @@ module.exports = function listView(value, session, parent) { return; } - var newList = listView(selected, session, parent); + var newBreadcrumbs = breadcrumbs.concat([selected.getKey()]); + var newList = listView(selected, session, parent, newBreadcrumbs); newList.key(['left', 'escape', 'h'], function() { parent.remove(newList); parent.render(); @@ -56,6 +57,18 @@ module.exports = function listView(value, session, parent) { ); }); + list.key(['p'], function() { + var selected = list.getSelectedValue(); + var newBreadcrumbs = breadcrumbs.concat([selected.getKey()]); + var breadcrumbsString = newBreadcrumbs.map(function(p) { + return typeof(p) == 'number' ? '[' + p + ']' : '["' + p + '"]'; + }).join('') + clipboard.copy( + breadcrumbsString, + function(){} + ); + }); + parent.append(list); parent.render(); return list;