Skip to content

Commit 18b6077

Browse files
authored
fix: write server response only for remote clients (gokcehan#2290)
* fix: write server response only for remote clients * Update `CHANGELOG.md`
1 parent 7727b28 commit 18b6077

File tree

6 files changed

+30
-32
lines changed

6 files changed

+30
-32
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
1212

1313
### Fixed
1414

15+
- Error messages from the server are no longer written to the terminal which causes the UI to break (#2290).
1516
- A bug where file previews fail to load properly when scrolling quickly is now fixed (#2292).
1617

1718
## [r39](https://github.com/gokcehan/lf/releases/tag/r39)

app.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,11 +84,11 @@ func (app *app) quit() {
8484
}
8585
}
8686
if !gSingleMode {
87-
if err := remote(fmt.Sprintf("drop %d", gClientID)); err != nil {
87+
if _, err := remote(fmt.Sprintf("drop %d", gClientID)); err != nil {
8888
log.Printf("dropping connection: %s", err)
8989
}
9090
if gOpts.autoquit {
91-
if err := remote("quit"); err != nil {
91+
if _, err := remote("quit"); err != nil {
9292
log.Printf("auto quitting server: %s", err)
9393
}
9494
}

client.go

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -168,14 +168,15 @@ func readExpr() <-chan expr {
168168
return ch
169169
}
170170

171-
func remote(cmd string) error {
171+
func remote(req string) (string, error) {
172172
c, err := net.Dial(gSocketProt, gSocketPath)
173173
if err != nil {
174-
return fmt.Errorf("dialing to send server: %w", err)
174+
return "", fmt.Errorf("connecting to server: %w", err)
175175
}
176+
defer c.Close()
176177

177-
if _, err := fmt.Fprintln(c, cmd); err != nil {
178-
return fmt.Errorf("sending command to server: %w", err)
178+
if _, err := fmt.Fprintln(c, req); err != nil {
179+
return "", fmt.Errorf("sending command to server: %w", err)
179180
}
180181

181182
// XXX: Standard net.Conn interface does not include a CloseWrite method
@@ -190,17 +191,10 @@ func remote(cmd string) error {
190191
c.CloseWrite()
191192
}
192193

193-
// The most straightforward way to write the response to stdout would be
194-
// to do "io.Copy(os.Stdout, c)". However, on Linux, if stdout is connected to
195-
// something like a pager that isn't immediately reading everything,
196-
// this runs into Go bug https://github.com/golang/go/issues/75304 and
197-
// busy-loops, eating a whole CPU.
198-
response, err := io.ReadAll(c)
194+
resp, err := io.ReadAll(c)
199195
if err != nil {
200-
return fmt.Errorf("reading response from server: %w", err)
196+
return "", fmt.Errorf("reading response from server: %w", err)
201197
}
202-
c.Close()
203-
os.Stdout.Write(response)
204198

205-
return nil
199+
return string(resp), nil
206200
}

eval.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -849,7 +849,7 @@ func insert(app *app, arg string) {
849849
app.nav.renew()
850850
app.ui.loadFile(app, true)
851851
} else {
852-
if err := remote("send load"); err != nil {
852+
if _, err := remote("send load"); err != nil {
853853
app.ui.echoerrf("rename: %s", err)
854854
return
855855
}
@@ -872,7 +872,7 @@ func insert(app *app, arg string) {
872872
app.nav.renew()
873873
app.ui.loadFile(app, true)
874874
} else {
875-
if err := remote("send load"); err != nil {
875+
if _, err := remote("send load"); err != nil {
876876
app.ui.echoerrf("rename: %s", err)
877877
return
878878
}
@@ -893,7 +893,7 @@ func insert(app *app, arg string) {
893893
return
894894
}
895895
} else {
896-
if err := remote("send sync"); err != nil {
896+
if _, err := remote("send sync"); err != nil {
897897
app.ui.echoerrf("mark-save: %s", err)
898898
return
899899
}
@@ -944,7 +944,7 @@ func insert(app *app, arg string) {
944944
return
945945
}
946946
} else {
947-
if err := remote("send sync"); err != nil {
947+
if _, err := remote("send sync"); err != nil {
948948
app.ui.echoerrf("mark-remove: %s", err)
949949
return
950950
}
@@ -1232,7 +1232,7 @@ func (e *callExpr) eval(app *app, _ []string) {
12321232
return
12331233
}
12341234
} else {
1235-
if err := remote("send sync"); err != nil {
1235+
if _, err := remote("send sync"); err != nil {
12361236
app.ui.echoerrf("copy: %s", err)
12371237
return
12381238
}
@@ -1253,7 +1253,7 @@ func (e *callExpr) eval(app *app, _ []string) {
12531253
return
12541254
}
12551255
} else {
1256-
if err := remote("send sync"); err != nil {
1256+
if _, err := remote("send sync"); err != nil {
12571257
app.ui.echoerrf("cut: %s", err)
12581258
return
12591259
}
@@ -1284,7 +1284,7 @@ func (e *callExpr) eval(app *app, _ []string) {
12841284
return
12851285
}
12861286
} else {
1287-
if err := remote("send sync"); err != nil {
1287+
if _, err := remote("send sync"); err != nil {
12881288
app.ui.echoerrf("clear: %s", err)
12891289
return
12901290
}
@@ -1328,7 +1328,7 @@ func (e *callExpr) eval(app *app, _ []string) {
13281328
app.nav.renew()
13291329
app.ui.loadFile(app, true)
13301330
} else {
1331-
if err := remote("send load"); err != nil {
1331+
if _, err := remote("send load"); err != nil {
13321332
app.ui.echoerrf("delete: %s", err)
13331333
return
13341334
}
@@ -1360,7 +1360,7 @@ func (e *callExpr) eval(app *app, _ []string) {
13601360
app.nav.renew()
13611361
app.ui.loadFile(app, true)
13621362
} else {
1363-
if err := remote("send load"); err != nil {
1363+
if _, err := remote("send load"); err != nil {
13641364
app.ui.echoerrf("rename: %s", err)
13651365
return
13661366
}
@@ -1591,7 +1591,7 @@ func (e *callExpr) eval(app *app, _ []string) {
15911591
app.ui.echoerrf("tag: %s", err)
15921592
}
15931593
} else {
1594-
if err := remote("send sync"); err != nil {
1594+
if _, err := remote("send sync"); err != nil {
15951595
app.ui.echoerrf("tag: %s", err)
15961596
}
15971597
}
@@ -1616,7 +1616,7 @@ func (e *callExpr) eval(app *app, _ []string) {
16161616
app.ui.echoerrf("tag-toggle: %s", err)
16171617
}
16181618
} else {
1619-
if err := remote("send sync"); err != nil {
1619+
if _, err := remote("send sync"); err != nil {
16201620
app.ui.echoerrf("tag-toggle: %s", err)
16211621
}
16221622
}
@@ -2012,7 +2012,7 @@ func (e *callExpr) eval(app *app, _ []string) {
20122012
if gSingleMode {
20132013
app.nav.renew()
20142014
} else {
2015-
if err := remote("send load"); err != nil {
2015+
if _, err := remote("send load"); err != nil {
20162016
app.ui.echoerrf("rename: %s", err)
20172017
return
20182018
}

main.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -342,9 +342,12 @@ func main() {
342342
case *showVersion:
343343
printVersion()
344344
case *remoteCmd != "":
345-
if err := remote(*remoteCmd); err != nil {
345+
resp, err := remote(*remoteCmd)
346+
if err != nil {
346347
log.Fatalf("remote command: %s", err)
348+
return
347349
}
350+
fmt.Print(resp)
348351
case *serverMode:
349352
if err := os.Chdir(gUser.HomeDir); err != nil {
350353
log.Print(err)

nav.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1383,7 +1383,7 @@ loop:
13831383
nav.renew()
13841384
app.ui.loadFile(app, true)
13851385
} else {
1386-
if err := remote("send load"); err != nil {
1386+
if _, err := remote("send load"); err != nil {
13871387
sendErr("%v", err)
13881388
}
13891389
}
@@ -1489,7 +1489,7 @@ func (nav *nav) moveAsync(app *app, srcs []string, dstDir string) {
14891489
nav.renew()
14901490
app.ui.loadFile(app, true)
14911491
} else {
1492-
if err := remote("send load"); err != nil {
1492+
if _, err := remote("send load"); err != nil {
14931493
sendErr("%v", err)
14941494
}
14951495
}
@@ -1549,7 +1549,7 @@ func (nav *nav) del(app *app) error {
15491549
nav.renew()
15501550
app.ui.loadFile(app, true)
15511551
} else {
1552-
if err := remote("send load"); err != nil {
1552+
if _, err := remote("send load"); err != nil {
15531553
errCount++
15541554
echo.args[0] = fmt.Sprintf("[%d] %s", errCount, err)
15551555
app.ui.exprChan <- echo

0 commit comments

Comments
 (0)