Visit Our UNIX and Linux User Community


Control cursor position also at bottom of window


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Control cursor position also at bottom of window
# 8  
Old 02-03-2020
It still duplicates the question lines when the cursor is in the middle of the screen.


What do the lines printf "\e7\e[$LINES;120r\e8" and printf "\e7\e[1;${LINES}r\e8" accomplish? I suppose you set the value of LINES to the number of lines of the window - let's say 20. Then the first snippet would say "\e7\e[20;120r\e8" and the second printf "\e7\e[1;20\e8" and r means 'set top and bottom lines of window.'

Last edited by Ralph; 02-03-2020 at 10:08 PM..
# 9  
Old 02-04-2020
Quote:
Originally Posted by Ralph
It still duplicates the question lines when the cursor is in the middle of the screen.

Not with my linux lxterminal. But I admit it might benefit from some more tweaking.


Quote:
What do the lines printf "\e7\e[$LINES;120r\e8" and printf "\e7\e[1;${LINES}r\e8" accomplish? I suppose you set the value of LINES to the number of lines of the window - let's say 20. Then the first snippet would say "\e7\e[20;120r\e8" and the second printf "\e7\e[1;20\e8" and r means 'set top and bottom lines of window.'
man bash:
Quote:
Shell Variables
.
.
.
LINES Used by the select compound command to determine the column length for printing selection lists. Automatically set if the checkwinsize op
tion is enabled or in an interactive shell upon receipt of a SIGWINCH.
The 120 is just an arbitrary value way beyond the lower screen boundary. The construct sets the scroll region from last line seen to somewhere way down...
# 10  
Old 02-04-2020
For some reason LINES is not set in a non-interactive shell - even if checkwinsize is on. (I'm using Bash 5.0 but noticed that back in Bash 4.4, Kali Linux (which is Debian 9) and Raspian, too:
Code:
$ echo $LINES
24
$ bash
$ echo $LINES
24
$ cat showLINES
#!/bin/bash

echo LINES=$LINES

$ shopt checkwinsize
checkwinsize       on
$ bash showLINES
LINES=
 $

Hence I use LINES=$(tput lines) in my script.


But this works:
Code:
$ . ./showLINES
LINES=24
$

# 11  
Old 02-04-2020
Mind to share the necessity of [ICODE]askYesOrNo[/ICODE] in a non-interactive shell?


Try to

Code:
export LINES


Last edited by RudiC; 02-04-2020 at 09:01 AM..
# 12  
Old 02-04-2020
Hi Ralph...

Take a look at the two command below.
The first will give you your terminal size in lines, columns.
IF your terminal can do it, (xterm for example), the second will auto adjust it for you...

Code:
term_size=($( stty size ))
printf "%b" "\x1B[8;24;80t"

The 24 and 80 in the 'printf' statement can be anything to ALMOST the size of your desktop...
# 13  
Old 02-04-2020
Quote:
Originally Posted by wisecracker
Hi Ralph...

Take a look at the two command below.
The first will give you your terminal size in lines, columns.
IF your terminal can do it, (xterm for example), the second will auto adjust it for you...

Code:
term_size=($( stty size ))
printf "%b" "\x1B[8;24;80t"

The 24 and 80 in the 'printf' statement can be anything to ALMOST the size of your desktop...
Interesting. What do the outer parentheses around $(stty size) accomplish? I know they are used to force execution in a subshell. But what are they doing here?

I would have gone for
Code:
lines=$(stty size)
lines=${lines% *}

The printf statement doesn't seem to accomplish anything over here. What is it supposed to do? Is that documented somewhere?

In terms of documentation I was looking at this and this.
# 14  
Old 02-04-2020
I did quote early on in this thread that some terminals do not respond correctly to some terminal escape codes. Some of those escape codes will not work at all.

So in the first part the outside parentheses create an array in advanced shells like bash so therefore longhand:
Code:
Last login: Tue Feb  4 16:17:10 on ttys000
AMIGA:amiga~> term_size=($( stty size ))
AMIGA:amiga~> 
AMIGA:amiga~> printf "%b\n" "${term_size[0]}"
24
AMIGA:amiga~> 
AMIGA:amiga~> printf "%b\n" "${term_size[1]}"
80
AMIGA:amiga~> _

As for the second 'printf' line, changing the values 24 and 80 to say 30 and 120 will expand the terminal size on certain terminals, (xterm as an exmaple), to that size for the duration of that terminal session. Of course calling it again with 24 and 80 restores it back to the original.
IF and a big if, it doesn't work then many of those terminal commands in the URLs won't work either.

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Holding cursor position on one line

Hi there. It's easier to explain this with a pseudo code, I hope this makes sense: var1=hello echo $var1 some kind of loop echo loop counter done How do I hold the cursor position immediately behind the last output so I'd get something like: hello123456789 DOS used to use ","... (5 Replies)
Discussion started by: MuntyScrunt
5 Replies

2. Shell Programming and Scripting

Getting the cursor position

I need to get the cursor position, and put it inside a variable. Problem is, i don't have the tput command, or ncurses. Apparently I was supposed to try the following: echo -e '\E But I don't get a value or anything. Please help. (3 Replies)
Discussion started by: tinman47
3 Replies

3. Shell Programming and Scripting

ksh - moving cursor position

hi all, am trying to modify a ksh script to group server names together depending on the cluster they sit in. currently the script does a find . -name '*.pid' to find all running servers and prints out their pids and names. current output looks something like this : serverA ... (1 Reply)
Discussion started by: cesarNZ
1 Replies

4. UNIX for Dummies Questions & Answers

Cursor position

Is there a way of finding the current cursor position (line & column) within AIX (4 Replies)
Discussion started by: gefa
4 Replies

5. UNIX and Linux Applications

read position mouse cursor

Hi to all! I'm a teacher of maths and physics in an italian high school in Milan, Italy. I need a simple program that read the position of mouse cursor in function of time and write the coordinates in a text file. The time resolution have to be something like 1/10 sec or better (I have to know... (2 Replies)
Discussion started by: chris75
2 Replies

6. Shell Programming and Scripting

Changing cursor position using shell script

Hi, Pleae help me on this. Normally, when we say read username, the cursor will come in the first position of next line, but I want the output of the below Normal usage ------------- please enter username: _ I want like the below ---------------------- please enter username: ... (2 Replies)
Discussion started by: balamv
2 Replies

7. Programming

get terminal width and cursor position

I want to get the screen width and cursor positions. When I used curses, all the screen content was cleared. So Can I use curses to get the screen size without clearing anything in the window? Or is there any other alternative??? I can use only C or C++. (0 Replies)
Discussion started by: Sreejesh.S
0 Replies

8. HP-UX

Command to know the terminal cursor position

Dear all, How can i get the current cursor position..is thr any command to find the same? Thanks in Advance Aneesh (3 Replies)
Discussion started by: aneesha
3 Replies

9. Programming

Cursor Global Position

Hello all, How can i get the global position of the cursor? (i'm using c language, and suse 10.1 linux) Thanks. (3 Replies)
Discussion started by: boogy
3 Replies

10. Shell Programming and Scripting

Get the cursor position

Hello, Is there a way to get the current cursor position? I know "tput sc" saves it. Is there a way to find out the value saved? Thanks. (0 Replies)
Discussion started by: bestbuyernc
0 Replies

Featured Tech Videos