This is an old revision of the document!
Table of Contents
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.
- Delete Host
- 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? } } }