Compare commits
16 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7681055a23 | ||
|
|
15c9029935 | ||
|
|
f67f1a9950 | ||
|
|
2c63e256ba | ||
|
|
92095d5b97 | ||
|
|
a6977d9444 | ||
|
|
378aa33cf3 | ||
|
|
9d6d572f72 | ||
|
|
8fdb174643 | ||
|
|
0810250b3a | ||
|
|
6e76f49729 | ||
|
|
94c94b8b1e | ||
|
|
3d6f3e6e3c | ||
|
|
2e305e6e52 | ||
|
|
0b28592f0f | ||
|
|
8daf645e3b |
@@ -21,10 +21,12 @@ and `nwggrid`.
|
||||
|
||||
[](https://repology.org/project/nwg-drawer/versions)
|
||||
|
||||
To close the window w/o running a program, you may use `Esc` key, or right-click the window next to the icons.
|
||||
|
||||
## v0.2.x note
|
||||
|
||||
1. Placing config files in the nwg-panel config directory was a mistake, sorry. The 0.2.0 version migrates them to `~/.config/nwg-drawer`.
|
||||
2. From now on you may run the program residently, which should speed it up. See "Running" below.
|
||||
2. From now on you may run the program residently, which should speed it up (but also occupy some resources!). See "Running" below.
|
||||
|
||||
## Installation
|
||||
|
||||
@@ -38,7 +40,7 @@ and `nwggrid`.
|
||||
Optional (recommended):
|
||||
|
||||
- thunar
|
||||
- alacritty
|
||||
- foot
|
||||
|
||||
You may use another file manager and terminal emulator (see command line arguments), but mentioned above have been
|
||||
confirmed to work well with the program. Also see **Files** below.
|
||||
|
||||
BIN
bin/nwg-drawer
BIN
bin/nwg-drawer
Binary file not shown.
27
main.go
27
main.go
@@ -21,7 +21,7 @@ import (
|
||||
"github.com/gotk3/gotk3/gtk"
|
||||
)
|
||||
|
||||
const version = "0.2.0"
|
||||
const version = "0.2.5"
|
||||
|
||||
var (
|
||||
appDirs []string
|
||||
@@ -126,7 +126,7 @@ var columnsNumber = flag.Uint("c", 6, "number of Columns")
|
||||
var itemSpacing = flag.Uint("spacing", 20, "icon spacing")
|
||||
var lang = flag.String("lang", "", "force lang, e.g. \"en\", \"pl\"")
|
||||
var fileManager = flag.String("fm", "thunar", "File Manager")
|
||||
var term = flag.String("term", defaultStringIfBlank(os.Getenv("TERM"), "alacritty"), "Terminal emulator")
|
||||
var term = flag.String("term", defaultStringIfBlank(os.Getenv("TERM"), "foot"), "Terminal emulator")
|
||||
var nameLimit = flag.Int("fslen", 80, "File Search name LENgth Limit")
|
||||
var noCats = flag.Bool("nocats", false, "Disable filtering by category")
|
||||
var noFS = flag.Bool("nofs", false, "Disable file search")
|
||||
@@ -162,8 +162,13 @@ func main() {
|
||||
if *resident {
|
||||
// As win.Show() called from inside a goroutine randomly crashes GTK,
|
||||
// let's just set e helper variable here. We'll be checking it with glib.TimeoutAdd.
|
||||
if !win.IsVisible() {
|
||||
log.Debug("SIGUSR1 received, showing the window")
|
||||
showWindowTrigger = true
|
||||
} else {
|
||||
log.Debug("SIGUSR1 received, hiding the window")
|
||||
restoreStateAndHide()
|
||||
}
|
||||
} else {
|
||||
log.Info("SIGUSR1 received, and I'm not resident, bye bye")
|
||||
gtk.MainQuit()
|
||||
@@ -246,6 +251,7 @@ func main() {
|
||||
pinned, err = loadTextFile(pinnedFile)
|
||||
if err != nil {
|
||||
pinned = nil
|
||||
savePinned()
|
||||
}
|
||||
log.Info(fmt.Sprintf("Found %v pinned items", len(pinned)))
|
||||
|
||||
@@ -344,10 +350,9 @@ func main() {
|
||||
gtk.MainQuit()
|
||||
})
|
||||
|
||||
win.Connect("key-press-event", func(window *gtk.Window, event *gdk.Event) bool {
|
||||
win.Connect("key-release-event", func(window *gtk.Window, event *gdk.Event) bool {
|
||||
key := &gdk.EventKey{Event: event}
|
||||
switch key.KeyVal() {
|
||||
case gdk.KEY_Escape:
|
||||
if key.KeyVal() == gdk.KEY_Escape {
|
||||
s, _ := searchEntry.GetText()
|
||||
if s != "" {
|
||||
searchEntry.GrabFocus()
|
||||
@@ -359,7 +364,14 @@ func main() {
|
||||
restoreStateAndHide()
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
return false
|
||||
})
|
||||
|
||||
win.Connect("key-press-event", func(window *gtk.Window, event *gdk.Event) bool {
|
||||
key := &gdk.EventKey{Event: event}
|
||||
switch key.KeyVal() {
|
||||
case gdk.KEY_downarrow, gdk.KEY_Up, gdk.KEY_Down, gdk.KEY_Left, gdk.KEY_Right, gdk.KEY_Tab,
|
||||
gdk.KEY_Return, gdk.KEY_Page_Up, gdk.KEY_Page_Down, gdk.KEY_Home, gdk.KEY_End:
|
||||
return false
|
||||
@@ -414,7 +426,7 @@ func main() {
|
||||
|
||||
resultWindow.Connect("button-release-event", func(sw *gtk.ScrolledWindow, e *gdk.Event) bool {
|
||||
btnEvent := gdk.EventButtonNewFromEvent(e)
|
||||
if btnEvent.Button() == 1 || btnEvent.Button() == 3 {
|
||||
if btnEvent.Button() == 3 {
|
||||
if !*resident {
|
||||
gtk.MainQuit()
|
||||
} else {
|
||||
@@ -483,6 +495,9 @@ func main() {
|
||||
glib.TimeoutAdd(uint(1), func() bool {
|
||||
if showWindowTrigger && win != nil && !win.IsVisible() {
|
||||
win.ShowAll()
|
||||
if fileSearchResultWrapper != nil {
|
||||
fileSearchResultWrapper.Hide()
|
||||
}
|
||||
// focus 1st element
|
||||
b := appFlowBox.GetChildAtIndex(0)
|
||||
if b != nil {
|
||||
|
||||
8
tools.go
8
tools.go
@@ -559,7 +559,13 @@ func launch(command string, terminal bool) {
|
||||
cmd := exec.Command(elements[cmdIdx], elements[1+cmdIdx:]...)
|
||||
|
||||
if terminal {
|
||||
args := []string{"-e", elements[cmdIdx]}
|
||||
var args []string
|
||||
if *term != "foot" {
|
||||
args = []string{"-e", elements[cmdIdx]}
|
||||
} else {
|
||||
args = []string{elements[cmdIdx]}
|
||||
}
|
||||
|
||||
cmd = exec.Command(*term, args...)
|
||||
}
|
||||
|
||||
|
||||
@@ -77,6 +77,9 @@ func setUpPinnedFlowBox() *gtk.FlowBox {
|
||||
btn.Connect("enter-notify-event", func() {
|
||||
statusLabel.SetText(entry.CommentLoc)
|
||||
})
|
||||
btn.Connect("focus-in-event", func() {
|
||||
statusLabel.SetText(entry.CommentLoc)
|
||||
})
|
||||
flowBox.Add(btn)
|
||||
}
|
||||
pinnedFlowBoxWrapper.PackStart(flowBox, true, false, 0)
|
||||
@@ -272,6 +275,9 @@ func flowBoxButton(entry desktopEntry) *gtk.Button {
|
||||
button.Connect("enter-notify-event", func() {
|
||||
statusLabel.SetText(desc)
|
||||
})
|
||||
button.Connect("focus-in-event", func() {
|
||||
statusLabel.SetText(desc)
|
||||
})
|
||||
return button
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user