d4ba8b64b84e444f39d9cc84f1858540561b5c01
max
  Fri Dec 12 12:29:10 2014 -0800
adding a linkIdInName tdb statement, refs #14534
diff --git src/hg/hgTracks/bedTrack.c src/hg/hgTracks/bedTrack.c
index c092189..33b2c11 100644
--- src/hg/hgTracks/bedTrack.c
+++ src/hg/hgTracks/bedTrack.c
@@ -579,30 +579,57 @@
     }
 else
     genericDrawItems(tg, seqStart, seqEnd, hvg, xOff, yOff, width,
 	    font, color, vis);
 }
 
 char *bedName(struct track *tg, void *item)
 /* Return name of bed track item. */
 {
 struct bed *bed = item;
 if (bed->name == NULL)
     return "";
 return bed->name;
 }
 
+char *bedNameField1(struct track *tg, void *item)
+/* return part before first space in item name */
+{
+struct bed *bed = item;
+if (bed->name==NULL)
+    return "";
+char *nonSpc = stringIn(" ", bed->name);
+if (nonSpc==NULL)
+    return bed->name;
+int part1Len = nonSpc - bed->name;
+char *newName = cloneStringZ(bed->name, part1Len);
+return newName;
+}
+
+char *bedNameField2(struct track *tg, void *item)
+/* return part after first space in item name */
+{
+struct bed *bed = item;
+if (bed->name==NULL)
+    return "";
+
+char* spcPos = stringIn(" ", bed->name);
+if (spcPos==NULL)
+    return bed->name;
+return cloneString(spcPos+1);
+}
+
 int bedItemStart(struct track *tg, void *item)
 /* Return start position of item. */
 {
 struct bed *bed = item;
 return bed->chromStart;
 }
 
 int bedItemEnd(struct track *tg, void *item)
 /* Return end position of item. */
 {
 struct bed *bed = item;
 return bed->chromEnd;
 }
 
 void freeSimpleBed(struct track *tg)
@@ -647,30 +674,37 @@
 {
 tg->drawItems = bedDrawSimple;
 tg->drawItemAt = bedDrawSimpleAt;
 tg->itemName = bedName;
 tg->mapItemName = bedName;
 tg->totalHeight = tgFixedTotalHeightNoOverflow;
 tg->itemHeight = tgFixedItemHeight;
 tg->itemStart = bedItemStart;
 tg->itemEnd = bedItemEnd;
 // Adding "tg->nextPrevExon = simpleBedNextPrevEdge;" opened a can of worms: too many
 // bed-based tracks have their own drawItems methods that don't hook into nextItem stuff,
 // or drawItemAt methods that draw mapboxes but tg->mapsSelf is not set...
 // So, set tg->nextPrevExon = simpleBedNextPrevEdge case-by-case.
 tg->nextPrevItem = linkedFeaturesLabelNextPrevItem;
 tg->freeItems = freeSimpleBed;
+
+if (trackDbSettingClosestToHomeOn(tg->tdb, "linkIdInName"))
+    {
+    tg->mapItemName = bedNameField1;
+    tg->itemName = bedNameField2;
+    }
+
 }
 
 void bed9Methods(struct track *tg)
 /* Fill in methods for bed9 tracks. */
 {
 linkedFeaturesMethods(tg);
 tg->loadItems = loadBed9;
 }
 
 void addSimpleFeatures(struct simpleFeature **pSfList, int start, int end, int qStart, boolean  everyBase)
 /* Add simple features from start to end to the list.
  * qStart is the offset in the query.
  * If everyBase is TRUE then add a simpleFeature for every base in the start,end region */
 {
 int s;