diff options
Diffstat (limited to 'src/local')
-rw-r--r-- | src/local/container.nim | 47 | ||||
-rw-r--r-- | src/local/pager.nim | 76 |
2 files changed, 60 insertions, 63 deletions
diff --git a/src/local/container.nim b/src/local/container.nim index 90e00ebb..b64606a1 100644 --- a/src/local/container.nim +++ b/src/local/container.nim @@ -1,5 +1,4 @@ import std/deques -import std/net import std/options import std/os import std/posix @@ -208,8 +207,8 @@ proc clone*(container: Container; newurl: URL; loader: FileLoader): let ssock = initServerSocket(loader.sockDir, loader.sockDirFd, loader.clientPid) SocketStream(container.iface.stream.source) - .sendFileHandle(FileHandle(ssock.sock.getFd())) - ssock.sock.close() + .sendFileHandle(FileHandle(ssock.getFd())) + ssock.close(unlink = false) return p.then(proc(pid: int): Container = if pid == -1: return nil @@ -1371,6 +1370,23 @@ proc setLoadInfo(container: Container; msg: string) = container.loadinfo = msg container.triggerEvent(cetSetLoadInfo) +proc onReadLine(container: Container; rl: ReadLineResult) = + case rl.t + of rltText: + container.triggerEvent(ContainerEvent( + t: cetReadLine, + prompt: rl.prompt, + value: rl.value, + password: rl.hide + )) + of rltArea: + container.triggerEvent(ContainerEvent( + t: cetReadArea, + tvalue: rl.value + )) + of rltFile: + container.triggerEvent(ContainerEvent(t: cetReadFile)) + #TODO this should be called with a timeout. proc onload(container: Container; res: int) = if container.loadState == lsCanceled: @@ -1380,13 +1396,15 @@ proc onload(container: Container; res: int) = container.setLoadInfo("") container.triggerEvent(cetStatus) container.triggerEvent(cetLoaded) - if cfHasStart notin container.flags and container.url.anchor != "": + if cfHasStart notin container.flags and (container.url.anchor != "" or + container.config.autofocus): container.requestLines().then(proc(): Promise[GotoAnchorResult] = return container.iface.gotoAnchor() ).then(proc(res: GotoAnchorResult) = - if res.isSome: - let res = res.get + if res.found: container.setCursorXYCenter(res.x, res.y) + if res.focus != nil: + container.onReadLine(res.focus) ) else: container.needslines = true @@ -1522,22 +1540,7 @@ proc onclick(container: Container; res: ClickResult; save: bool) = if res.select.isSome and not save: container.displaySelect(res.select.get) if res.readline.isSome: - let rl = res.readline.get - case rl.t - of rltText: - container.triggerEvent(ContainerEvent( - t: cetReadLine, - prompt: rl.prompt, - value: rl.value, - password: rl.hide - )) - of rltArea: - container.triggerEvent(ContainerEvent( - t: cetReadArea, - tvalue: rl.value - )) - of rltFile: - container.triggerEvent(ContainerEvent(t: cetReadFile)) + container.onReadLine(res.readline.get) proc click*(container: Container) {.jsfunc.} = if container.select.open: diff --git a/src/local/pager.nim b/src/local/pager.nim index 48856837..16cd20a0 100644 --- a/src/local/pager.nim +++ b/src/local/pager.nim @@ -952,16 +952,28 @@ proc windowChange*(pager: Pager) = proc applySiteconf(pager: Pager; url: var URL; charsetOverride: Charset; loaderConfig: var LoaderClientConfig): BufferConfig = let host = url.host - var referer_from = false - var cookieJar: CookieJar = nil - var headers = newHeaders(pager.config.network.default_headers) - var scripting = false - var images = false - var charsets = pager.config.encoding.document_charset - var userstyle = pager.config.css.stylesheet - var proxy = pager.config.network.proxy let ctx = pager.jsctx - var insecureSSLNoVerify = false + var res = BufferConfig( + userstyle: pager.config.css.stylesheet, + referer_from: false, + scripting: false, + charsets: pager.config.encoding.document_charset, + images: false, + isdump: pager.config.start.headless, + charsetOverride: charsetOverride, + protocol: pager.config.protocol + ) + loaderConfig = LoaderClientConfig( + defaultHeaders: newHeaders(pager.config.network.default_headers), + cookiejar: nil, + proxy: pager.config.network.proxy, + filter: newURLFilter( + scheme = some(url.scheme), + allowschemes = @["data", "cache"], + default = true + ), + insecureSSLNoVerify: false + ) for sc in pager.config.siteconf: if sc.url.isSome and not sc.url.get.match($url): continue @@ -987,47 +999,29 @@ proc applySiteconf(pager: Pager; url: var URL; charsetOverride: Charset; if jarid notin pager.cookiejars: pager.cookiejars[jarid] = newCookieJar(url, sc.third_party_cookie) - cookieJar = pager.cookiejars[jarid] + loaderConfig.cookieJar = pager.cookiejars[jarid] else: - cookieJar = nil # override + loaderConfig.cookieJar = nil # override if sc.scripting.isSome: - scripting = sc.scripting.get + res.scripting = sc.scripting.get if sc.referer_from.isSome: - referer_from = sc.referer_from.get + res.referer_from = sc.referer_from.get if sc.document_charset.len > 0: - charsets = sc.document_charset + res.charsets = sc.document_charset if sc.images.isSome: - images = sc.images.get + res.images = sc.images.get if sc.stylesheet.isSome: - userstyle &= "\n" - userstyle &= sc.stylesheet.get + res.userstyle &= "\n" + res.userstyle &= sc.stylesheet.get if sc.proxy.isSome: - proxy = sc.proxy.get + loaderConfig.proxy = sc.proxy.get if sc.default_headers != nil: - headers = newHeaders(sc.default_headers[]) + loaderConfig.defaultHeaders = newHeaders(sc.default_headers[]) if sc.insecure_ssl_no_verify.isSome: - insecureSSLNoVerify = sc.insecure_ssl_no_verify.get - loaderConfig = LoaderClientConfig( - defaultHeaders: headers, - cookiejar: cookieJar, - proxy: proxy, - filter: newURLFilter( - scheme = some(url.scheme), - allowschemes = @["data", "cache"], - default = true - ), - insecureSSLNoVerify: insecureSSLNoVerify - ) - return BufferConfig( - userstyle: userstyle, - referer_from: referer_from, - scripting: scripting, - charsets: charsets, - images: images, - isdump: pager.config.start.headless, - charsetOverride: charsetOverride, - protocol: pager.config.protocol - ) + loaderConfig.insecureSSLNoVerify = sc.insecure_ssl_no_verify.get + if sc.autofocus.isSome: + res.autofocus = sc.autofocus.get + return res # Load request in a new buffer. proc gotoURL(pager: Pager; request: Request; prevurl = none(URL); |