~ubuntu-branches/ubuntu/utopic/pida/utopic

« back to all changes in this revision

Viewing changes to pida/editors/vimedit.py

  • Committer: Bazaar Package Importer
  • Author(s): Jan Luebbe
  • Date: 2007-04-17 16:08:06 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20070417160806-3ttlb6igf94x9i03
Tags: 0.4.4-1
* New upstream release (closes: #419129)
* Add dependency on python-glade2 (closes: #418716)
* Update copyright

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
#SOFTWARE.
23
23
 
24
24
 
 
25
import gobject
 
26
import distutils.spawn as spawn
 
27
 
25
28
# pida core import(s)
26
29
import pida.core.service as service
27
30
 
28
31
# pida utils import(s)
29
 
import pida.utils.vim.vimcom as vimcom
30
32
import pida.utils.vim.vimembed as vimembed
31
33
import pida.utils.vim.vimeditor as vimeditor
32
34
 
33
35
defs = service.definitions
34
 
types = service.types
 
36
 
 
37
from pida.model import attrtypes as types
 
38
 
 
39
class VimEmbedConfig:
 
40
    __order__ = ['behaviour', 'vim_command', 'display']
 
41
    class vim_command(defs.optiongroup):
 
42
        """Vim command options."""
 
43
        __order__ = ['use_cream']
 
44
        label = "Commands"
 
45
        
 
46
        class use_cream(defs.option):
 
47
            """Whether Cream for Vim will be used"""
 
48
            rtype = types.boolean
 
49
            default = False
 
50
 
 
51
    class display(defs.optiongroup):
 
52
        """Vim display options"""
 
53
        __order__ = ['colour_scheme', 'hide_vim_menu']
 
54
        label = "Display"
 
55
        class colour_scheme(defs.option):
 
56
            """The colour scheme to use in vim (Empty will be ignored)."""
 
57
            rtype = types.string
 
58
            label = "Color scheme:"
 
59
            default = ''
 
60
        class hide_vim_menu(defs.option):
 
61
            """Whether the vim menu will be hidden."""
 
62
            rtype = types.boolean
 
63
            label = "Hide Vim menu"
 
64
            default = False
 
65
 
 
66
    class behaviour(defs.optiongroup):
 
67
        """How Vim behaves with PIDA"""
 
68
        __order__ = ['open_directories_in_pida']
 
69
        label = 'Behaviour'
 
70
        class open_directories_in_pida(defs.option):
 
71
            """Whether directories opened in Vim will open in the PIDA file
 
72
            manager"""
 
73
            rtype = types.boolean
 
74
            label = "Open directories in PIDA"
 
75
            default = True
 
76
 
 
77
    __markup__ = lambda self: 'Vim Embedded'
35
78
 
36
79
 
37
80
class vim_embedded_editor(vimeditor.vim_editor, service.service):
38
81
 
39
82
    display_name = 'Embedded Vim'
40
83
 
41
 
    single_view_type = vimembed.vim_embed
42
 
    single_view_book = 'edit'
 
84
    config_definition = VimEmbedConfig
 
85
 
 
86
    class Vim(defs.View):
 
87
        view_type = vimembed.vim_embed
 
88
        book_name = 'edit'
 
89
 
 
90
    def cmd_grab_focus(self):
 
91
        self.single_view.grab_input_focus()
43
92
 
44
93
    def init(self):
45
94
        self.__srv = None
 
95
        self.__view = None
46
96
        vimeditor.vim_editor.init(self)
47
97
 
48
 
    class vim_command(defs.optiongroup):
49
 
        """Vim command options."""
50
 
        class use_cream(defs.option):
51
 
            rtype = types.boolean
52
 
            default = False
53
 
 
54
 
    class vim_events(defs.optiongroup):
55
 
        """How PIDA will react to events from Vim."""
56
 
        class shutdown_with_vim(defs.option):
57
 
            rtype = types.boolean
58
 
            default = False
 
98
    @classmethod
 
99
    def get_sanity_errors(self):
 
100
        if not spawn.find_executable('gvim'):
 
101
            return ['Gvim is not installed']
59
102
 
60
103
    def get_server(self):
61
104
        """Return our only server."""
62
105
        return self.__srv
63
106
    server = property(get_server)
64
107
 
65
 
    def start(self):
66
 
        self.create_single_view()
67
 
        if self.opt('vim_command', 'use_cream'):
 
108
    def vim_start(self):
 
109
        self.__view = self.create_view('Vim')
 
110
        if self.opts.vim_command__use_cream:
68
111
            command = 'cream'
69
112
        else:
70
113
            command = 'gvim'
71
 
        self.single_view.run(command)
 
114
        self.show_view(view=self.__view)
 
115
        def _r(command=command):
 
116
            self.__view.run(command)
 
117
        gobject.idle_add(_r)
72
118
 
73
119
    def vim_new_serverlist(self, serverlist):
74
 
        if (self.single_view is not None and
75
 
            self.single_view.servername in serverlist and
 
120
        if (self.__view is not None and
 
121
            self.__view.servername in serverlist and
76
122
            not self.started):
77
 
            self.__srv = self.single_view.servername
78
 
            self.vim_window.init_server(self.server)
 
123
            self.__srv = self.__view.servername
 
124
            self.vim_init_server()
79
125
            self.reset()
80
126
            self.__files = {}
81
 
            self.get_service('editormanager').events.emit('started')
 
127
            self.stop_fetching_serverlist()
 
128
            def emit_start():
 
129
                self.get_service('editormanager').events.emit('started')
 
130
            gobject.idle_add(emit_start)
82
131
 
83
132
    def after_shutdown(self, server):
84
 
        if self.opt('vim_events', 'shutdown_with_vim'):
 
133
        def stop():
85
134
            self.boss.stop()
86
 
        else:
87
 
            self.restart()
 
135
        gobject.idle_add(stop)
88
136
 
89
137
    def restart(self):
90
138
        self.__srv = None
91
 
        self.single_view.close()
 
139
        self.__view.close()
92
140
        self.call('start')
93
141
 
94
142
    def has_started(self):
95
143
        return self.server is not None
96
144
    started = property(has_started)
97
145
 
98
 
    def confirm_single_view_controlbar_clicked_close(self, view):
99
 
        self.call('close', filename=self.current_file)
100
 
        return False
 
146
    def view_confirm_close(self, view):
 
147
        doc=self.current_document
 
148
        if doc:
 
149
            self.call('close', filename=self.current_document.filename)
 
150
            return False
 
151
        else:
 
152
            return True
 
153
    def get_single_view(self):
 
154
        return self.__view
 
155
    single_view = property(get_single_view)
101
156
 
102
157
 
103
158
Service = vim_embedded_editor