mirror of
https://github.com/danbulant/dots-hyprland
synced 2026-05-24 12:22:09 +00:00
wallpaper selector: paste directory/file to navigate
This commit is contained in:
parent
3e368141c7
commit
513d140ea2
4 changed files with 39 additions and 6 deletions
|
|
@ -217,4 +217,8 @@ Singleton {
|
||||||
return str;
|
return str;
|
||||||
return str.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, ''');
|
return str.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, ''');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function cleanCliphistEntry(str: string): string {
|
||||||
|
return str.replace(/^\d+\t/, "");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -296,7 +296,7 @@ Item { // Wrapper
|
||||||
return Cliphist.fuzzyQuery(searchString).map(entry => {
|
return Cliphist.fuzzyQuery(searchString).map(entry => {
|
||||||
return {
|
return {
|
||||||
cliphistRawString: entry,
|
cliphistRawString: entry,
|
||||||
name: entry.replace(/^\s*\S+\s+/, ""),
|
name: StringUtils.cleanCliphistEntry(entry),
|
||||||
clickActionName: "",
|
clickActionName: "",
|
||||||
type: `#${entry.match(/^\s*(\S+)/)?.[1] || ""}`,
|
type: `#${entry.match(/^\s*(\S+)/)?.[1] || ""}`,
|
||||||
execute: () => {
|
execute: () => {
|
||||||
|
|
|
||||||
|
|
@ -29,10 +29,23 @@ Item {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function handleFilePasting(event) {
|
||||||
|
const currentClipboardEntry = Cliphist.entries[0]
|
||||||
|
if (/^\d+\tfile:\/\/\S+/.test(currentClipboardEntry)) {
|
||||||
|
const url = StringUtils.cleanCliphistEntry(currentClipboardEntry);
|
||||||
|
Wallpapers.setDirectory(FileUtils.trimFileProtocol(decodeURIComponent(url)));
|
||||||
|
event.accepted = true;
|
||||||
|
} else {
|
||||||
|
event.accepted = false; // No image, let text pasting proceed
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Keys.onPressed: event => {
|
Keys.onPressed: event => {
|
||||||
if (event.key === Qt.Key_Escape) {
|
if (event.key === Qt.Key_Escape) {
|
||||||
GlobalStates.wallpaperSelectorOpen = false;
|
GlobalStates.wallpaperSelectorOpen = false;
|
||||||
event.accepted = true;
|
event.accepted = true;
|
||||||
|
} else if ((event.modifiers & Qt.ControlModifier) && event.key === Qt.Key_V) { // Intercept Ctrl+V to handle "paste to go to" in pickers
|
||||||
|
root.handleFilePasting(event);
|
||||||
} else if (event.modifiers & Qt.AltModifier && event.key === Qt.Key_Up) {
|
} else if (event.modifiers & Qt.AltModifier && event.key === Qt.Key_Up) {
|
||||||
Wallpapers.setDirectory(FileUtils.parentDirectory(Wallpapers.directory));
|
Wallpapers.setDirectory(FileUtils.parentDirectory(Wallpapers.directory));
|
||||||
event.accepted = true;
|
event.accepted = true;
|
||||||
|
|
@ -316,15 +329,21 @@ Item {
|
||||||
}
|
}
|
||||||
|
|
||||||
Keys.onPressed: event => {
|
Keys.onPressed: event => {
|
||||||
if (text.length !== 0) {
|
if ((event.modifiers & Qt.ControlModifier) && event.key === Qt.Key_V) { // Intercept Ctrl+V to handle "paste to go to" in pickers
|
||||||
|
root.handleFilePasting(event);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (text.length !== 0) {
|
||||||
// No filtering, just navigate grid
|
// No filtering, just navigate grid
|
||||||
if (event.key === Qt.Key_Down) {
|
if (event.key === Qt.Key_Down) {
|
||||||
grid.moveSelection(grid.columns);
|
grid.moveSelection(grid.columns);
|
||||||
event.accepted = true;
|
event.accepted = true;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
if (event.key === Qt.Key_Up) {
|
if (event.key === Qt.Key_Up) {
|
||||||
grid.moveSelection(-grid.columns);
|
grid.moveSelection(-grid.columns);
|
||||||
event.accepted = true;
|
event.accepted = true;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
event.accepted = false;
|
event.accepted = false;
|
||||||
|
|
|
||||||
|
|
@ -76,11 +76,21 @@ Singleton {
|
||||||
function setDirectoryIfValid(path) {
|
function setDirectoryIfValid(path) {
|
||||||
validateDirProc.nicePath = FileUtils.trimFileProtocol(path).replace(/\/+$/, "")
|
validateDirProc.nicePath = FileUtils.trimFileProtocol(path).replace(/\/+$/, "")
|
||||||
if (/^\/*$/.test(validateDirProc.nicePath)) validateDirProc.nicePath = "/";
|
if (/^\/*$/.test(validateDirProc.nicePath)) validateDirProc.nicePath = "/";
|
||||||
validateDirProc.exec(["test", "-d", nicePath])
|
validateDirProc.exec([
|
||||||
|
"bash", "-c",
|
||||||
|
`if [ -d "${validateDirProc.nicePath}" ]; then echo dir; elif [ -f "${validateDirProc.nicePath}" ]; then echo file; else echo invalid; fi`
|
||||||
|
])
|
||||||
}
|
}
|
||||||
onExited: (exitCode, exitStatus) => {
|
stdout: StdioCollector {
|
||||||
if (exitCode === 0) {
|
onStreamFinished: {
|
||||||
root.directory = validateDirProc.nicePath
|
const result = text.trim()
|
||||||
|
if (result === "dir") {
|
||||||
|
root.directory = validateDirProc.nicePath
|
||||||
|
} else if (result === "file") {
|
||||||
|
root.directory = FileUtils.parentDirectory(validateDirProc.nicePath)
|
||||||
|
} else {
|
||||||
|
// Ignore
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue