Introduction
Introduction Statistics Contact Development Disclaimer Help
Make scrolling actions to work with zeroxed layers. - sam - An updated version …
git clone git://vernunftzentrum.de/sam.git
Log
Files
Refs
LICENSE
---
commit 29ec8916b4867f462599605a00dc1f04c4619b5b
parent 2be8dae9931102b0e46c8c065d84684540147438
Author: Rob King <[email protected]>
Date: Thu, 1 Sep 2016 16:36:52 -0500
Make scrolling actions to work with zeroxed layers.
Diffstat:
doc/sam.1 | 9 ---------
samterm/main.c | 25 ++++++++++++++++++-------
samterm/mesg.c | 23 +++++++++++++----------
samterm/samterm.h | 3 ++-
4 files changed, 33 insertions(+), 27 deletions(-)
---
diff --git a/doc/sam.1 b/doc/sam.1
@@ -1029,15 +1029,6 @@ Stores output of shell commands executed by
.Xr ed 1
.Sh BUGS
.Pp
-Mouse chords can be directed to either the front layer,
-or to the layer containing the mouse pointer.
-In the latter case,
-this allows a background layer to be scrolled using the mouse wheel.
-However,
-this does not always work if the layer in question has multiple duplicate fram…
-This is because the scrolling code identifies which layer to scroll by tag,
-which is common to all views open on that file.
-.Pp
The only human language in which colors may be specified is English.
.Pp
The only human language in which output is generated is English.
diff --git a/samterm/main.c b/samterm/main.c
@@ -9,7 +9,7 @@
#include <commands.h>
extern unsigned long _bgpixel;
-extern void hmoveto(int, long);
+extern void hmoveto(int, long, Flayer *);
Text cmd;
Rune *scratch;
@@ -322,8 +322,8 @@ scrorigin(Flayer *l, int but, long p0)
case 2:
outTsll(Torigin, t->tag, p0, 1L);
break;
- case 3: case 5:
- horigin(t->tag,p0);
+ case 3:
+ horigin(t->tag, p0, NULL);
}
}
@@ -526,8 +526,19 @@ cmdbol(Flayer *l, long a, Text *t)
static long
cmdscrollupline(Flayer *l, long a, Text *t)
{
- if (l->origin > 0)
- hmoveto(t->tag, l->origin - 1);
+ if (l->origin > 0){
+ long x = l->origin - 1;
+ while (x > 0 && raspc(&t->rasp, x - 1) != '\n')
+ x--;
+
+ /* if (x > 0){
+ //x--;
+ while (x > 0 && raspc(&t->rasp, x) != '\n')
+ x--;
+ } */
+
+ horigin(t->tag, x, l);
+ }
return a;
}
@@ -539,7 +550,7 @@ cmdscrolldownline(Flayer *l, long a, Text *t)
long p1 = l->origin + frcharofpt(&l->f, Pt(l->f.r.min.x, l->f.r.max.y - l-…
if (p0 < tot && p1 < tot)
- horigin(t->tag, p0);
+ horigin(t->tag, p0, l);
return a;
}
@@ -707,7 +718,7 @@ cmddel(Flayer *l, long a, Text *t)
return a;
}
-static inline int
+int
getlayer(const Flayer *l, const Text *t)
{
int i;
diff --git a/samterm/mesg.c b/samterm/mesg.c
@@ -22,7 +22,7 @@ int inshort(int);
long inlong(int);
long invlong(int);
void hsetdot(int, long, long);
-void hmoveto(int, long);
+void hmoveto(int, long, Flayer *);
void hsetsnarf(int);
void clrlock(void);
int snarfswap(char*, int, char**);
@@ -215,7 +215,7 @@ inmesg(Hmesg type, int count)
case Horigin:
if(whichmenu(m) >= 0)
- horigin(m, l);
+ horigin(m, l, NULL);
break;
case Hunlockfile:
@@ -241,7 +241,7 @@ inmesg(Hmesg type, int count)
case Hmoveto:
if(whichmenu(m)>=0)
- hmoveto(m, l);
+ hmoveto(m, l, NULL);
break;
case Hclean:
@@ -537,14 +537,17 @@ hsetdot(int m, long p0, long p1)
}
void
-horigin(int m, long p0)
+horigin(int m, long p0, Flayer *l)
{
Text *t = whichtext(m);
- Flayer *l = &t->l[t->front];
+ l = l ? l : &t->l[t->front];
long a;
ulong n;
Rune *r;
+ if (getlayer(l, t) < 0)
+ return; /* the user managed to close the layer during the round trip w…
+
if(!flprepare(l)){
l->origin = p0;
return;
@@ -565,13 +568,13 @@ horigin(int m, long p0)
}
void
-hmoveto(int m, long p0)
+hmoveto(int m, long p0, Flayer *l)
{
- Text *t = whichtext(m);
- Flayer *l = &t->l[t->front];
+ Text *t = whichtext(m);
+ l = l ? l : &t->l[t->front];
- if(p0<l->origin || p0-l->origin>l->f.nchars*9/10)
- outTsll(Torigin, m, p0, 2L);
+ if (p0 < l->origin || p0 - l->origin > l->f.nchars * 9/10)
+ outTsll(Torigin, m, p0, 2L);
}
void
diff --git a/samterm/samterm.h b/samterm/samterm.h
@@ -117,7 +117,7 @@ void hcheck(int);
void rclear(Rasp*);
int whichmenu(int);
void hcut(int, long, long);
-void horigin(int, long);
+void horigin(int, long, Flayer *);
void hgrow(int, long, long, int);
int hdata(int, long, uchar*, int);
int hdatarune(int, long, Rune*, int);
@@ -158,3 +158,4 @@ void outshort(int);
void outlong(long);
void outvlong(void*);
void outsend(void);
+int getlayer(const Flayer *l, const Text *t);
You are viewing proxied material from vernunftzentrum.de. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.