Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

add man functionality

  • Loading branch information...
commit 888469b90a95f89453e1cecde5a4c644766e2d2c 1 parent b50556e
@ostinelli authored
View
5 README.md
@@ -11,6 +11,7 @@ SublimErl is a plugin for the text editor [Sublime Text 2](http://www.sublimetex
* Run **Common Tests** ( all tests for module / single test )
* Run **Dialyzer** tests ( single module )
* **Goto any exported function** of your project easily
+* Access **man pages** from the text editor
All within your test editor.
@@ -39,7 +40,8 @@ Usage
* Run **Dialyzer** on file: view the file and hit `Command-Shift-F9`
* Re-Run the **previous test**: hit `Command-F8` ( you do not need to be viewing the test to launch it )
* View **Common Tests results** in browser: hit `Command-Option-F8` (OSX) | `Command-Alt-F8` (Linux/Win)
-* **Goto any exported function** of your project easily: hit `Command-Option-P` (OSX) | `Command-Alt-P` (Linux/Win) and select a function
+* **Goto any exported function** of your project easily: hit `Command-Option-p` (OSX) | `Command-Alt-p` (Linux/Win) and select a function
+* To access **man pages**: hit `Command-Option-i` (OSX) | `Command-Alt-i` (Linux/Win) and select a module
A brief introduction video can be seen [here](http://www.youtube.com/watch?v=T0rD0CQM4Yg):
@@ -83,6 +85,7 @@ To use SublimErl, you need to have:
* The editor [Sublime Text 2](http://www.sublimetext.com/2).
* [Erlang](http://www.erlang.org/download.html) ( ..obviously ^^_ ).
* Basho's [Rebar](https://github.com/basho/rebar) built after September 13th, 2012 (which has support for the `tests=` option).
+* (optional) [Erlang man pages](http://www.erlang.org/download.html) if you use this functionality.
To unleash the full power of the plugin, you will also need to comply to:
View
5 SublimErl.sublime-settings
@@ -1,10 +1,11 @@
{
/*
- * SublimErl tries to detect automatically the paths for rebar, erl, escript and dialyzer.
+ * SublimErl tries to detect automatically the paths for erl, escript, rebar and dialyzer.
* If it doesn't succeed or you prefer to manually configure these, you can do so by inputting the paths here.
*
- * "rebar_path": "/usr/local/bin/rebar",
+ * "erl_path": "/usr/local/bin/erl",
* "escript_path": "/usr/local/bin/escript",
+ * "rebar_path": "/usr/local/bin/rebar",
* "dialyzer_path": "/usr/local/bin/dialyzer"
*/
View
3  bindings/Default (Linux).sublime-keymap
@@ -4,5 +4,6 @@
{ "keys": ["ctrl+f8"], "command": "sublim_erl_redo" },
{ "keys": ["ctrl+alt+f8"], "command": "sublim_erl_ct_results" },
{ "keys": ["ctrl+alt+l"], "command": "sublim_erl_auto_format", "context": [{ "key": "selector", "operator": "equal", "operand": "source.erlang" }] },
- { "keys": ["ctrl+alt+p"], "command": "sublim_erl_function_search", "context": [{ "key": "selector", "operator": "equal", "operand": "source.erlang" }] }
+ { "keys": ["ctrl+alt+p"], "command": "sublim_erl_function_search", "context": [{ "key": "selector", "operator": "equal", "operand": "source.erlang" }] },
+ { "keys": ["ctrl+alt+i"], "command": "sublim_erl_man", "context": [{ "key": "selector", "operator": "equal", "operand": "source.erlang" }] }
]
View
3  bindings/Default (OSX).sublime-keymap
@@ -4,5 +4,6 @@
{ "keys": ["super+f8"], "command": "sublim_erl_redo" },
{ "keys": ["super+alt+f8"], "command": "sublim_erl_ct_results" },
{ "keys": ["super+alt+l"], "command": "sublim_erl_auto_format", "context": [{ "key": "selector", "operator": "equal", "operand": "source.erlang" }] },
- { "keys": ["super+alt+p"], "command": "sublim_erl_function_search", "context": [{ "key": "selector", "operator": "equal", "operand": "source.erlang" }] }
+ { "keys": ["super+alt+p"], "command": "sublim_erl_function_search", "context": [{ "key": "selector", "operator": "equal", "operand": "source.erlang" }] },
+ { "keys": ["super+alt+i"], "command": "sublim_erl_man", "context": [{ "key": "selector", "operator": "equal", "operand": "source.erlang" }] }
]
View
18 sublimerl_core.py
@@ -45,8 +45,9 @@ def __init__(self):
self.completions_path = None
self.support_path = None
- self.rebar_path = None
+ self.erl_path = None
self.escript_path = None
+ self.rebar_path = None
self.dialyzer_path = None
self.erlang_libs_path = None
@@ -115,16 +116,21 @@ def log(message):
def test_path(path):
return path != None and os.path.exists(path)
- # rebar
- self.rebar_path = self.settings.get('rebar_path', self.get_exe_path('rebar'))
- if test_path(self.rebar_path) == False:
- log("Rebar cannot be found, please download and install from <https://github.com/basho/rebar>.")
- return False
+ # erl check
+ self.erl_path = self.settings.get('erl_path', self.get_exe_path('erl'))
+ if test_path(self.erl_path) == False:
+ log("Erlang binary (erl) cannot be found.")
# escript check
self.escript_path = self.settings.get('escript_path', self.get_exe_path('escript'))
if test_path(self.escript_path) == False:
log("Erlang binary (escript) cannot be found.")
+
+ # rebar
+ self.rebar_path = self.settings.get('rebar_path', self.get_exe_path('rebar'))
+ if test_path(self.rebar_path) == False:
+ log("Rebar cannot be found, please download and install from <https://github.com/basho/rebar>.")
+ return False
return False
# dialyzer check
View
2  sublimerl_formatter.py
@@ -63,7 +63,7 @@ def format(self):
self.view.show(current_region)
-# repeat last test
+# format command
class SublimErlAutoFormatCommand(SublimErlTextCommand):
def run_command(self, edit):
formatter = SublimErlAutoFormat(self.view, edit)
View
101 sublimerl_man.py
@@ -0,0 +1,101 @@
+# ==========================================================================================================
+# SublimErl - A Sublime Text 2 Plugin for Erlang Integrated Testing & Code Completion
+#
+# Copyright (C) 2012, Roberto Ostinelli <roberto@ostinelli.net>.
+# All rights reserved.
+#
+# BSD License
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted provided
+# that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions and the
+# following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
+# the following disclaimer in the documentation and/or other materials provided with the distribution.
+# * Neither the name of the authors nor the names of its contributors may be used to endorse or promote
+# products derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+# ==========================================================================================================
+
+
+# imports
+import sublime
+import os
+from sublimerl_core import SUBLIMERL, SublimErlTextCommand, SublimErlGlobal
+
+
+# show man
+class SublimErlMan():
+
+ def __init__(self, view):
+ # init
+ self.view = view
+ self.window = view.window()
+ self.module_names = []
+
+ self.panel_name = 'sublimerl_man'
+ self.panel_buffer = ''
+ # setup panel
+ self.setup_panel()
+
+ def setup_panel(self):
+ self.panel = self.window.get_output_panel(self.panel_name)
+ self.panel.settings().set("syntax", os.path.join(SUBLIMERL.plugin_path, "theme", "SublimErlAutocompile.hidden-tmLanguage"))
+ self.panel.settings().set("color_scheme", os.path.join(SUBLIMERL.plugin_path, "theme", "SublimErlAutocompile.hidden-tmTheme"))
+
+ def update_panel(self):
+ if len(self.panel_buffer):
+ panel_edit = self.panel.begin_edit()
+ self.panel.insert(panel_edit, self.panel.size(), self.panel_buffer)
+ self.panel.end_edit(panel_edit)
+ self.panel.show(self.panel.size())
+ self.panel_buffer = ''
+ self.window.run_command("show_panel", {"panel": "output.%s" % self.panel_name})
+
+ def hide_panel(self):
+ self.window.run_command("hide_panel")
+
+ def log(self, text):
+ self.panel_buffer += text
+ sublime.set_timeout(self.update_panel, 0)
+
+ def show(self):
+ # set modules
+ self.set_module_names()
+ # open quick panel
+ sublime.active_window().show_quick_panel(self.module_names, self.on_select)
+
+ def set_module_names(self):
+ # load file
+ modules_filepath = os.path.join(SUBLIMERL.plugin_path, "completion", "Erlang-libs.sublime-completions")
+ f = open(modules_filepath, 'r')
+ contents = eval(f.read())
+ f.close()
+ # strip out just the module names to be displayed
+ module_names = []
+ for t in contents['completions']:
+ module_names.append(t['trigger'])
+ self.module_names = module_names
+
+ def on_select(self, index):
+ # get file and line
+ module_name = self.module_names[index]
+ # open man
+ retcode, data = SUBLIMERL.execute_os_command("%s -man %s | col -b" % (SUBLIMERL.erl_path, module_name))
+ if retcode == 0: self.log(data)
+
+
+# man command
+class SublimErlManCommand(SublimErlTextCommand):
+ def run_command(self, edit):
+ man = SublimErlMan(self.view)
+ man.show()
Please sign in to comment.
Something went wrong with that request. Please try again.