This commit is contained in:
Liang Ding 2014-09-18 16:09:23 +08:00
parent 79cbbef738
commit 7312a54eae
11 changed files with 2 additions and 439 deletions

2
doc/README.txt Normal file
View File

@ -0,0 +1,2 @@
* User Guide: https://www.gitbook.io/book/88250/wide-user-guide
* Developer Guide: https://www.gitbook.io/book/88250/wide-dev-guide

View File

@ -1,32 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Wide - 配置</title>
</head>
<body>
<h1>配置</h1>
<pre>
{
"Server": "{IP}:7070", 运行的 IP端口
"StaticServer": "http://{IP}:7070", 静态资源服务 IP端口
"EditorChannel": "ws://{IP}:7070", 编辑器消息通道
"OutputChannel": "ws://{IP}:7070", 输出窗口消息通道
"ShellChannel": "ws://{IP}:7070", Shell 消息通道
"StaticResourceVersion": "201409032040", 静态资源版本
"MaxProcs": 4, Go 协程并行处理数量,可等于 Go CPU 核数
"RuntimeMode": "dev", 运行模式dev 为开发模式prod 为生产模式
"Pwd": "{pwd}", 工作目录,设置为 "{pwd}" 将自动获取
"Users": [
{
"Name": "admin", 用户名
"Password": "admin", 用户密码
"Workspace": "{pwd}/data/user_workspaces/admin" 用户工作空间GOPATH
}
]
}
</pre>
</body>
</html>

View File

@ -1,79 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Wide - 开发指南</title>
</head>
<body>
<h1>开发指南</h1>
<p>
该文档介绍了 Wide 的核心设计原理与实现。
</p>
<p>
如果您要读 Wide 的源码或者要进行修改、二次开发等,请先仔细阅读该文档。
</p>
<h2>关键设计</h2>
<h3>工作空间</h3>
<p>
Wide 是一个多用户的集成开发环境,每个用户的工作空间是完全隔离的:
<ul>
<li>文件路径</li>
<li>环境变量</li>
<li>运行进程</li>
</ul>
<p>
例如在执行“构建 & 运行”时Wide 会设置命令 go build 执行的环境变量 $GOPATH 为用户的工作空间,这样编译过程就是在该用户的工作空间中进行,保证其隔离性。
</p>
<h3>会话</h3>
<p>
在 UI 上存在两种 tab浏览器 tab编辑器 tab。
用户可以在一个浏览器 tab 中打开多个编辑器 tabs但输出窗口只有一个。这意味着一个浏览器 tab 只能有一个正在运行的用户代码的程序进程。
需要同时运行多个程序进程的场景可以通过打开多个浏览器 tabs 达成。
</p>
<ul>
<li>一个浏览器 tab 对应一个 Wide 会话:只要打开/刷新一个 tab就会新建一个 Wide 会话</li>
<li>Wide 会话的 id 在源码中统一命名为 <code>sid</code>,在需要使用 HTTP 会话的地方也统一明确表明</li>
</ul>
<h3>WebSocket</h3>
<p>
WebSocket 用于后端推送数据给前端:
</p>
<ul>
<li>输出通道</li>
<li>通知通道</li>
<li>Shell 通道</li>
</ul>
通道和会话一对一关联,也就是说如果用户新开浏览器 tab则新建通道和其关联。
<h3>事件与通知</h3>
<p>
每个会话都有一个对应的事件队列,当接收到事件时取出该事件并转为通知,再通过通知窗口通道推送给前端。
还存在一个全局事件队列,入队的事件将分发到每个用户的事件队列中,以便进行通知广播。
</p>
<p>
通知中的消息需要国际化处理。在语言配置文件中以 notification_ 为前缀事件代码event code为后缀的项即通知消息。
</p>
<h3>代码辅助</h3>
<ul>
<li>自动完成,通过 gocode 工具实现</li>
<li>跳转到声明,通过 ide_stub 工具实现</li>
<li>查找使用,通过 ide_stub 工具实现</li>
</ul>
代码辅助功能满足工作空间隔离。
<h2>编码规范</h2>
</body>
</html>

View File

@ -1,35 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Wide -编辑器</title>
</head>
<body>
<h1>编辑器</h1>
<h2>Tabs</h2>
<ul>
<li>
新打开一个文件会新开一个编辑器,最多可以打开 64 个编辑器
</li>
<li>
焦点切换到编辑器Ctrl+0左边的文件树也会选中相关的文件
<li>
在多个 tabs 之间切换快捷键Ctrl+Tab
</li>
<li>
关闭当前编辑器快捷键Ctrl+W
</li>
</ul>
<h2>文件保存</h2>
在下面几种情况发生时会保存编辑器内容:
<ul>
<li>保存/格式化:将保存当前编辑器的内容</li>
<li>构建 & 运行/go install将保存所有打开的编辑器的内容</li>
<li><strong>自动完成/跳转到声明/查找使用:将保存当前编辑器的内容</strong></li>
</ul>
我们基本可以认为在写代码时文件是实时自动保存的。
</body>
</html>

