Skip to content

Commit

Permalink
add man functionality
Browse files Browse the repository at this point in the history
  • Loading branch information
ostinelli committed Oct 13, 2012
1 parent b50556e commit 888469b
Show file tree
Hide file tree
Showing 7 changed files with 125 additions and 12 deletions.
5 changes: 4 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand Down Expand Up @@ -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):

Expand Down Expand Up @@ -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:

Expand Down
5 changes: 3 additions & 2 deletions SublimErl.sublime-settings
Original file line number Diff line number Diff line change
@@ -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"
*/

Expand Down
3 changes: 2 additions & 1 deletion bindings/Default (Linux).sublime-keymap
Original file line number Diff line number Diff line change
Expand Up @@ -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" }] }
]
3 changes: 2 additions & 1 deletion bindings/Default (OSX).sublime-keymap
Original file line number Diff line number Diff line change
Expand Up @@ -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" }] }
]
18 changes: 12 additions & 6 deletions sublimerl_core.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion sublimerl_formatter.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
101 changes: 101 additions & 0 deletions sublimerl_man.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
# ==========================================================================================================
# SublimErl - A Sublime Text 2 Plugin for Erlang Integrated Testing & Code Completion
#
# Copyright (C) 2012, Roberto Ostinelli <[email protected]>.
# 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()

0 comments on commit 888469b

Please sign in to comment.