diff options
author | bptato <nincsnevem662@gmail.com> | 2023-08-13 17:42:34 +0200 |
---|---|---|
committer | bptato <nincsnevem662@gmail.com> | 2023-08-13 17:54:05 +0200 |
commit | d526deb99e44f2a8d1a9c3eea60676703dd64302 (patch) | |
tree | f63689ff7654d14ad9bca182a837b3155b2471a0 /src/ips | |
parent | f92e30232252deb194596e7c298cc7fcf56517cb (diff) | |
download | chawan-d526deb99e44f2a8d1a9c3eea60676703dd64302.tar.gz |
Add mailcap, mime.types & misc refactorings
* add mailcap: works with copiousoutput, needsterminal, etc. * add mime.types (only works with mailcap) * refactor pipeBuffer * remove "dispatcher" * fix bug in directory display where baseurl would not be used
Diffstat (limited to 'src/ips')
-rw-r--r-- | src/ips/editor.nim | 10 | ||||
-rw-r--r-- | src/ips/forkserver.nim | 18 | ||||
-rw-r--r-- | src/ips/socketstream.nim | 5 |
3 files changed, 18 insertions, 15 deletions
diff --git a/src/ips/editor.nim b/src/ips/editor.nim index a6a6623c..19ba965a 100644 --- a/src/ips/editor.nim +++ b/src/ips/editor.nim @@ -3,6 +3,7 @@ import posix import config/config import display/term +import io/tempfile func formatEditorName(editor, file: string, line: int): string = result = newStringOfCap(editor.len + file.len) @@ -55,17 +56,10 @@ proc openEditor*(term: Terminal, config: Config, file: string, line = 1): bool = result = WIFSIGNALED(wstatus) and WTERMSIG(wstatus) == SIGINT term.restart() -var tmpf_seq: int proc openInEditor*(term: Terminal, config: Config, input: var string): bool = try: let tmpdir = config.external.tmpdir - if not dirExists(tmpdir): - createDir(tmpdir) - var tmpf = tmpdir / "chatmp" & $tmpf_seq - while fileExists(tmpf): - inc tmpf_seq - tmpf = tmpdir / "chatmp" & $tmpf_seq - inc tmpf_seq + let tmpf = getTempFile(tmpdir) if input != "": writeFile(tmpf, input) if openEditor(term, config, tmpf): diff --git a/src/ips/forkserver.nim b/src/ips/forkserver.nim index 62d41198..ec0c60d1 100644 --- a/src/ips/forkserver.nim +++ b/src/ips/forkserver.nim @@ -1,5 +1,6 @@ import options import streams +import tables when defined(posix): import posix @@ -36,7 +37,6 @@ type proc newFileLoader*(forkserver: ForkServer, defaultHeaders: Headers = nil, filter = newURLFilter(default = true), cookiejar: CookieJar = nil, proxy: URL = nil, acceptProxy = false): FileLoader = - new(result) forkserver.ostream.swrite(FORK_LOADER) var defaultHeaders = defaultHeaders if defaultHeaders == nil: @@ -51,7 +51,9 @@ proc newFileLoader*(forkserver: ForkServer, defaultHeaders: Headers = nil, ) forkserver.ostream.swrite(config) forkserver.ostream.flush() - forkserver.istream.sread(result.process) + var process: Pid + forkserver.istream.sread(process) + return FileLoader(process: process) proc loadForkServerConfig*(forkserver: ForkServer, config: Config) = forkserver.ostream.swrite(LOAD_CONFIG) @@ -117,7 +119,8 @@ proc forkBuffer(ctx: var ForkServerContext): Pid = filter: config.filter, cookiejar: config.cookiejar, referrerpolicy: config.referrerpolicy, - proxy: config.proxy + #TODO these should be in a separate config I think + proxy: config.proxy, ) ) let pid = fork() @@ -190,7 +193,6 @@ proc runForkServer() = quit(0) proc newForkServer*(): ForkServer = - new(result) var pipefd_in: array[2, cint] # stdin in forkserver var pipefd_out: array[2, cint] # stdout in forkserver var pipefd_err: array[2, cint] # stderr in forkserver @@ -230,7 +232,9 @@ proc newForkServer*(): ForkServer = raise newException(Defect, "Failed to open output handle") if not open(readf, pipefd_out[0], fmRead): raise newException(Defect, "Failed to open input handle") - result.ostream = newFileStream(writef) - result.istream = newFileStream(readf) - result.estream = newPosixStream(pipefd_err[0]) discard fcntl(pipefd_err[0], F_SETFL, fcntl(pipefd_err[0], F_GETFL, 0) or O_NONBLOCK) + return ForkServer( + ostream: newFileStream(writef), + istream: newFileStream(readf), + estream: newPosixStream(pipefd_err[0]) + ) diff --git a/src/ips/socketstream.nim b/src/ips/socketstream.nim index 88023f07..09a3ef5c 100644 --- a/src/ips/socketstream.nim +++ b/src/ips/socketstream.nim @@ -57,6 +57,7 @@ proc sockClose(s: Stream) = {.cast(tags: []).}: #...sigh # See https://stackoverflow.com/a/4491203 proc sendFileHandle*(s: SocketStream, fd: FileHandle) = + assert not s.source.hasDataBuffered var hdr: Tmsghdr var iov: IOVec var space: csize_t @@ -90,6 +91,7 @@ proc sendFileHandle*(s: SocketStream, fd: FileHandle) = assert n == int(iov.iov_len) #TODO remove this proc recvFileHandle*(s: SocketStream): FileHandle = + assert not s.source.hasDataBuffered var iov: IOVec var hdr: Tmsghdr var buf: char @@ -119,6 +121,9 @@ func newSocketStream*(): SocketStream = result.atEndImpl = sockAtEnd result.closeImpl = sockClose +proc setBlocking*(ss: SocketStream, blocking: bool) = + ss.source.getFd().setBlocking(blocking) + proc connectSocketStream*(path: string, buffered = true, blocking = true): SocketStream = result = newSocketStream() result.blk = blocking |