View File

@ -1,67 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Wide - 常见问题与解答</title>
</head>
<body>
<h1>常见问题与解答</h1>
<ul>
<li><b>默认用户是?</b></li>
<p>
默认用户是 admin 用户。用户名admin密码admin。
</p>
<li><b>什么是工作空间?</b></li>
<p>
工作空间是当前用户的 $GOPATH 路径指定的目录,一个用户只能有一个工作空间。
例如 admin 用户的工作空间默认路径是 {wide}/data/user_workspaces/admin/,可以在 wide.json 中配置。
</p>
<li><b>wide.json 是什么?</b></li>
<p>
wide.json 是 Wide 的配置文件,路径是 {wide}/conf/wide.json。Wide 的所有配置(例如端口、工作空间、用户帐号、用户选项等)都是保存在这个文件中的。
</p>
<p>
如果 Wide 是个人使用,那么默认的配置应该可以很好的工作,不需要修改任何地方。
</p>
<li><b>如何才能使用已有 $GOPATH比如我的 $GOPATH 是 D:\\GoGoGo我要如何才能使用这个目录作为 admin 用户的工作空间?</b></li>
<p>
修改 wide.json 中 admin 用户的 Workspace将其从默认的 "{pwd}/data/user_workspaces/admin" 改为 "D:\\GoGoGo"。
</p>
<p>
$GOPATH 是可以通过路径分隔符Linux 下是 :Windows 下是 ;)配置多个路径的,但我们不建议您这样配置,因为多个多个目录会造成构建/代码补全等功能的性能下降。
</p>
<li><b>文件树里的 Go API 目录是什么?</b></li>
<p>
该目录是读取 $GOROOT/src/pkg 生成的,方便用户查看 Go API 源代码。
在该目录下是不允许新建、编辑、删除文件的。
</p>
<li><b>如何配置多用户?</b></li>
<p>
修改 wide.json 中的 Users 数组,按照默认用户的格式(用户名、密码等)添加。
</p>
<li><b>为什么代码辅助功能(自动完成/跳转到声明等)失效了?</b></li>
<p>
请确认正确安装了 gocode 和 ide_stub 工具。安装命令:
</p>
<ul>
<li>go get -u github.com/88250/ide_stub</li>
<li>go get -u github.com/nsf/gocode</li>
</ul>
<p>
如果安装不对Wide 会自动检查并通过通知窗口告知用户。另外,通知窗口还会告知用户一些其他重要信息,例如 IDE 版本更新提醒等。
</p>
</ul>
</body>
</html>

View File

@ -1,26 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Wide -特性列表</title>
</head>
<body>
<h1>特性列表</h1>
<ul>
<li>代码高亮、折叠Go/HTML/JavaScript/Markdown 等</li>
<li>自动完成Go/HTML 等</li>
<li>编译检查:编辑器提示编译错误</li>
<li>格式化Go/HTML/JSON 等</li>
<li>运行:支持同时运行多个程序,方便联调</li>
<li>调试:基于 gdb 的调试系统</li>
<li>多用户:团队开发,方便协作</li>
<li>代码导航:跳转到声明,查找使用,文件搜索等</li>
<li>Shell连接到服务器执行命令</li>
<li>Web 开发前端HTML/JS/CSS开发支持</li>
<li>go toolgo get/install/fmt 等</li>
<li>Git 整合:常用 git 命令可视化操作</li>
</ul>
</body>
</html>

View File

@ -1,41 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Wide - 文档首页</title>
</head>
<body>
<h1>Wide</h1>
<p>
Wide 是一个基于 <b>W</b>eb 的团队 Golang <b>IDE</b>
</p>
<h2><a href="motivation.html">动机</a></h2>
<h2>特性</h2>
<ul>
<li>语法高亮</li>
<li>自动完成提示</li>
<li>代码格式化</li>
<li>运行 & 调试</li>
<li>多用户</li>
<li>文件导航与跳转</li>
<li>Shell</li>
<li>Git 集成</li>
<li>Web 开发支持</li>
</ul>
完整<a href="features.html">特性列表</a>
<h2>使用指南</h2>
<ul>
<li><a href="setup.html">安装</a></li>
<li><a href="multiplayer.html">多用户</a></li>
<li><a href="editor.html">编辑器</a></li>
<li><a href="keyboard_shortcuts.html">键盘快捷键</a></li>
</ul>
<h2><a href="dev/index.html">开发指南</a></h2>
<h2><a href="faq.html">FAQ</a></h2>
</body>
</html>

View File

