File: tab_expansion.py

package info (click to toggle)
gnat-gps 4.3-5
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 49,096 kB
  • ctags: 20,461
  • sloc: ada: 274,120; ansic: 154,849; python: 9,890; tcl: 9,812; sh: 8,192; xml: 7,970; cpp: 4,737; yacc: 3,520; makefile: 2,136; lex: 2,043; java: 1,638; perl: 302; awk: 265; sed: 161; asm: 14; fortran: 2; lisp: 1
file content (66 lines) | stat: -rw-r--r-- 2,702 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# This module defines functions that insert spaces to implement tab stops
# based on language-specific indentation preferences.
#
# For example, using Ada, say the user sets the Ada indentation preference
# to 3: the logical tab stops will then be at columns 4, 7, 10, 13, and so
# on.  Pressing the tab key at any point on a line will emit the required
# number of blanks so that the cursor will be placed at the next stop on
# that line.  Any text to the right of the cursor will be shifted further
# to the right by the number of blanks inserted.
#
# Ada, C, and C++ are supported.  Each language uses the Tab key without
# conflict because the corresponding actions have an associated language
# filter.  The action is only applied if the language for the current buffer
# matches the action's specified language.

import GPS

#
# Ada 
#

def goto_Ada_tab_stop ():
   """Insert spaces to move to the next logical tab stop, where tab stops
   are based strictly on the user's indentation preference for Ada"""
   current_file = GPS.current_context().file().name();
   current_column = GPS.Editor.cursor_get_column (current_file);
   indent = GPS.Preference ("Ada-Indent-Level").get();
   next_tab_stop = (((current_column + indent - 1) / indent) * indent) + 1;
   offset = next_tab_stop - current_column;
   GPS.Editor.insert_text (' ' * offset);


GPS.parse_xml ("""
   <action name="goto next Ada tab stop" output="none" category="Ada">
      <description>Inserts text to next tab stop defined by user's Ada indentation preference</description>
      <filter module="Source_Editor" language="Ada"/>
      <shell lang="python">tab_expansion.goto_Ada_tab_stop()</shell>
   </action>
   <key action="goto next Ada tab stop">Tab</key>
""")


#
# C and C++
#

def goto_C_tab_stop ():
   """Insert spaces to move to the next logical tab stop, where tab stops
   are based strictly on the user's indentation preference for C/C++"""
   current_file = GPS.current_context().file().name();
   current_column = GPS.Editor.cursor_get_column (current_file);
   indent = GPS.Preference ("C-Indent-Level").get();
   next_tab_stop = (((current_column + indent - 1) / indent) * indent) + 1;
   offset = next_tab_stop - current_column;
   GPS.Editor.insert_text (' ' * offset);


GPS.parse_xml ("""
   <action name="goto next C tab stop" output="none">
      <description>Inserts text to next tab stop defined by user's C/C++ indentation preference</description>
      <filter module="Source_Editor" language="C"/>
      <shell lang="python">tab_expansion.goto_C_tab_stop()</shell>
   </action>
   <key action="goto next C tab stop">Tab</key>
""")