Page Menu
Home
Musing Studio
Search
Configure Global Search
Log In
Files
F13779527
term_windows.go
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
2 KB
Subscribers
None
term_windows.go
View Options
// Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package
term
import
(
"os"
"golang.org/x/sys/windows"
)
type
state
struct
{
mode
uint32
}
func
isTerminal
(
fd
int
)
bool
{
var
st
uint32
err
:=
windows
.
GetConsoleMode
(
windows
.
Handle
(
fd
),
&
st
)
return
err
==
nil
}
func
makeRaw
(
fd
int
)
(
*
State
,
error
)
{
var
st
uint32
if
err
:=
windows
.
GetConsoleMode
(
windows
.
Handle
(
fd
),
&
st
);
err
!=
nil
{
return
nil
,
err
}
raw
:=
st
&^
(
windows
.
ENABLE_ECHO_INPUT
|
windows
.
ENABLE_PROCESSED_INPUT
|
windows
.
ENABLE_LINE_INPUT
|
windows
.
ENABLE_PROCESSED_OUTPUT
)
if
err
:=
windows
.
SetConsoleMode
(
windows
.
Handle
(
fd
),
raw
);
err
!=
nil
{
return
nil
,
err
}
return
&
State
{
state
{
st
}},
nil
}
func
getState
(
fd
int
)
(
*
State
,
error
)
{
var
st
uint32
if
err
:=
windows
.
GetConsoleMode
(
windows
.
Handle
(
fd
),
&
st
);
err
!=
nil
{
return
nil
,
err
}
return
&
State
{
state
{
st
}},
nil
}
func
restore
(
fd
int
,
state
*
State
)
error
{
return
windows
.
SetConsoleMode
(
windows
.
Handle
(
fd
),
state
.
mode
)
}
func
getSize
(
fd
int
)
(
width
,
height
int
,
err
error
)
{
var
info
windows
.
ConsoleScreenBufferInfo
if
err
:=
windows
.
GetConsoleScreenBufferInfo
(
windows
.
Handle
(
fd
),
&
info
);
err
!=
nil
{
return
0
,
0
,
err
}
return
int
(
info
.
Window
.
Right
-
info
.
Window
.
Left
+
1
),
int
(
info
.
Window
.
Bottom
-
info
.
Window
.
Top
+
1
),
nil
}
func
readPassword
(
fd
int
)
([]
byte
,
error
)
{
var
st
uint32
if
err
:=
windows
.
GetConsoleMode
(
windows
.
Handle
(
fd
),
&
st
);
err
!=
nil
{
return
nil
,
err
}
old
:=
st
st
&^=
(
windows
.
ENABLE_ECHO_INPUT
|
windows
.
ENABLE_LINE_INPUT
)
st
|=
(
windows
.
ENABLE_PROCESSED_OUTPUT
|
windows
.
ENABLE_PROCESSED_INPUT
)
if
err
:=
windows
.
SetConsoleMode
(
windows
.
Handle
(
fd
),
st
);
err
!=
nil
{
return
nil
,
err
}
defer
windows
.
SetConsoleMode
(
windows
.
Handle
(
fd
),
old
)
var
h
windows
.
Handle
p
,
_
:=
windows
.
GetCurrentProcess
()
if
err
:=
windows
.
DuplicateHandle
(
p
,
windows
.
Handle
(
fd
),
p
,
&
h
,
0
,
false
,
windows
.
DUPLICATE_SAME_ACCESS
);
err
!=
nil
{
return
nil
,
err
}
f
:=
os
.
NewFile
(
uintptr
(
h
),
"stdin"
)
defer
f
.
Close
()
return
readPasswordLine
(
f
)
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, Jan 30, 2:57 AM (1 d, 42 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3610124
Attached To
rWCLI writeas-cli
Event Timeline
Log In to Comment