nexgb: post-merge fixups and cleanups
AUTHORS, CONTRIBUTORS: still useful, add people from git log, clean up. LICENSE: Google doesn't really grant you shit anymore. The EU doesn't have software patents either, so it doesn't affect me directly. README, doc.go: erase mentions of unmaintained xgbutil.
This commit is contained in:
parent
3173202cc1
commit
48fb710f35
|
@ -1,18 +1,26 @@
|
||||||
Andrew Gallant is the maintainer of this fork. What follows is the original
|
# This is the official list of neXGB authors for copyright purposes.
|
||||||
list of authors for the x-go-binding.
|
# This file is distinct from the CONTRIBUTORS file.
|
||||||
|
|
||||||
# This is the official list of XGB authors for copyright purposes.
|
|
||||||
# This file is distinct from the CONTRIBUTORS files.
|
|
||||||
# See the latter for an explanation.
|
# See the latter for an explanation.
|
||||||
|
|
||||||
# Names should be added to this file as
|
# Names should be added to this file as
|
||||||
# Name or Organization <email address>
|
# Name or Organization <email address>
|
||||||
# The email address is not required for organizations.
|
# The email address is not required for organizations.
|
||||||
|
|
||||||
# Please keep the list sorted.
|
|
||||||
|
|
||||||
Anthony Martin <ality@pbrane.org>
|
Anthony Martin <ality@pbrane.org>
|
||||||
Firmansyah Adiputra <frm.adiputra@gmail.com>
|
Firmansyah Adiputra <frm.adiputra@gmail.com>
|
||||||
Google Inc.
|
Google Inc.
|
||||||
Scott Lawrence <bytbox@gmail.com>
|
Scott Lawrence <bytbox@gmail.com>
|
||||||
Tor Andersson <tor.andersson@gmail.com>
|
Tor Andersson <tor.andersson@gmail.com>
|
||||||
|
|
||||||
|
# The names above come from the original x-go-binding by Google.
|
||||||
|
# The following list pertains to BurntSushi/xgb and janouch.name/haven/nexgb:
|
||||||
|
|
||||||
|
Andrew Gallant <jamslam@gmail.com>
|
||||||
|
Paul Sbarra <Sbarra.Paul@gmail.com>
|
||||||
|
Axel Wagner <mail@merovius.de>
|
||||||
|
snyh <snyh@snyh.org>
|
||||||
|
Alessandro Arzilli <alessandro.arzilli@gmail.com>
|
||||||
|
fangyuanziti <tiziyuanfang@gmail.com>
|
||||||
|
Bryan Matsuo <bryan.matsuo@gmail.com>
|
||||||
|
Rabin Vincent <rabin@rab.in>
|
||||||
|
Přemysl Janouch <p@janouch.name>
|
||||||
|
|
|
@ -1,34 +1,17 @@
|
||||||
Andrew Gallant is the maintainer of this fork. What follows is the original
|
# This is the official list of people who may have contributed
|
||||||
list of contributors for the x-go-binding.
|
# code to the neXGB repository.
|
||||||
|
#
|
||||||
# This is the official list of people who can contribute
|
|
||||||
# (and typically have contributed) code to the XGB repository.
|
|
||||||
# The AUTHORS file lists the copyright holders; this file
|
# The AUTHORS file lists the copyright holders; this file
|
||||||
# lists people. For example, Google employees are listed here
|
# lists people. For example, Google employees are listed here
|
||||||
# but not in AUTHORS, because Google holds the copyright.
|
# but not in AUTHORS, because Google holds the copyright.
|
||||||
#
|
#
|
||||||
# The submission process automatically checks to make sure
|
|
||||||
# that people submitting code are listed in this file (by email address).
|
|
||||||
#
|
|
||||||
# Names should be added to this file only after verifying that
|
|
||||||
# the individual or the individual's organization has agreed to
|
|
||||||
# the appropriate Contributor License Agreement, found here:
|
|
||||||
#
|
|
||||||
# http://code.google.com/legal/individual-cla-v1.0.html
|
|
||||||
# http://code.google.com/legal/corporate-cla-v1.0.html
|
|
||||||
#
|
|
||||||
# The agreement for individuals can be filled out on the web.
|
|
||||||
#
|
|
||||||
# When adding J Random Contributor's name to this file,
|
# When adding J Random Contributor's name to this file,
|
||||||
# either J's name or J's organization's name should be
|
# either J's name or J's organization's name should be
|
||||||
# added to the AUTHORS file, depending on whether the
|
# added to the AUTHORS file.
|
||||||
# individual or corporate CLA was used.
|
|
||||||
|
|
||||||
# Names should be added to this file like so:
|
# Names should be added to this file like so:
|
||||||
# Name <email address>
|
# Name <email address>
|
||||||
|
|
||||||
# Please keep the list sorted.
|
|
||||||
|
|
||||||
Anthony Martin <ality@pbrane.org>
|
Anthony Martin <ality@pbrane.org>
|
||||||
Firmansyah Adiputra <frm.adiputra@gmail.com>
|
Firmansyah Adiputra <frm.adiputra@gmail.com>
|
||||||
Ian Lance Taylor <iant@golang.org>
|
Ian Lance Taylor <iant@golang.org>
|
||||||
|
@ -37,3 +20,16 @@ Robert Griesemer <gri@golang.org>
|
||||||
Russ Cox <rsc@golang.org>
|
Russ Cox <rsc@golang.org>
|
||||||
Scott Lawrence <bytbox@gmail.com>
|
Scott Lawrence <bytbox@gmail.com>
|
||||||
Tor Andersson <tor.andersson@gmail.com>
|
Tor Andersson <tor.andersson@gmail.com>
|
||||||
|
|
||||||
|
# The names above come from the original x-go-binding by Google.
|
||||||
|
# The following list pertains to BurntSushi/xgb and janouch.name/haven/nexgb:
|
||||||
|
|
||||||
|
Andrew Gallant <jamslam@gmail.com>
|
||||||
|
Paul Sbarra <Sbarra.Paul@gmail.com>
|
||||||
|
Axel Wagner <mail@merovius.de>
|
||||||
|
snyh <snyh@snyh.org>
|
||||||
|
Alessandro Arzilli <alessandro.arzilli@gmail.com>
|
||||||
|
fangyuanziti <tiziyuanfang@gmail.com>
|
||||||
|
Bryan Matsuo <bryan.matsuo@gmail.com>
|
||||||
|
Rabin Vincent <rabin@rab.in>
|
||||||
|
Přemysl Janouch <p@janouch.name>
|
||||||
|
|
|
@ -1,42 +1,27 @@
|
||||||
// Copyright (c) 2009 The XGB Authors. All rights reserved.
|
Copyright (c) 2009 The XGB Authors. All rights reserved.
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
// modification, are permitted provided that the following conditions are
|
modification, are permitted provided that the following conditions are
|
||||||
// met:
|
met:
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
* Redistributions of source code must retain the above copyright
|
||||||
// notice, this list of conditions and the following disclaimer.
|
notice, this list of conditions and the following disclaimer.
|
||||||
// * Redistributions in binary form must reproduce the above
|
* Redistributions in binary form must reproduce the above
|
||||||
// copyright notice, this list of conditions and the following disclaimer
|
copyright notice, this list of conditions and the following disclaimer
|
||||||
// in the documentation and/or other materials provided with the
|
in the documentation and/or other materials provided with the
|
||||||
// distribution.
|
distribution.
|
||||||
// * Neither the name of Google Inc. nor the names of its
|
* Neither the name of Google Inc. nor the names of its
|
||||||
// contributors may be used to endorse or promote products derived from
|
contributors may be used to endorse or promote products derived from
|
||||||
// this software without specific prior written permission.
|
this software without specific prior written permission.
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
//
|
|
||||||
// Subject to the terms and conditions of this License, Google hereby
|
|
||||||
// grants to You a perpetual, worldwide, non-exclusive, no-charge,
|
|
||||||
// royalty-free, irrevocable (except as stated in this section) patent
|
|
||||||
// license to make, have made, use, offer to sell, sell, import, and
|
|
||||||
// otherwise transfer this implementation of XGB, where such license
|
|
||||||
// applies only to those patent claims licensable by Google that are
|
|
||||||
// necessarily infringed by use of this implementation of XGB. If You
|
|
||||||
// institute patent litigation against any entity (including a
|
|
||||||
// cross-claim or counterclaim in a lawsuit) alleging that this
|
|
||||||
// implementation of XGB or a Contribution incorporated within this
|
|
||||||
// implementation of XGB constitutes direct or contributory patent
|
|
||||||
// infringement, then any patent licenses granted to You under this
|
|
||||||
// License for this implementation of XGB shall terminate as of the date
|
|
||||||
// such litigation is filed.
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# This Makefile is used by the developer. It is not needed in any way to build
|
# This Makefile is used by the developer. It is not needed in any way to build
|
||||||
# a checkout of the XGB repository.
|
# a checkout of the neXGB repository.
|
||||||
# It will be useful, however, if you are hacking at the code generator.
|
# It will be useful, however, if you are hacking at the code generator.
|
||||||
# i.e., after making a change to the code generator, run 'make' in the
|
# i.e., after making a change to the code generator, run 'make' in the
|
||||||
# xgb directory. This will build xgbgen and regenerate each sub-package.
|
# xgb directory. This will build xgbgen and regenerate each sub-package.
|
||||||
|
@ -14,7 +14,7 @@ ifndef XPROTO
|
||||||
XPROTO=/usr/share/xcb
|
XPROTO=/usr/share/xcb
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# All of the XML files in my /usr/share/xcb directory EXCEPT XKB. -_-
|
# All of the XML files in my /usr/share/xcb directory except XKB, Xinput, SYNC.
|
||||||
# This is intended to build xgbgen and generate Go code for each supported
|
# This is intended to build xgbgen and generate Go code for each supported
|
||||||
# extension.
|
# extension.
|
||||||
all: build-xgbgen \
|
all: build-xgbgen \
|
||||||
|
@ -74,7 +74,3 @@ gofmt:
|
||||||
gofmt -w *.go xgbgen/*.go examples/*.go examples/*/*.go xproto/xproto_test.go
|
gofmt -w *.go xgbgen/*.go examples/*.go examples/*/*.go xproto/xproto_test.go
|
||||||
colcheck *.go xgbgen/*.go examples/*.go examples/*/*.go xproto/xproto_test.go
|
colcheck *.go xgbgen/*.go examples/*.go examples/*/*.go xproto/xproto_test.go
|
||||||
|
|
||||||
push:
|
|
||||||
git push origin master
|
|
||||||
git push github master
|
|
||||||
|
|
||||||
|
|
46
nexgb/README
46
nexgb/README
|
@ -1,26 +1,28 @@
|
||||||
XGB is the X Go Binding, which is a low-level API to communicate with the
|
neXGB is a fork of a fork of the X Go Binding, which is a low-level API to
|
||||||
core X protocol and many of the X extensions. It is closely modeled after
|
communicate with the core X protocol and many of the X extensions.
|
||||||
XCB and xpyb.
|
It is closely modelled after XCB and xpyb.
|
||||||
|
|
||||||
It is thread safe and gets immediate improvement from parallelism when
|
It is thread safe and gets immediate improvement from parallelism when
|
||||||
GOMAXPROCS > 1. (See the benchmarks in xproto/xproto_test.go for evidence.)
|
GOMAXPROCS > 1. (See the benchmarks in xproto/xproto_test.go for evidence.)
|
||||||
|
|
||||||
Please see doc.go for more info.
|
Please see doc.go for more info.
|
||||||
|
|
||||||
Note that unless you know you need XGB, you can probably make your life
|
Quick usage
|
||||||
easier by using a slightly higher level library: xgbutil.
|
-----------
|
||||||
|
go get janouch.name/haven/nexgb
|
||||||
|
go run $GOPATH/src/janouch.name/haven/nexgb/examples/create-window/main.go
|
||||||
|
|
||||||
Quick Usage
|
Přemysl Janouch's fork
|
||||||
===========
|
----------------------
|
||||||
go get github.com/BurntSushi/xgb
|
I've merged BurntSushi/xgb into haven as a subdirectory due to a/ inactivity
|
||||||
go run go/path/src/github.com/BurntSushi/xgb/examples/create-window/main.go
|
upstream, and b/ intentions to make incompatible changes meant to be in sync
|
||||||
|
with the rest of the project.
|
||||||
|
|
||||||
BurntSushi's Fork
|
It's Not Exactly XGB anymore.
|
||||||
=================
|
|
||||||
I've forked the XGB repository from Google Code due to inactivty upstream.
|
|
||||||
|
|
||||||
Godoc documentation can be found here:
|
BurntSushi's fork
|
||||||
http://godoc.burntsushi.net/pkg/github.com/BurntSushi/xgb/
|
-----------------
|
||||||
|
I've forked the XGB repository from Google Code due to inactivity upstream.
|
||||||
|
|
||||||
Much of the code has been rewritten in an effort to support thread safety
|
Much of the code has been rewritten in an effort to support thread safety
|
||||||
and multiple extensions. Namely, go_client.py has been thrown away in favor
|
and multiple extensions. Namely, go_client.py has been thrown away in favor
|
||||||
|
@ -37,18 +39,8 @@ in tact.
|
||||||
I suppose I can legitimately release xgbgen under the WTFPL. To be fair, it is
|
I suppose I can legitimately release xgbgen under the WTFPL. To be fair, it is
|
||||||
at least as complex as XGB itself. *sigh*
|
at least as complex as XGB itself. *sigh*
|
||||||
|
|
||||||
What follows is the original README:
|
License
|
||||||
|
-------
|
||||||
XGB README
|
Unless otherwise noted, the neXGB source files are distributed
|
||||||
==========
|
|
||||||
XGB is the X protocol Go language Binding.
|
|
||||||
|
|
||||||
It is the Go equivalent of XCB, the X protocol C-language Binding
|
|
||||||
(http://xcb.freedesktop.org/).
|
|
||||||
|
|
||||||
Unless otherwise noted, the XGB source files are distributed
|
|
||||||
under the BSD-style license found in the LICENSE file.
|
under the BSD-style license found in the LICENSE file.
|
||||||
|
|
||||||
Contributions should follow the same procedure as for the Go project:
|
|
||||||
http://golang.org/doc/contribute.html
|
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
I like to keep all my code to 80 columns or less. I have plenty of screen real
|
Keep all code to 80 columns or less. We, the maintainers, have plenty of screen
|
||||||
estate, but enjoy 80 columns so that I can have multiple code windows open side
|
real estate, but enjoy 80 columns so that we can have multiple code windows
|
||||||
to side and not be plagued by the ugly auto-wrapping of a text editor.
|
open side to side and not be plagued by the ugly auto-wrapping of a text editor.
|
||||||
|
|
||||||
If you don't oblige me, I will fix any patch you submit to abide 80 columns.
|
If you don't oblige us, we will fix any patch you submit to abide 80 columns.
|
||||||
|
|
||||||
Note that this style restriction does not preclude gofmt, but introduces a few
|
Note that this style restriction does not preclude gofmt, but introduces a few
|
||||||
peculiarities. The first is that gofmt will occasionally add spacing (typically
|
peculiarities. The first is that gofmt will occasionally add spacing (typically
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package xgb
|
package nexgb
|
||||||
|
|
||||||
/*
|
/*
|
||||||
auth.go contains functions to facilitate the parsing of .Xauthority files.
|
auth.go contains functions to facilitate the parsing of .Xauthority files.
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package xgb
|
package nexgb
|
||||||
|
|
||||||
/*
|
/*
|
||||||
conn.go contains a couple of functions that do some real dirty work related
|
conn.go contains a couple of functions that do some real dirty work related
|
||||||
|
@ -138,7 +138,7 @@ func (c *Conn) dial(display string) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
display = display[colonIdx+1 : len(display)]
|
display = display[colonIdx+1:]
|
||||||
if len(display) == 0 {
|
if len(display) == 0 {
|
||||||
return errors.New("bad display string: " + display0)
|
return errors.New("bad display string: " + display0)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package xgb
|
package nexgb
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
|
28
nexgb/doc.go
28
nexgb/doc.go
|
@ -1,16 +1,14 @@
|
||||||
/*
|
/*
|
||||||
Package XGB provides the X Go Binding, which is a low-level API to communicate
|
Package nexgb provides the X Go Binding, which is a low-level API to communicate
|
||||||
with the core X protocol and many of the X extensions.
|
with the core X protocol and many of the X extensions.
|
||||||
|
|
||||||
It is *very* closely modeled on XCB, so that experience with XCB (or xpyb) is
|
It is *very* closely modeled on XCB, so that experience with XCB (or xpyb) is
|
||||||
easily translatable to XGB. That is, it uses the same cookie/reply model
|
easily translatable to neXGB. That is, it uses the same cookie/reply model
|
||||||
and is thread safe. There are otherwise no major differences (in the API).
|
and is thread safe. There are otherwise no major differences (in the API).
|
||||||
|
|
||||||
Most uses of XGB typically fall under the realm of window manager and GUI kit
|
Most uses of neXGB typically fall under the realm of window manager and GUI kit
|
||||||
development, but other applications (like pagers, panels, tilers, etc.) may
|
development, but other applications (like pagers, panels, tilers, etc.) may
|
||||||
also require XGB. Moreover, it is a near certainty that if you need to work
|
also require neXGB.
|
||||||
with X, xgbutil will be of great use to you as well:
|
|
||||||
https://github.com/BurntSushi/xgbutil
|
|
||||||
|
|
||||||
Example
|
Example
|
||||||
|
|
||||||
|
@ -106,13 +104,13 @@ can be found in examples/xinerama.
|
||||||
|
|
||||||
Parallelism
|
Parallelism
|
||||||
|
|
||||||
XGB can benefit greatly from parallelism due to its concurrent design. For
|
neXGB can benefit greatly from parallelism due to its concurrent design. For
|
||||||
evidence of this claim, please see the benchmarks in xproto/xproto_test.go.
|
evidence of this claim, please see the benchmarks in xproto/xproto_test.go.
|
||||||
|
|
||||||
Tests
|
Tests
|
||||||
|
|
||||||
xproto/xproto_test.go contains a number of contrived tests that stress
|
xproto/xproto_test.go contains a number of contrived tests that stress
|
||||||
particular corners of XGB that I presume could be problem areas. Namely:
|
particular corners of neXGB that I presume could be problem areas. Namely:
|
||||||
requests with no replies, requests with replies, checked errors, unchecked
|
requests with no replies, requests with replies, checked errors, unchecked
|
||||||
errors, sequence number wrapping, cookie buffer flushing (i.e., forcing a round
|
errors, sequence number wrapping, cookie buffer flushing (i.e., forcing a round
|
||||||
trip every N requests made that don't have a reply), getting/setting properties
|
trip every N requests made that don't have a reply), getting/setting properties
|
||||||
|
@ -120,12 +118,12 @@ and creating a window and listening to StructureNotify events.
|
||||||
|
|
||||||
Code Generator
|
Code Generator
|
||||||
|
|
||||||
Both XCB and xpyb use the same Python module (xcbgen) for a code generator. XGB
|
Both XCB and xpyb use the same Python module (xcbgen) for a code generator.
|
||||||
(before this fork) used the same code generator as well, but in my attempt to
|
neXGB (before BurntSushi's fork) used the same code generator as well, but in my
|
||||||
add support for more extensions, I found the code generator extremely difficult
|
attempt to add support for more extensions, I found the code generator extremely
|
||||||
to work with. Therefore, I re-wrote the code generator in Go. It can be found
|
difficult to work with. Therefore, I re-wrote the code generator in Go. It can
|
||||||
in its own sub-package, xgbgen, of xgb. My design of xgbgen includes a rough
|
be found in its own sub-package, xgbgen, of xgb. My design of xgbgen includes a
|
||||||
consideration that it could be used for other languages.
|
rough consideration that it could be used for other languages.
|
||||||
|
|
||||||
What works
|
What works
|
||||||
|
|
||||||
|
@ -143,4 +141,4 @@ compiles, unlike XKB). I don't currently have any intention of getting XKB
|
||||||
working, due to its complexity and my current mental incapacity to test it.
|
working, due to its complexity and my current mental incapacity to test it.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
package xgb
|
package nexgb
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package xgb
|
package nexgb
|
||||||
|
|
||||||
/*
|
/*
|
||||||
help.go is meant to contain a rough hodge podge of functions that are mainly
|
help.go is meant to contain a rough hodge podge of functions that are mainly
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package xgb
|
package nexgb
|
||||||
|
|
||||||
// Sync sends a round trip request and waits for the response.
|
// Sync sends a round trip request and waits for the response.
|
||||||
// This forces all pending cookies to be dealt with.
|
// This forces all pending cookies to be dealt with.
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package xgb
|
package nexgb
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
|
Loading…
Reference in New Issue