83858083785a6b2b1f3c05f93e818e5a89318692
max
  Tue Aug 25 01:42:34 2026 -0700
hgSession: show cytoBand and gene/locus annotations for each saved session; date-only Created/Last used columns with full timestamp on hover. Factor locusName lookup into reusable hLocusName/hLocusNameExpand in hdb.c and reuse from hgBlat. refs #38157

The Assembly column now shows band, gene/locus name and Mbp position (separated by whitespace, normal text size). hLocusNameExpand centralizes the ex:/in:/ig: and | to - expansion that hgBlat's results page did inline.

diff --git src/hg/hgBlat/hgBlat.c src/hg/hgBlat/hgBlat.c
index 82d35e0a512..591e2aae91b 100644
--- src/hg/hgBlat/hgBlat.c
+++ src/hg/hgBlat/hgBlat.c
@@ -748,31 +748,31 @@
             hgcUrl, psl->tStart, pslName, cgiEncode(faName), cgiEncode(psl->qName), psl->tName,
             psl->tStart, psl->tEnd, database, uiState);
     else
         /* Shared-link reopen: there is no trash .pslx, but the durable bigPsl custom track (now in
          * this cart) lets hgc's htcBlatAlign rebuild the base alignment from the stored query seq.
          * chrom/start/qName select the hit; db and the browser window come from the loaded cart. */
         jsonWriteStringf(jw, "detailsUrl", "%s?g=htcBlatAlign&db=%s&c=%s&o=%d&i=%s&%s",
             hgcUrl, database, psl->tName, psl->tStart, cgiEncode(psl->qName), uiState);
     if (locusConn)
         {
         struct sqlResult *sr = hRangeQuery(locusConn, "locusName", psl->tName, psl->tStart, psl->tEnd, NULL, 0);
         char **row = sqlNextRow(sr);
         if (row != NULL)
             {
             char *raw = row[4];
-            char *full = subTextString(subList, raw);
+            char *full = hLocusNameExpand(raw);   // shared with hgSession, see hdb.c
             jsonWriteString(jw, "locusText", full);
             freeMem(full);
             char *type = NULL, *genes = raw;
             if (startsWith("ig:", raw))
                 { type = "intergenic"; genes = raw + 3; }
             else if (startsWith("ex:", raw))
                 { type = "exon"; genes = raw + 3; }
             else if (startsWith("in:", raw))
                 { type = "intron"; genes = raw + 3; }
             if (type != NULL)
                 {
                 jsonWriteString(jw, "locusType", type);
                 jsonWriteListStart(jw, "locusGenes");
                 char *dupe = cloneString(genes);
                 char *words[128];