@ -1,47 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Wide - 键盘快捷键</title>
</head>
<body>
<h1>键盘快捷键</h1>
<h2>编辑器</h2>
<ul>
<li>Ctrl+\: 自动补全</li>
<li>Ctrl+B跳转到声明</li>
<li>Alt+Shift+F格式化</li>
<li>Ctrl+G: 跳转到行</li>
<li>Ctrl+E: 删除当前行</li>
<li>Ctrl+S保存当前编辑器文件</li>
<li>F11: 编辑器全屏</li>
<li>Shift+Tab: 自动缩进</li>
<li>Ctrl+]: 缩进</li>
<li>Ctrl+[: 反缩进</li>
</ul>
<h2>焦点</h2>
<ul>
<li>Ctrl+0焦点切换到编辑器</li>
<li>Ctrl+1焦点切换到文件树</li>
<li>Ctrl+4焦点切换到输出窗口</li>
<li>Ctrl+5焦点切换到搜索窗口</li>
<li>Ctrl+6焦点切换到通知窗口</li>
<li>Ctrl+Tab编辑器 Tabs 切换</li>
<li>Ctrl+W关闭当前编辑器</li>
</ul>
<h2>运行</h2>
<ul>
<li>F6构建 & 运行</li>
</ul>
TBD:
<ul>
<li>Alt+F7查找使用</li>
</ul>
</body>
</html>

View File

@ -1,40 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Wide - 动机</title>
</head>
<body>
<h1>Wide 的由来</h1>
<ul>
<li><b>团队的</b> IDE
<ul>
<li>安全可靠:项目源代码实时保存在服务器上,开发者的机器崩溃不会丢失任何源代码</li>
<li>统一环境:服务器统一配置开发环境,开发者本机无需任何额外配置</li>
<li>开箱即用5 分钟搭建服务器;开发者打开浏览器即可开发、调试</li>
<li>版本控制:每个开发者拥有自己的源代码仓库,随时可和主干保持同步</li>
</ul>
</li>
<li><b>基于 Web 的</b> IDE
<ul>
<li>客户端只需要浏览器</li>
<li>跨平台,甚至在移动设备上</li>
<li>For the geeks</li>
</ul>
</li>
<li>商业-开源的一次尝试:会推出专门为企业定制的 Wide贴近开发流程</li>
<li>目前较为流行的 Go IDE 都有一些缺陷或遗憾:
<ul>
<li>文本编辑器类vim/emacs/sublime/Atom 等):对于新手门槛太高,搭建复杂</li>
<li>插件类goclipse 等):需要原 IDE 支持,不够专业</li>
<li>LiteIDE界面不够 modern :p</li>
<li>没有团队开发体验</li>
</ul>
</li>
<li>Go IDE 很少,用 Go 本身开发的 IDE 更是没有,这是一个很好的尝试</li>
</ul>
</body>
</html>

View File

@ -1,25 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Wide - 多用户</title>
</head>
<body>
<h1>多用户</h1>
<p>
支持多个用户同时使用一个 Wide 服务器,每个用户有自己独立的源代码仓库,编码/运行/调式都是在自己的工作空间中进行,不会影响其他用户。
</p>
<h2>工作空间</h2>
<p>
Wide 的工作空间就是 Go 中的 <a href="https://golang.org/doc/code.html#Workspaces" target="_blank">workspaces</a>,每个用户的工作空间路径可在 wide.json 中进行配置。
</p>
<h2>运行时</h2>
<p>
用户在运行程序时进程是跑在服务器上的,所以多用户同时运行程序时最常见的问题就是资源冲突(比如网络端口),目前这个问题只能靠用户自行规避。
</p>
</body>
</html>

View File

@ -1,47 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Wide - 安装</title>
</head>
<body>
<h1>安装</h1>
<h2>基础安装</h2>
<ol>
<li>下载 Wide 安装包</li>
<li>解压到安装路径 {wide},例如 /root/wide</li>
<li>配置 {wide}/conf/<a href="conf.html">wide.json</a>(可选,默认配置应该可以工作)</li>
</ol>
<h2>多用户配置</h2>
前提:需要安装 git。
<ol>
<li>初始化主库:在 {wide}/data/workspace/src 下执行 git init</li>
<li>添加用户:修改 {wide}/conf/wide.json 中的 Users</li>
<li>添加用户库:在 {wide}/data/user_workspaces/{user}/ 中 git clone 主库</li>
</ol>
<h2>从源码安装</h2>
前提:
<ol>
<li>搭建好 Go 开发环境</li>
<li>安装好 git</li>
</ol>
步骤:
<ol>
<li>通过 <code>git clone</code> 或下载 zip 包方式获取 Wide 源码(项目地址:<a href="https://github.com/b3log/wide">https://github.com/b3log/wide</a></li>
<li>获取依赖,在 Wide 源码目录下执行:
<ul>
<li><code>go get -u</code></li>
<li><code>go get -u github.com/88250/ide_stub</code></li>
<li><code>go get -u github.com/nsf/gocode</code></li>
</ul>
<li>编译:在 Wide 源码目录下执行 <code>go build</code></li>
<li>配置 {wide}/conf/<a href="conf.html">wide.json</a>(可选,默认配置应该可以工作)</li>
<li>运行可执行文件 wide 或 wide.exe</li>
</ol>
</body>
</html>