21

When I double-click to select text in GNOME Terminal, the selection stops at spaces but continues over hyphens:

spaces

hyphens

Some of my filenames contain uncommon characters such as the heavy teardrop-spoked asterisk and are not selectable by double-clicking:

unusual characters

Is there a way to make double-click selection continue over these characters as well?

ændrük
  • 75,636
  • 74
  • 233
  • 365

6 Answers6

20

[Adding an answer since the accepted one no longer works.]

Script

I put this together into a script to set the word separators:

https://github.com/ab/ubuntu-wart-removal/blob/master/gnome-terminal-word-separators.sh

Background

GNOME Terminal has flip flopped several times on this subject.

This configuration feature was removed in gnome-terminal 3.14 (included in Ubuntu 15.04 Vivid)

Then in gnome-terminal 3.16 (included in Ubuntu 15.10 Wily), the option was reintroduced under the hood, but with no UI. In addition, colon : was changed to be treated as a word separator.

Editing with dconf

Per these instructions, you can configure the set using dconf: https://bugs.launchpad.net/ubuntu/+source/gnome-terminal/+bug/1401207/comments/8

I like to use -#%&+,./:=?@_~ as the set of non-word-separators.

Note that the use of colons there is /crazy/. Yes, there is :/: in there.

1) edit -> profile preferences -> the General tab on your profile has its Profile ID, e.g. b1dcc9dd-5262-4d8d-a863-c897e6d979b9

2) check you've got the syntax right with:

$ dconf list /org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9/ foreground-color visible-name palette use-system-font ...

If it returns nothing, you've got it wrong; try again.

3) dconf write /org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9/word-char-exceptions '@ms "-#%&+,./:=?@_~"'

Specifically, this has ":" in, which makes it select URLs like I expect. (http://example.com doesn't select "//example.com").

A B
  • 1,316
  • 9
  • 12
  • Thanks this is exactly what I needed in order to get `:`. Is it possible that you could write the command(s) to automatically fetch the default or current profile so I don't have to manually look up my profile ID in order to run that command in future? That way I can just run that script on fresh installs. – Programster Jun 06 '16 at 13:20
  • @Programster You could do something like this with `dconf list /org/gnome/terminal/legacy/profiles:/` – A B Jun 07 '16 at 00:13
  • thanks @alberge I took that and put it in a python script – Programster Jun 08 '16 at 11:18
  • What is the default value of `word-char-exceptions`, so I can add just one character? – Tor Klingberg Aug 21 '17 at 14:20
  • @TorKlingberg Apparently no one knows. You can use the dconf-editor graphical application to browse to that location. All it says is "default", but not what the default value is. – jrw32982 Jan 26 '21 at 20:50
11

In "Edit > Profile Preferences > General", add the character to the "Select-by-word characters" box.

mgunes
  • 9,780
  • 3
  • 41
  • 43
  • Thanks, I don't know how I didn't notice that. – ændrük Oct 20 '10 at 05:10
  • Has anyone found a general way to do this GNOME-wide? Or are word-boundaries up to the developers of each application to define/redefine? Related question: http://superuser.com/q/650240/245597 . – Noyo Sep 26 '13 at 13:19
  • 15
    At least since version 3.14, this option has disappeared. How can we do it now? – Joachim Breitner Nov 06 '14 at 10:20
  • I tried `dconf write /org/gnome/terminal/legacy/profiles:/:{your-profile-id}/word-char-exceptions '@ms "-,.;/?%_=+@~·:"'` but all I get is `error: Could not connect: Connection refused` – cprn Sep 09 '15 at 16:31
  • Can't seem to get the non-breaking space to work. It does work with the funky asterisk on mate terminal from Zesty however. – Gringo Suave Jun 11 '17 at 01:36
1

Other answers do not work today ... this works on ubuntu 18.04 ... first identify your UUID gnome terminal profile id ... issue this in terminal

profile=$(gsettings get org.gnome.Terminal.ProfilesList default)

echo $profile  #  for me it gives b1dcc9dd-5262-4d8d-a863-c897e6d97969

now make change :

dconf write /org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d97969/word-char-exceptions '@ms "-,.;?%&#_+@~·$/"'

until ubuntu 18.04 gets fixed the following read command silently fails whereas it worked fine on ubuntu 16.04

dconf  read  /org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9/word-char-exceptions
Scott Stensland
  • 14,755
  • 10
  • 55
  • 73
0

At Ubuntu 20.04.5 LTS. I've lost a couple of hours, trying to make it work. But the reason of the stall is quite simple: the meaning of "@ms" variable is inverse to intuitive, and inverse to what they've written in org.gnome.Terminal.gschema.xml.

@ms should contain the only characters, ALLOWED to select by double-click. So, if you DON'T want dashes or colons or smth to select, you may enter:

UUID=$(gsettings get org.gnome.Terminal.ProfilesList default | tr -d \')
dconf write /org/gnome/terminal/legacy/profiles:/:${UUID}/word-char-exceptions "@ms '_^'"

Change works immediately, retains through reset; but for different profile, you should repeat the command.

Jackal
  • 33
  • 3
  • Ubuntu 20 would be the Ubuntu Core 20 as that is the only version of Ubuntu to use a single digit version. If this is not the case please edit and correct the answer. – David Sep 26 '22 at 14:05
  • thanx, I've chaged – Jackal Sep 26 '22 at 14:32
0

A very useful default feature implemented in other terminals is the progressive selection of extended sections of a line on the screen. e.g., given

/home/username/dir1_r.2-3/dsr.filenr_34.ctr 23456677 dftrprpr

double-clicking on, say, filenr in dsr.filenr_34.ctr would progress from filenr to:

                              filenr_34
                          dsr.filenr_34.ctr
                       -3/dsr.filenr_34.ctr
                      2-3/dsr.filenr_34.ctr
                    r.2-3/dsr.filenr_34.ctr
               dir1_r.2-3/dsr.filenr_34.ctr
      username/dir1_r.2-3/dsr.filenr_34.ctr
 home/username/dir1_r.2-3/dsr.filenr_34.ctr
 home/username/dir1_r.2-3/dsr.filenr_34.ctr 23456677
 home/username/dir1_r.2-3/dsr.filenr_34.ctr 23456677 dftrprpr
/home/username/dir1_r.2-3/dsr.filenr_34.ctr 23456677 dftrprpr

Surrounding symmetries may be solved by adding pairs until next-level delimiter.

And of course the user should be given the option of changing defaults.

ændrük
  • 75,636
  • 74
  • 233
  • 365
marc
  • 9
  • 1
  • 1
    No comment on the answer but try to format it in a better way so that people understand it faster. If you want to list it step by step, use numbering. – VedVals Dec 13 '12 at 13:53
  • Thank you, but I don't think this applies to my question. I'm specifically asking how to configure GNOME Terminal. – ændrük Dec 13 '12 at 19:14
0

Extending @alberge answer, you can execute the following python3 script to change all your profiles to do this:

#!/usr/bin/python3

import subprocess

command = ["dconf", "list", "/org/gnome/terminal/legacy/profiles:/"]
result = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)

profiles = result.stdout.split('\n')

for profileString in profiles:
    if profileString.startswith(":"):
        changeCmdPart = "/org/gnome/terminal/legacy/profiles:/" + profileString + "word-char-exceptions"
        changeCmd = ["dconf", "write", changeCmdPart, '@ms "-#%&+,./:=?@_~"']
        subprocess.run(changeCmd)

print("done!")

Or you can just execute:

curl -s http://scripts.programster.org/scripts/5?output=raw | python3
Programster
  • 5,731
  • 20
  • 63
  • 92