From cf31fe9b4fb650b27e19f5d7ee7297e383660caf Mon Sep 17 00:00:00 2001 From: The Android Open Source Project Date: Tue, 21 Oct 2008 07:00:00 -0700 Subject: Initial Contribution --- editor.py | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 editor.py (limited to 'editor.py') diff --git a/editor.py b/editor.py new file mode 100644 index 00000000..4f22257f --- /dev/null +++ b/editor.py @@ -0,0 +1,85 @@ +# +# Copyright (C) 2008 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +import sys +import subprocess +import tempfile + +from error import EditorError + +class Editor(object): + """Manages the user's preferred text editor.""" + + _editor = None + globalConfig = None + + @classmethod + def _GetEditor(cls): + if cls._editor is None: + cls._editor = cls._SelectEditor() + return cls._editor + + @classmethod + def _SelectEditor(cls): + e = os.getenv('GIT_EDITOR') + if e: + return e + + e = cls.globalConfig.GetString('core.editor') + if e: + return e + + e = os.getenv('VISUAL') + if e: + return e + + e = os.getenv('EDITOR') + if e: + return e + + if os.getenv('TERM') == 'dumb': + print >>sys.stderr,\ +"""No editor specified in GIT_EDITOR, core.editor, VISUAL or EDITOR. +Tried to fall back to vi but terminal is dumb. Please configure at +least one of these before using this command.""" + sys.exit(1) + + return 'vi' + + @classmethod + def EditString(cls, data): + """Opens an editor to edit the given content. + + Args: + data : the text to edit + + Returns: + new value of edited text; None if editing did not succeed + """ + editor = cls._GetEditor() + fd, path = tempfile.mkstemp() + try: + os.write(fd, data) + os.close(fd) + fd = None + + if subprocess.Popen([editor, path]).wait() != 0: + raise EditorError() + return open(path).read() + finally: + if fd: + os.close(fd) + os.remove(path) -- cgit v1.2.3-54-g00ecf