User Tools

Site Tools


ultraedit

UltraEdit

Here are notes on configuring UltraEdit…

Code on Linux Boxes

Have code on a Linux box that you want to share via SAMBA with a Windows box?

On the Perforce client, Delete Host and use ALtRoot as per the Perforce documentation. There's a special rule that you have to specify Root for the Windows path, and then an AltRoot for your Linux path.

  1. Delete Host
  2. Use Root for the Windows path, and AltRoots for the Linux path.

Then, an additional trick to translate filepaths can be done on the Linux side like so:

.bashrc
# Used by the "convert_paths" command
export SAMBA_ROOT=$HOME/sandbox
convert_paths
#!/usr/bin/python
import os
import sys
from subprocess import check_output
 
samba_root = os.environ['SAMBA_ROOT']
win_drive = 'Z'
 
def win2nix(s):
    global win_drive
    if len(s) > 3 and s[1] == ':' and s[2] == '\\':
        win_drive = s[0]
        return "%s/%s" % (samba_root, s[3:].replace('\\', '/'))
    return s
 
def nix2win(s):
    for line in s.splitlines():
        if line.startswith(samba_root):
            print "%s:%s" % (win_drive, line.replace('/', '\\'))
        else:
            print line
 
if __name__ == '__main__':
    params = [win2nix(i) for i in sys.argv[1:]]
    # Note: commands like "cd" would require "shell=true"
    r = check_output(params)
    nix2win(r)

Advanced User Tools

Use PuTTY plink to be able to send commands via ssh to a Linux workstation. Then…

plink.exe username@10.1.1.200 findsymbol '%p' "%sel%" 
plink.exe username@10.1.1.200 convert_paths p4 edit '%f'

Or, suppose you've configured a Perforce client to work on a Linux system, and for Windows to access it via a SAMBA share. Use the Root/AltRoots/no Home trick. Then, you can have UltraEdit do a Perforce diff like so:

"C:\Program Files\Perforce\p4v.exe" -cmd 'prevdiff %f'

Scripts

Assume you have a User Tool named “find-symbol” (as above) that outputs a list of files and line numbers like:

Z:\sourcecode\main.cpp(204):  msgType, enum name of class:MainClass	file:

If there's only one line of results in the list, you could have a script that automatically goes to the symbol of that only result.

goto-symbol.js
UltraEdit.runTool("find symbol");
 
// Get the output from the outputWindow via a "side" clipboard.
var prev_clipboard_index = UltraEdit.clipboardIdx;
var temp_clipboard_index = prev_clipboard_index + 1;
if (temp_clipboard_index > 9) {
    temp_clipboard_index = 1;
}
UltraEdit.selectClipboard(temp_clipboard_index);
UltraEdit.outputWindow.copy();
var temp_lines = UltraEdit.clipboardContent.split("\n");
UltraEdit.selectClipboard(prev_clipboard_index);
 
var arrayLength = temp_lines.length;
if (arrayLength == 1 || (arrayLength == 2 && temp_lines[1].length == 0)) {    
    // fields = temp_lines[0].split("): ");
    var file_and_line = temp_lines[0].substring(0, temp_lines[0].lastIndexOf(")"));
    var delimiter =file_and_line.lastIndexOf("(");
    if (delimiter != -1) {
        var file_to_open = file_and_line.substring(0, delimiter);
        var lowercase_file_to_open = file_to_open.toLowerCase();
        var line_number = parseInt(file_and_line.substring(delimiter+1));
        // UltraEdit.outputWindow.write("DCB: Going to process file_to_open " + file_to_open + " at line " + line_number);
 
        if (file_to_open.length > 0) {
            for (var doc_index = 0; doc_index < UltraEdit.document.length; doc_index++) {
                open_filename = UltraEdit.document[doc_index].path.toLowerCase();
                if (open_filename == lowercase_file_to_open) {
                    UltraEdit.document[doc_index].setActive();
                    break;
                }
            }
 
            if (doc_index >= UltraEdit.document.length) {
                UltraEdit.outputWindow.write("DCB: used open().");
                UltraEdit.open(file_to_open);
            }
 
            UltraEdit.activeDocument.gotoLine(line_number,0);
            UltraEdit.activeDocument.selectLine(); // does this take a parameter?
        }
    }
}
ultraedit.txt · Last modified: 2021/05/21 00:04 (external edit)