##// END OF EJS Templates
Backport PR #2738: Unicode content crashes the pager (console)...
Backport PR #2738: Unicode content crashes the pager (console) We've run into an interesting bug in the astropy project. https://github.com/astropy/astropy/issues/600 When displaying a docstring that contains Unicode and is also long enough that it gets sent to the pager it fails since the docstring can't be sent to the pager as ascii. This crashes in the middle of sending content to the pager, so the shell ends up in an inconsistent state and stops echoing the keyboard etc. The fix (attached) is merely to encode the content sent to the pager in the same encoding as the terminal (`sys.stdout.encoding`). Strictly speaking, this isn't always the right thing to do, since the pager may be configured to expect a different encoding than the terminal, but that is sort of an irrational way to configure a machine... ;) For example, `less`, in the absence of any special environment variables to tell it otherwise, uses the standard `LC*` environment variables to determine what to do, which should be the same mechanism the terminal also uses by default. If anyone can suggest a better fix, I'm all for it. Perhaps it should be configurable, defaulting to `sys.stdout.encoding`?

File last commit:

r8076:c7de115c
r9853:7f9a133e
Show More
notebook.css
393 lines | 7.5 KiB | text/css | CssLexer
/**
* Primary styles
*
* Author: IPython Development Team
*/
body {
overflow: hidden;
}
span#save_widget {
padding: 5px;
margin: 0px 0px 0px 300px;
display:inline-block;
}
span#notebook_name {
height: 1em;
line-height: 1em;
padding: 3px;
border: none;
font-size: 146.5%;
}
.ui-menubar-item .ui-button .ui-button-text {
padding: 0.4em 1.0em;
font-size: 100%;
}
.ui-menu {
-moz-box-shadow: 0px 6px 10px -1px #adadad;
-webkit-box-shadow: 0px 6px 10px -1px #adadad;
box-shadow: 0px 6px 10px -1px #adadad;
}
.ui-menu .ui-menu-item a {
border: 1px solid transparent;
padding: 2px 1.6em;
}
.ui-menu .ui-menu-item a.ui-state-focus {
margin: 0;
}
.ui-menu hr {
margin: 0.3em 0;
}
#menubar_container {
position: relative;
}
#notification {
position: absolute;
right: 3px;
top: 3px;
height: 25px;
padding: 3px 6px;
z-index: 10;
}
#toolbar {
padding: 3px 15px;
}
#cell_type {
font-size: 85%;
}
div#main_app {
width: 100%;
position: relative;
}
span#quick_help_area {
position: static;
padding: 5px 0px;
margin: 0px 0px 0px 0px;
}
.help_string {
float: right;
width: 170px;
padding: 0px 5px;
text-align: left;
font-size: 85%;
}
.help_string_label {
float: right;
font-size: 85%;
}
div#notebook_panel {
margin: 0px 0px 0px 0px;
padding: 0px;
}
div#notebook {
overflow-y: scroll;
overflow-x: auto;
width: 100%;
/* This spaces the cell away from the edge of the notebook area */
padding: 5px 5px 15px 5px;
margin: 0px;
background-color: white;
}
div#pager_splitter {
height: 8px;
}
div#pager {
padding: 15px;
overflow: auto;
display: none;
}
div.ui-widget-content {
border: 1px solid #aaa;
outline: none;
}
.cell {
border: 1px solid transparent;
}
div.cell {
width: 100%;
padding: 5px 5px 5px 0px;
/* This acts as a spacer between cells, that is outside the border */
margin: 2px 0px 2px 0px;
}
div.code_cell {
background-color: white;
}
/* any special styling for code cells that are currently running goes here */
div.code_cell.running {
}
div.prompt {
/* This needs to be wide enough for 3 digit prompt numbers: In[100]: */
width: 11ex;
/* This 0.4em is tuned to match the padding on the CodeMirror editor. */
padding: 0.4em;
margin: 0px;
font-family: monospace;
text-align:right;
}
div.input {
page-break-inside: avoid;
}
/* input_area and input_prompt must match in top border and margin for alignment */
div.input_area {
color: black;
border: 1px solid #ddd;
border-radius: 3px;
background: #f7f7f7;
}
div.input_prompt {
color: navy;
border-top: 1px solid transparent;
}
div.output_wrapper {
/* This is a spacer between the input and output of each cell */
margin-top: 5px;
margin-left: 5px;
/* FF needs explicit width to stretch */
width: 100%;
/* this position must be relative to enable descendents to be absolute within it */
position: relative;
}
/* class for the output area when it should be height-limited */
div.output_scroll {
/* ideally, this would be max-height, but FF barfs all over that */
height: 24em;
/* FF needs this *and the wrapper* to specify full width, or it will shrinkwrap */
width: 100%;
overflow: auto;
border-radius: 3px;
box-shadow: inset 0 2px 8px rgba(0, 0, 0, .8);
}
/* output div while it is collapsed */
div.output_collapsed {
margin-right: 5px;
}
div.out_prompt_overlay {
height: 100%;
padding: 0px;
position: absolute;
border-radius: 3px;
}
div.out_prompt_overlay:hover {
/* use inner shadow to get border that is computed the same on WebKit/FF */
box-shadow: inset 0 0 1px #000;
background: rgba(240, 240, 240, 0.5);
}
div.output_prompt {
color: darkred;
/* 5px right shift to account for margin in parent container */
margin: 0 5px 0 -5px;
}
/* This class is the outer container of all output sections. */
div.output_area {
padding: 0px;
page-break-inside: avoid;
}
/* This class is for the output subarea inside the output_area and after
the prompt div. */
div.output_subarea {
padding: 0.4em 0.4em 0.4em 0.4em;
}
/* The rest of the output_* classes are for special styling of the different
output types */
/* all text output has this class: */
div.output_text {
text-align: left;
color: black;
font-family: monospace;
}
/* stdout/stderr are 'text' as well as 'stream', but pyout/pyerr are *not* streams */
div.output_stream {
padding-top: 0.0em;
padding-bottom: 0.0em;
}
div.output_stdout {
}
div.output_stderr {
background: #fdd; /* very light red background for stderr */
}
div.output_latex {
text-align: left;
color: black;
}
div.output_html {
}
div.output_png {
}
div.output_jpeg {
}
div.text_cell {
background-color: white;
padding: 5px 5px 5px 5px;
}
div.text_cell_input {
color: black;
border: 1px solid #ddd;
border-radius: 3px;
background: #f7f7f7;
}
div.text_cell_render {
font-family: "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;
outline: none;
resize: none;
width: inherit;
border-style: none;
padding: 5px;
color: black;
}
/* The following gets added to the <head> if it is detected that the user has a
* monospace font with inconsistent normal/bold/italic height. See
* notebookmain.js. Such fonts will have keywords vertically offset with
* respect to the rest of the text. The user should select a better font.
* See: https://github.com/ipython/ipython/issues/1503
*
* .CodeMirror span {
* vertical-align: bottom;
* }
*/
.CodeMirror {
line-height: 1.231; /* Changed from 1em to our global default */
}
.CodeMirror-scroll {
height: auto; /* Changed to auto to autogrow */
/* The CodeMirror docs are a bit fuzzy on if overflow-y should be hidden or visible.*/
/* We have found that if it is visible, vertical scrollbars appear with font size changes.*/
overflow-y: hidden;
overflow-x: auto; /* Changed from auto to remove scrollbar */
}
/* CSS font colors for translated ANSI colors. */
.ansiblack {color: black;}
.ansired {color: darkred;}
.ansigreen {color: darkgreen;}
.ansiyellow {color: brown;}
.ansiblue {color: darkblue;}
.ansipurple {color: darkviolet;}
.ansicyan {color: steelblue;}
.ansigrey {color: grey;}
.ansibold {font-weight: bold;}
.completions {
position: absolute;
z-index: 10;
overflow: hidden;
border: 1px solid grey;
}
.completions select {
background: white;
outline: none;
border: none;
padding: 0px;
margin: 0px;
overflow: auto;
font-family: monospace;
}
option.context {
background-color: #DEF7FF;
}
option.introspection {
background-color: #EBF4EB;
}
/*fixed part of the completion*/
.completions p b {
font-weight:bold;
}
.completions p {
background: #DDF;
/*outline: none;
padding: 0px;*/
border-bottom: black solid 1px;
padding: 1px;
font-family: monospace;
}
pre.dialog {
background-color: #f7f7f7;
border: 1px solid #ddd;
border-radius: 3px;
padding: 0.4em;
padding-left: 2em;
}
p.dialog {
padding : 0.2em;
}
.shortcut_key {
display: inline-block;
width: 15ex;
text-align: right;
font-family: monospace;
}
.shortcut_descr {
}
/* Word-wrap output correctly. This is the CSS3 spelling, though Firefox seems
to not honor it correctly. Webkit browsers (Chrome, rekonq, Safari) do.
*/
pre, code, kbd, samp { white-space: pre-wrap; }
#fonttest {
font-family: monospace;
}
.js-error {
color: darkred;
}